Кіріспе

Компьютерлік жадтың болжамды жұмыс істеуін қамтамасыз ететін ережелер. Компьютерлік ғылымда тұтастық моделі – бағдарламашы мен жүйе арасындағы келісімшарт. Егер бағдарламашы жадқа операциялар жасау ережелерін сақтаса, жүйе жадтың тұрақты болатынын және жадты оқу, жазу немесе жаңарту нәтижелерінің болжамды болатынын кепілдендіреді. Тұтастық модельдері үлестірілген жад жүйелері немесе үлестірілген деректер сақтау орындары (файлдық жүйелер, деректер базалары, оптимистік көшірме жасау жүйелері немесе веб-кеш сияқты) сияқты үлестірілген жүйелерде қолданылады. Тұтастық, кэштелген немесе кэшсіз жүйелерде кездесетін және барлық процессорларға қатысты деректердің сәйкестігінен өзгеше. Когеренттілік – бұл бір орынға немесе бір айнымалыға жазылған жазуларды барлық процессорлардың көретін жаһандық реттілікті сақтаумен айналысады. Ал тұтастық – барлық процессорларға қатысты бірнеше орындарға жасалған операциялардың реттілігімен байланысты. C++ және Java сияқты жоғары деңгейдегі тілдер жад семантикасын сақтай отырып, жад операцияларын төмен деңгейдегі операцияларға түрлендіру арқылы, кейбір жад командаларын қайта реттеу арқылы және pthread mutex lock сияқты кітапхана шақыруларымен қажетті синхронизацияны қамтамасыз ету арқылы тұтастық келісімшартын сақтайды.

Мысал

Келесі жағдай орын алады деп есептейік: Тұтастық модельдерін анықтау және жіктеудің екі тәсілі бар: мәселе және көрініс. Мәселе тәсілі процестің операцияларды орындауын шектейтін талаптарды сипаттайды. Көрініс тәсілі процестерге көрінетін операциялардың ретін анықтайды. Мысалы, тұтастық моделі процеске барлық алдыңғы операциялар аяқталғанға дейін жаңа операцияны орындауға рұқсат етілмейтінін белгілеуі мүмкін. Әртүрлі тұтастық модельдері әртүрлі шарттарды қояды. Егер бір тұтастық моделі екіншісінің барлық шарттарын және одан да көп талаптарды орындаса, онда ол күштірек деп есептелуі мүмкін. Яғни, шектеулері аз модель әлсіз тұтастық моделі болып саналады. Бұл модельдер аппараттық құралды қалай құру керектігін және бағдарламашының кодтауын қалай жүзеге асыру керектігін жоғары деңгейде анықтайды. Таңдалған модель компилятордың нұсқауларды қайта реттеуіне де әсер етеді. Әдетте, егер нұсқаулар арасында басқару тәуелділіктері болса және бірдей жад орнына жазу реті сақталса, компилятор қажет болған жағдайда оларды қайта реттей алады. Дегенмен, төменде сипатталған модельдердің кейбіреулері жүктеуден бұрын жазуды қайта реттеуге мүмкіндік береді, ал кейбіреулері рұқсат етпейді.

Кэштің сәйкестігі

Кэштің тұрақтылығы, тиісті бағдарламалау арқылы баяу жадтың (сәйкестілік) экспрессивті және тиімді бола алатынын көрсетеді. Олар баяу жадтың екі маңызды қасиеті бар екенін айтады: локальдық және атомдық жадтан азайтуды қолдау. Олар баяу жадтың экспрессивтілігін көрсету үшін екі алгоритм ұсынады.

Сессиялық кепілдіктер

Бұл 4 дәйектілік моделі 1994 жылғы мақалада ұсынылған. Олар деректерді өзгертуді тек бір пайдаланушы немесе қосымша жасайтын жағдайдағы кепілдіктерге баса назар аударады.

Босату консистенциясы

Босату консистенттілік моделі әлсіз консистенттілік моделін кіру синхрондау операциясын шығу синхрондау операциясынан ажырату арқылы жеңілдетеді. Әлсіз реттелуде, синхрондау операциясы байқалатын болса, синхрондау операциясы аяқталғанға және процессор жұмысын жалғастырғанға дейін барлық процессорлардағы барлық операциялар көрінуі керек. Дегенмен, босату консистенттілік моделінде, "алыну" деп аталатын сынды бөлімге кіргенде, жергілікті жад айнымалыларына қатысты барлық операциялар аяқталуы тиіс. "Шығарылу" деп аталатын шығу кезінде, жергілікті процессор жасаған барлық өзгерістер басқа барлық процессорларға таратылуы керек. Когеренттілік сақталады. "Алыну" операциясы – бұл сынды бөлімге қол жеткізу үшін жүзеге асырылатын жүктеу/оқу операциясы. "Шығарылу" операциясы – басқа процессорларға ортақ айнымалыларды пайдалануға рұқсат беру үшін жүзеге асырылатын сақтау/жазу операциясы. Синхрондау айнымалылары арасында реттілік консистенттілігі немесе процессор консистенттілігі сақталуы мүмкін. Реттік консистенттілікті (SC) пайдаланып, барлық бәсекелес синхрондау айнымалылары рет бойынша өңделуі керек. Алайда, процессор консистенттілігінде (PC) бәсекелес екі айнымалы тек осы реттілік сақталуы керек. Жаңа алынулар ескі шығарылымдардан бұрын орын алуы мүмкін.

Кірудің біркелкілігі

Бұл - босату консистенциясы моделінің бір түрі. Ол да маңызды бөлімге кіру немесе шығуды нақты көрсету үшін алу және босату нұсқауларын қолдануды қажет етеді. Дегенмен, кіру консистенциясы бойынша әрбір ортақ айнымалыға оған арналған жеке синхрондау айнымалысы тағайындалады. Осылайша, x айнымалысы үшін алу операциясы орындалғанда, x-ке қатысты барлық операциялар сол процессор үшін аяқталуы тиіс. Бұл әртүрлі ортақ айнымалылардың әртүрлі маңызды бөлімдеріндегі операциялардың бірдей уақытта орындалуына мүмкіндік береді. Бірақ, бір ортақ айнымалыдағы маңызды операциялардың бірдей уақытта орындалуын көруге болмайды. Мұндай консистенция моделі әртүрлі матрица элементтерін бір уақытта өңдеу қажет болғанда пайдалы болады.

Жергілікті жүйелілік

Жергілікті сәйкестікте барлық процестер жазуды аяқтағаннан кейін жад орнының барлық көшірмелері бірте-бірте толықтай бірдей болады.

Бағдарламаның тапсырмаларын жазу үшін оқып, оқып, демалу: Alpha, RMO және PowerPC

Кейбір модельдерде әртүрлі орналасқан жерлерге жасалатын барлық операциялар жеңілдетіледі. Оқу немесе жазу операциясы, басқа орналасқан жердегі басқа оқу немесе жазу операциясына қатысты өзгертілуі мүмкін. Әлсіз реттілік осы санатқа жатуы мүмкін, сондай-ақ екі түрлі шығарылым консистенциясы моделі (RCsc және RCpc) да осы модельге жатады. Бұл жеңілдету санаты бойынша үш коммерциялық архитектура ұсынылады: Digital Alpha, SPARC V9 жеңілдетілген жад тәртібі (RMO) және IBM PowerPC модельдері. Бұл үш коммерциялық архитектурада қауіпсіздік үшін нақты қоршау нұсқаулары қолданылады. Альфа моделі екі түрлі қоршау нұсқауларын ұсынады: жад кедергісі (MB) және жазу кедергісі (WMB). MB операциясы, MB нұсқаулысынан бұрынғы жад операциясының бағдарламалық ретін, кедергіден кейінгі жад операциясымен сақтау үшін пайдаланылуы мүмкін. Сол сияқты, WMB тек жазу операцияларының бағдарламалық ретін сақтайды. SPARC V9 RMO моделі MEMBAR нұсқауын ұсынады, оны болашақ оқу және жазу операцияларына қатысты алдыңғы оқу және жазу операцияларын реттеу үшін бейімдеуге болады. Бұл реттілікке қол жеткізу үшін оқу-өзгерту-жазу операцияларын қолдану қажет емес, өйткені MEMBAR нұсқауын келесі оқуға қатысты жазуды реттеу үшін пайдалануға болады. PowerPC моделі SYNC деп аталатын бір қоршау нұсқауын қолданады. Бұл MB нұсқаулына ұқсас, бірақ бір ерекшелігі бар: егер SYNC екі оқу операциясының арасына орналастырылған болса да, оқу операциясы бағдарламалық реттілікке сәйкес келмейтін тәртіппен орындалуы мүмкін. Бұл модель сондай-ақ Альфа және RMO модельдерінен атомдық тұрғысынан ерекшеленеді. Ол жазу операциясының оқу операциясы аяқталғаннан бұрын көрінуіне мүмкіндік береді. Жазу операциясының атомдығын жасау үшін оқу-өзгерту-жазу операцияларын біріктіру қажет болуы мүмкін. RMO және PowerPC бір орналасқан жерге жасалатын оқу операцияларын өзгертуге мүмкіндік береді. Бұл модельдер А және В мысалдарындағы тізбектілік тәртібін бұзады. Бұл модельдерде рұқсат етілген қосымша жеңілдету – оқу операциясынан кейін жасалатын жад операциялары оқу операциясына қатысты қайта реттелуі және өзгертілуі мүмкін. Альфа және RMO басқа процессордың ерте жасаған жазу операциясының мәнін қайтаруға мүмкіндік береді. Бағдарламашының көзқарасы бойынша, бұл модельдер процессорға өз жазу операциясын ертерек оқуға мүмкіндік берсе де, жазу операциясының атомдығын сақтауы керек.

Біркелкілік және қайталану

Таненбаум және басқалар, 2007 ж. репликацияның екі негізгі себебін анықтайды: сенімділік және өнімділік. Репликацияланған файлдық жүйеде сенімділікке ағымдағы реплика сәтсіз болған жағдайда басқа репликаға ауысу арқылы қол жеткізіледі. Репликация сонымен қатар әртүрлі репликалардағы деректердің бірнеше көшірмесін сақтау арқылы деректердің бұзылуына қарсы қорғауды қамтамасыз етеді. Бұдан бөлек, жұмысты бөлу арқылы өнімділікті жақсартады. Репликация өнімділікті және сенімділікті арттырса да, деректердің бірнеше көшірмесі арасындағы үйлесімділік проблемаларын тудыруы мүмкін. Көптеген көшірмелер үйлесімді болып саналады, егер оқу операциясы барлық көшірмелерден бірдей мәнді қайтарса және жазу операциясы басқа операциялар орын алғанға дейін барлық көшірмелерді жаңартатын бір атомдық операция (мәміле) болса. Таненбаум, Эндрю және Мартен Ван Стин, 2007. Бұл модельде қолданбаның үйлесімділік семантикасы қолданбадағы контиттерді пайдалану арқылы сипатталады. Үйлесімділік талаптары қолданба семантикасына байланысты өзгеше болуы мүмкін болғандықтан, Ю және Вахдат (2000) алдын ала анықталған біртұтас үйлесімділік моделі тиімді тәсіл болмауы мүмкін деп санайды. Қолданба өзінің семантикасын қанағаттандыратын үйлесімділік талаптарын көрсетуі керек. Бұл модельде қолданба әрбір үйлесімділік талабын контит (үйлесімділік бірліктерінің аббревиатурасы) ретінде анықтайды. Контит физикалық немесе логикалық үйлесімділік болуы мүмкін және үйлесімділікті өлшеу үшін қолданылады. Таненбаум және басқалар, 2007 контит ұғымын мысал келтіре отырып сипаттайды. Қолданбалар үш үйлесімсіздікке төтеп беруге қабілетті. Сандық мәндердегі ауытқу. Сандық ауытқу контит мәні мен соңғы жаңартудың салыстырмалы мәні арасындағы айырмашылықты шектейді. Белгілі бір қолданбада жазулардың маңыздылығын анықтайтын салмақтар жазуларға тағайындалуы мүмкін. Контиттегі көрінбеген жазулардың жалпы салмағы қолданбадағы сандық ауытқу ретінде анықталуы мүмкін. Сандық ауытқудың екі түрі бар: абсолютті және салыстырмалы сандық ауытқу. Реттелудегі ауытқу. Реттелу ауытқуы – репликадағы жазулардың жергілікті реті мен олардың соңғы бейнедегі салыстырмалы реті арасындағы айырмашылық. Репликалар арасындағы ескірудегі ауытқу. Ескіру ауытқуы жергілікті көрінбеген контиттегі қазіргі уақыт пен ең ескі жазудың арасындағы айырмашылықты шектеу арқылы ең ескі жазудың жарамдылығын анықтайды. Әрбір серверде нақты реттілік белгіленуі тиіс және контитте қолданылатын белгісіз жазулардың жергілікті кезегі болады. Белгісіз жазулар кезегінің максималды ұзындығы – реттілік ауытқуының шегі. Жазулар саны лимиттен асып кеткен жағдайда, жаңадан жіберілген жазуларды қабылдаудың орнына, сервер басқа серверлермен байланысқа түсіп, жазулар орындалу тиіс ретіне сәйкес белгісіз жазуларды бекітуге тырысады. Егер барлық үш ауытқу шегі нөлге тең болса, үздіксіз үйлесімділік моделі күшті үйлесімділік болып табылады.

Бастапқы негіздегі протоколдар

Бастапқы негізделген протоколдарды іске асыру оңайырақ сәйкестік протоколдарының бір класы ретінде қарастыруға болады. Мысалы, операциялардың дәйекті түрде реттелгендігі маңызды болғанда, реттілікпен реттеу кең таралған бірізділік моделі болып табылады. Реттілікпен реттеуді бастапқы негізделген протокол ретінде қарастыруға болады. Мұндай протоколдарда дерек сақтағыштағы әрбір дерек элементі үшін сол дерек элементіне жасалатын жазу операцияларын үйлестіруге арналған бастапқы элемент болады.

Қашықтан жазу протоколдары

Репликацияны қолдайтын ең қарапайым негізгі протокол, басқаша айтқанда, негізгі-қосалқы протокол, жазу операциялары бір серверге жіберіледі, ал оқу операцияларын жергілікті түрде орындауға болады. Мысалы, Tanenbaum және басқалар, 2007 негізгі-қосалқы протоколының мысалын келтіреді. Негізгі-қосалқы протоколының схемасы осы протоколдың жұмыс істеуін көрсетеді. Клиент жазу сұранысын жібергенде, ол негізгі серверге бағытталады. Негізгі сервер жаңартуды орындау үшін қосалқы серверлерге сұрау жібереді. Содан кейін сервер барлық қосалқы серверлерден жаңартуды растауды алады және клиентке жазу аяқталғанын хабарлайды. Кез келген клиент соңғы жаңартуды жергілікті түрде оқи алады. Бұл протоколдың кемшілігі – жаңарту сұранысын жіберген клиентке жауапты күтуге ұзақ уақыт кетуі мүмкін. Бұл мәселені жергілікті түрде жаңартуларды орындап, содан кейін басқа қосалқы серверлерден жаңартуларды орындауды сұрау арқылы шешуге болады. Блоктамайтын негізгі-қосалқы протоколы барлық қосалқы серверлерде жаңартулардың сәйкестігіне кепілдік бермейді. Дегенмен, ол өнімділікті арттырады. Негізгі-қосалқы протоколында барлық процестер жазу операцияларын бірдей ретпен көреді, себебі бұл протокол келіп түсетін барлық жазуларды жаһандық бірегей уақыт бойынша реттейді. Блоктау протоколдары процестерге соңғы жазу операциясының нәтижесін көруге мүмкіндік береді.

Жергілікті жазу протоколдары

Бастапқы негіздегі жергілікті жазу протоколдарында негізгі көшірме жаңарту жасауға дайын процестер арасында жылжып отырады. Дерек элементін жаңарту үшін процесс оны алдымен өз орнына көшіреді. Осы тәсілдің нәтижесінде, әр процесс дерек элементтерінің жергілікті көшірмесін оқи алатынына байланысты, жазу операцияларын тікелей орындау мүмкін болады. Бастапқы жаңартуын аяқтағаннан кейін, жаңарту басқа көшірмелерге жіберіледі және олардың барлығы жаңартуды өздерінде орындайды. Бұл кедергісіз әдіс жақсартуға алып келуі мүмкін. Жергілікті жазу протоколының схемасы бастапқы негіздегі протоколдардағы жергілікті жазу тәсілін көрсетеді. Процесс x дерек элементіне жазу операциясын сұрайды. Ағымдағы сервер x дерек элементі үшін жаңа бастапқы болып есептеледі. Жазу операциясы орындалады және сұрау аяқталғаннан кейін бастапқы сервер басқа резервтік серверлерге жаңарту сұрауын жібереді. Әр резервтік көшірме жаңарту операциясын аяқтағаннан кейін бастапқыға қуаттау жібереді.

Көшірмелі жазу протоколдары

Көшірме жазу протоколдарында, бастапқы негізделген протоколдан өзгеше, барлық жаңартулар барлық көшірмелерге жасалады.

Белсенді репликация

Белсенді репликация кезінде жазу операциясын орындау үшін әрбір репликаға байланысты процесс болады. Яғни, жаңартулар операция түрінде әрбір репликаға жіберіліп, орындалады. Барлық жаңартулар барлық репликаларда бірдей тәртіппен орындалуы тиіс. Осының салдарынан, толық реттелген көп тарату механизмі қажет. Мұндай көп тарату механизмін ірі таратылған жүйелерде іске асыруда масштабталу мәселесі туындайды. Тағы бір тәсіл бар, онда әрбір операция орталық координаторға (секвенсерге) жіберіледі. Координатор әрбір операцияға тізбектелген нөмірді тағайындап, содан кейін оны барлық репликаларға жібереді. Екінші тәсіл де масштабталу мәселесін шеше алмайды.

Кворумға негізделген хаттамалар

Дауыс беру көшірме жазу протоколдарындағы тағы бір тәсіл болуы мүмкін. Бұл тәсілде клиент көшірме деректерді оқу және жазу үшін бірнеше серверден рұқсат сұрайды және алады. Мысалы, таратылған файлдық жүйеде файл N серверде көшірмеленген делік. Файлды жаңарту үшін клиент жаңартуды орындауға келісім беру үшін кем дегенде N/2 + 1 серверге сұрау жіберуі керек. Келісімге қол жеткеннен кейін, файлға өзгерістер енгізіледі және жаңартылған файлға жаңа нұсқа нөмірі тағайындалады. Сол сияқты, көшірмеленген файлды оқу үшін клиент N/2 + 1 серверге сол серверлерден тиісті нұсқа нөмірін алу үшін сұрау жібереді. Егер алынған барлық нұсқа нөмірлері ең соңғы нұсқа болса, оқу операциясы аяқталады.

Кэш-сақтықты протоколдар

Көшірілген файлдық жүйеде кэш сәйкестік протоколы кэштердің дұрыстығын қамтамасыз етеді, ал кэштер әдетте клиенттермен басқарылады. Көптеген жағдайларда кэш дұрыстығы негізгі аппараттық құралдармен қамтамасыз етіледі. Орталық бағдарламалық қамтамасыз етуге негізделген таратылған жүйелердегі кейбір басқа тәсілдер кэш дұрыстығын қамтамасыз ету үшін бағдарламалық шешімдерді қолданады. Кэш дұрыстығы модельдері сәйкессіздіктердің қашан пайда болатынын анықтайтын сәйкестікті анықтау стратегиялары бойынша өзгеше болуы мүмкін. Сәйкессіздікті анықтаудың екі тәсілі бар: статикалық және динамикалық шешімдер. Статикалық шешімде компилятор қандай айнымалылар кэш сәйкессіздігін тудыратынын анықтайды. Сондықтан компилятор сәйкессіздік проблемасын болдырмау үшін нұсқауды орындайды. Динамикалық шешімде сервер кэштелген деректер кэшке енгізілгеннен кейін өзгерген деректердің дұрыстығын бақылау үшін деректерді өңдеу кезінде сәйкессіздіктерді тексереді. Сәйкестікті күшейту стратегиясы – тағы бір кэш сәйкестік протоколы. Ол сервердегі көшірмелерді пайдалану арқылы кэштерде дұрыстықты қалай қамтамасыз етуді анықтайды. Деректерді дұрыс сақтаудың бір жолы – ортақ деректерді кэшке сақтамау. Сервер деректерді сақтап, ортақ деректердің дұрыстығын қамтамасыз ету үшін бастапқы протоколдар сияқты сәйкестік протоколын қолдана алады. Бұл шешімде клиенттер тек жеке деректерді ғана кэшке сақтай алады. Егер ортақ деректер кэшке сақталған жағдайда, кэш сәйкестігін күшейту үшін екі тәсіл бар. Бірінші тәсілде ортақ деректер жаңартылғанда сервер барлық кэштерге жарамсыздық хабарламасын жібереді. Екінші тәсілде жаңарту таратылады. Көптеген кэштеу жүйелері осы екі тәсілдің бірін қолданады немесе олардың арасында динамикалық түрде таңдайды.