4.1 Брювер бойынша Келісімділік
Эрик Брювер дерекқор саласының маманы емес еді. Ол таралған жүйелерді зерттейді және 2000 жылы "Таралған есептеулер принциптері" деген презентация жасаған, онда CAP "теоремасын" ұсынды. 2010 жылы оны тағы да осы конференцияға шақырды, онда CAP "теоремасын" ескерген жүйелерді мысалға келтірді. Таралған жүйелерде дерекқорлардан өзгеше терминдер қолданылады.
Нақты айтсақ, бір сәттік келісімділік дегеніміз, пайдаланушыға деректер жаңартуының сәтті аяқталғандығы туралы хабар берілгеннен кейін, осы операцияның нәтижесі бірден барлығына көрінетінін білдіреді.
Ақыр соңында келісімділік дегеніміз, ұзақ уақыт бойы жаңартулар болмай қалған кезде, барлық деректер өзгертулері бүкіл жүйе бойынша таралып, барлық репликалар бірдей күйге келетінін білдіреді.
Келісімділік түсінігін қарастыра отырып, Брювер "теоремасы" өте қарапайым және түсінікті: таралған жүйеде бөлінген деректермен бір уақытта тек үш қажетті қасиеттің екеуіне ғана жетуге болады – келісімділік, қолжетімділік және желіні бөлуге қарсы тұрақтылық. Брювер ACID қасиеттер жиынтығын BASE (Basically Available, Soft-state, Eventual consistency – көбінесе қол жетімді; тұрақсыз күй; болашақта келісімділік) жиынтығымен салыстырады.
Алайда бұл салыстыру толығымен дұрыс емес, себебі біріншісі транзакциялардың логикалық аспектілеріне, ал екіншісі – таралған жүйелердің физикалық қасиеттеріне қатысты. Сондықтан мұндай жүйелермен жұмыс істеу үшін үйлесімсіз талаптар болуы мүмкін екі түрлі жұмыс схемасын қолдану қажет.
4.2 «Теореманы» дәлелдеу
Көптеген адамдар Брювер "теоремасы" формалды дәлелденген деп есептейді. Шынында, Сет Гильберт (Seth Gilbert) және Нэнси Линч (Nancy Lynch) мақалада кейбір (шамамен) формалды анықтамалар енгізіледі, оның контексінде "теорема" шын мәнінде теоремаға айналады және дәлелденеді. Дегенмен, Брювер "теоремасы" бойынша таралған жүйенің үш қасиетінің қайсысы қалай анықталатынын қарастырайық, олардың тек екеуін ғана бір уақытта қамтамасыз ету мүмкін.
Келісімділік атомарлық немесе линеаризацияланатын келісімділік (atomic, or linearizable consistency) деп аталады, бұл жүйенің барлық жеке деректер объектілері атомарлы (линеаризацияланатын) болып табылатын қасиеті. Өз кезегінде, атомарлы объект деп бірнеше операциялары бар объекті айтылады, мұнда операцияны шақыру және оның жауап деректерін алу дерлік лезде орындалады, яғни объект келесі операцияны қабылдамайды, бұрынғы операция толық аяқталмайынша. Операцияларды қабылдау тәртібі осындай болу керек, егер жазба операциясынан кейін оқу операциясы келсе, оқу операциясы осы немесе кейінгі жазба операциясымен жазылған мәнді қайтару керек.
Таралған жүйе тұрақты қолжетімді болып табылады, егер әрбір сұрауға, оны қабылдамаған түйіннен жауап алынады. Жүйенің желіні бөлуге қарсы тұрақтылығы бір түйіннен екіншісіне жіберілетін хабарламаның кез келген санын жоғалтқан кезде жүйенің жұмыс істеу қабілеттілігін сақтау ретінде модельденеді.
Осы анықтамалар негізінде Гильберт және Линч келесі теореманы тұжырымдайды (асинхронды желі моделінде сағаттар жоқ, түйіндерде тек алынған хабарламалар мен жергілікті есептеулер негізінде шешімдер қабылдануы керек):
Асинхронды желі моделінде барлық рұқсат етілген орындалулар үшін қол жетімділік және атомарлық келісімділік қасиеттеріне кепілдік беретін оқу және жазу операциялары бар деректер объектісін жүзеге асыру мүмкін емес (соның ішінде хабарламалар жоғалатындар).
Бұл теорема шынымен жеткілікті қарапайым түрде "қарсы әдісімен" формалды дәлелденеді. Әрі қарай мақалада мынадай салдары шығады:
Асинхронды желі моделінде барлық рұқсат етілген орындалулар үшін қол жетімділік және хабарламалар жоғалмайтын рұқсат етілген орындалулар үшін атомарлық келісімділік қасиеттеріне кепілдік беретін оқу және жазу операциялары бар деректер объектісін жүзеге асыру мүмкін емес.
Сонымен қатар, ішінара синхронды желі моделі үшін негізгі теореманың шындығы, онда әрбір түйінде сағаттар бар, олардың уақыттары бірдей жылдамдықпен өседі, бірақ синхрондалмаған, яғни бір мезгілде әртүрлі уақытты көрсете алады. Осы жағдай үшін ұқсас салдар шығарылмайтыны көрсетілген, демек, ішінара синхрондық желілер үшін "жақсы" қасиеттері бар таралған жүйелерді ұйымдастыру мүмкіндіктері көп.
Иә, белгілі бір мағынада (міндетті түрде ол Брювермен нақтыланған мағынада емес) Гильберт және Линч бір таралған жүйеде атомарлық келісімділік, қол жетімділік және желіні бөлуге төзімділік қасиеттерін бір уақытта қамтамасыз ету мүмкін еместігін дәлелдеген деп санай алады. Бірақ бұл жалпы дерекқор транзакциялармен және нақты ACID транзакциялармен қалай байланысты?
4.3 ACID-транзакциялар
Бұл туралы "CAP теоремасы" талқысына арналған жазбасында Джулиан Браун (Julian Browne) былай жазады:
Гильберт және Линч дәлелінде келісімділік терминінің орнына атомарлық терминін қолданады, бұл техникалық тұрғыдан мағыналырақ, себебі ACID тұрғысында келісімділік – бұл дерекқордың идеалды қасиеттеріне қатысты және ол кейбір алдын-ала орнатылған шектеулерге қайшы келетін деректердің тұрақты сақталмауын білдіреді.
Бірақ егер таралған жүйелердің алдын-ала орнатылған шектеуі бірдей деректер элементінің бірнеше түрлі мәндерінің болуына тыйым салу деп есептесек, бұл келісімділік абстракциясындағы кемшілікті елеусіз деп санауға болады (бұдан басқа, егер Брювер атомарлық терминін қолданса, AAP теоремасы пайда болар еді, оның атауы өте беймаза айтуға қиын болар еді).
Бұл аса салмақты жазылмаған, бірақ шын айтылған. Және шын мәнінде атомарлық келісімділік талаптарын ACID мағынасындағы транзакциялардың келісімділік талаптарымен араластырмау керек. Дерекқордың бүтінділігінің шектеулері – логикалық, қажет болған жағдайда бизнес талаптар. Олар қолданбалы аймақтың логикасынан шыққан. Атомарлық келісімділік талаптары мүлдем басқа түрдегі. Бұл жүзеге асыру талабы, ол дәстүрлі түрде дерекқорлар аймағында физикалық келісімділік деп аталатын категорияға қатысты (мысалы, кез-келген индексті өзгерту операциясын орындау кезінде барлық блоктар, сәйкесінше B+-ағаштың дұрыс мәндерді қамтуы және дұрыс сілтемелермен байланысуы керек).
Ал, дерекқорлар қауымдастығының Дэниэль Абади (Daniel Abadi) және Александер Томсон (Alexander Thomson) сияқты өкілдері өз жазбасында мүлдем салмақты түрде жазады:
... масштабталатын транзакциялық жүйелерге қолжетімділік талабы барған сайын маңызды болып келеді және әдетте репликация арқылы және бір түйін істен шыққанда сұрауларды автоматты түрде қайта бағыттау арқылы қанағаттандырылады. Сондықтан қолданба жасаушылар келісімділік (consistency) кепілдіктерін (басында белгілі бір пайдаланушылар анықтаған инварианттарды локалдық қолдауына негізделген) барлық репликалардың бір уақытта бірдей көшірілімдер болатынын қамтамасыз етуді күтеді, яғни бұл жағдайда келісімділік CAP/PACELC мағынасында түсініледі.
Басқаша айтқанда, Брювер бойынша келісімділік ACID мағынасындағы келісімділікпен ешқандай байланысы жоқ, бірақ деректерді репликациялау арқылы жоғары қолжетімділікті қамтамасыз етуге бағытталған жүйелерде, репликалардың қатаң келісімділігін сақтау ұсынылады. Бұл ACID қасиеті емес, бірақ массивті-параллельді дерекқорлық жүйелердің техникалық (физикалық) ерекшелігі, ол қолданбаларды жасауды жеңілдетеді.
Майкл Стоунбрейкердің пікірінше, сапалы заманауи дерекқорлық жүйе құрудың кепілі техникалық ымыралардың дұрыс таңдалуы болып табылады. Нақты инженерлік шешім таңдаған кезде көптеген факторларды ескеру қажет – болашақ пайдаланушылардың талаптары, әртүрлі ақаулық жағдайлардың ықтималдықтары және т.б., жалпы теориялық нұсқаулармен (CAP "теоремасы" сияқты) догматикалық түрде басқарылмауы керек.
Стоунбрейкер таралған параллельді дерекқорлық жүйелер саласында Брювер бойынша келісімділіктен бас тарту жоғары қолжетімділік пен желіні бөлуге төзімділікті қолдауға пайдасыз ымыра деп санайды, себебі (a) репликалардың келісімділігі жүйенің өте пайдалы қасиеті болып табылады; (b) транзакциялық массивті-параллельді дерекқорлық жүйелерге өте көп түйіндері бар кластерлер қажет емес, сондықтан желіні бөлу жағдайлары ықтимал емес; (c) жүйе желі бөлінгендіктен емес, мысалы, жүйелі түрде көрінетін бағдарламалық қателерге байланысты қолжетімсіз болып қалуы мүмкін.
Осылайша, NoSQL (NoACID деп оқыңыз) лагерінің өкілдерінің белсенділігі, жиі Брювер "теоремасына" сілтеме жасай отырып, ACID транзакцияларын қолдайтын массивті-параллельді транзакциялық дерекқорлық жүйелерді құрудың теориялық мүмкін еместігімен байланысты емес, бірақ қарапайымдандырылған жүйелерді құру оңай және жылдам болғандықтан. Өздерінің қарапайым ұйымдастырылымдары себепті олар өте жылдам деректерді өңдеуді қамтамасыз ете алады, және кейбір қолданбаларда дерекқор технологиясының барлық ыңғайлылықтарынан гөрі бұл маңызды болып табылады.
Дерекқорлар қауымдастығы бұл шақыруға қалай жауап беретініне қарайық.
GO TO FULL VERSION