Кіріспе

Компьютерлік транзакция алгоритмі транзакцияларды өңдеуде, деректер базаларында және компьютерлік желілерде екі фазалық міндеттеме протоколы (2PC, tupac) атомдық міндеттеме протоколының (ACP) бір түрі болып табылады. Бұл – транзакцияны орындау немесе тоқтату (қайтару) туралы бөлінген атомдық транзакцияға қатысатын барлық процестерді үйлестіретін бөлінген алгоритм. Бұл протокол (консенсус протоколының арнайы түрі) өз мақсатына тіпті жүйелік уақытша ақаулар кезінде (процесс, желілік түйін, байланыс және т.б. қатысы бар сәтсіздіктер) қол жеткізеді және осылайша кеңінен қолданылады. Алайда, ол барлық мүмкін болатын ақаулық конфигурацияларына төзімді емес және сирек жағдайларда нәтижелерді түзету үшін қолмен араласу қажет болуы мүмкін. Ақаудан қалпына келтіруді қамтамасыз ету үшін (көбінесе автоматты түрде) протоколда қатысушылар протоколдың күйін тіркейді. Әдетте, жасауға біраз уақыт кететін, бірақ сәтсіздіктерден аман қалатын журнал жазбалары протоколдың қалпына келтіру процедураларында қолданылады. Көптеген протокол нұсқалары бар, олар негізінен тіркеу стратегиялары мен қалпына келтіру механизмдері бойынша ерекшеленеді. Көбінесе жиі қолданылмайтын болса да, қалпына келтіру процедуралары протоколдың маңызды бөлігін құрайды, себебі протокол көптеген мүмкін ақаулық сценарийлерін қарастыруы және қолдауы керек. Кез келген бір бөлінген транзакцияның "қалыпты орындалуында" (яғни, ешқандай қателік болмаған кезде, әдеттегі ең жиі кездесетін жағдай) протокол екі фазадан тұрады:
Міндеттеме сұрауы фазасы (немесе дауыс беру фазасы), онда үйлестіруші процесс транзакцияға қатысатын барлық процестерді (қатысушылар, когорталар немесе жұмысшылар деп аталатын) транзакцияны орындау немесе тоқтату үшін қажетті қадамдарды жасауға және дауыс беруге дайындауға тырысады, "Иә": міндеттеме беру (егер транзакция қатысушысының жергілікті бөлігін орындау дұрыс аяқталса) немесе "Жоқ": тоқтату (егер жергілікті бөлігінде проблема анықталған болса), және
Міндеттеме беру фазасы, онда үйлестіруші қатысушылардың дауыс беруіне сүйене отырып, транзакцияны орындау (егер барлығы "Иә" деп дауыс берсе ғана) немесе тоқтату (әйтпесе) туралы шешім қабылдайды және барлық қатысушыларға нәтиже туралы хабарлайды. Қатысушылар кейін қажетті әрекеттерді (орындау немесе тоқтату) өздерінің жергілікті транзакциялық ресурстарымен (сонымен қатар қалпына келтірілетін ресурстар деп аталады; мысалы, деректер қоры деректері) және транзакцияның басқа шығысындағы тиісті бөліктерімен (егер қолданылса) жасайды. Екі фазалық міндеттеме (2PC) протоколын екі фазалық құлыптау (2PL) протоколымен, бір мезгілдестікті басқару протоколымен шатастыруға болмайды.

Міндеттеме беру туралы өтініш (немесе дауыс беру) кезеңі

Үйлестіруші барлық қатысушыларға міндеттеме туралы хабарлама жібереді және барлық қатысушылардан жауап алғанша күтеді. Қатысушылар мәмілені міндеттеме сұралғанға дейін орындайды. Олардың әрқайсысы өздерінің кері қайтару журналына (undo log) және алға қайтару журналына (redo log) бір жазба жазады. Әрбір қатысушы, егер қатысушының әрекеттері сәтті аяқталса, келісім хабарымен (қатысушы міндеттемеге "Иә" деп дауыс береді) жауап береді, немесе қатысушы міндеттемеге кедерес келтіретін қателікке ұшыраса, тоқтату хабарымен (қатысушы міндеттемеге "Жоқ" деп дауыс береді) жауап береді.

Кемшіліктер

Екі фазалық протоколдың ең үлкен кемшілігі – ол тоқтату протоколы болып табылады. Егер үйлестіруші толығымен істен шықса, кейбір қатысушылар өз транзакцияларын аяқтау мүмкін болмайды: қатысушы үйлестірушіден келісім туралы хабарлама алғаннан кейін, үйлестірушіден келісім немесе кері қайтару хабары келгенше күтіп тұруға мәжбүр болады. Екі фазалық протокол үйлестіруші мен топ мүшесінің бірдей уақытта істен шығуынан сенімді түрде қалпына келе алмайды. Егер тек үйлестіруші ғана істен шықса және топ мүшелерінің ешқайсысы келісім туралы хабарлама алмаса, онда транзакция болмаған деген қорытынды жасауға болады. Алайда, егер үйлестіруші де, топ мүшесі де істен шықса, істен шыққан топ мүшесі бірінші болып хабарланған және ол транзакцияны орындаған болуы мүмкін. Жаңа үйлестіруші тағайындалған жағдайда да, ол барлық топ мүшелерінен келісім алғанша операцияны жалғастыра алмайды, демек барлық топ мүшелері жауап бергенше күтіп тұруға мәжбүр.

Ортақ архитектура

Көп жағдайда 2PC протоколы компьютерлік желіде таратылады. Ол бір-біріне ұқсас бірнеше арнайы 2PC компоненттерін іске асыру арқылы оңай таратылады, әдетте транзакция менеджерлері (TM; сондай-ақ 2PC агенттері немесе транзакциялық өңдеу мониторлары деп аталады), олар әрбір транзакция үшін протоколды орындауды жүзеге асырады (мысалы, The Open Group X/Open XA). Таратылған транзакцияға қатысатын дерекқорлар, қатысушылар, координатор және қатысушылар, 2PC арқылы транзакцияны аяқтау үшін TM-ге (әдетте қатысушылармен бірдей желі түйіндерінде орналасқан) тіркеледі. Әр таратылған транзакцияда TM-нің арнайы жиынтығы болады, қатысушылар тіркелетін TM-дер. Әрбір транзакция үшін 2PC-ді үйлестіретін координатор TM болады, әдетте координатор дерекқорының TM. Алайда, координатор рөлін өнімділік немесе сенімділік үшін басқа TM-ге беруге болады. Қатысушылар өзара 2PC хабарламаларын алмастырудың орнына, хабарламаларды тиісті TM-мен алмасады. Тиісті TM-дер жоғарыда аталған 2PC протоколын орындау үшін өзара байланысады, тиісті қатысушыларды сол транзакцияны аяқтау үшін "өкілдік етеді". Бұл архитектурамен протокол толыққанды таратылған (орталық өңдеу компоненті немесе дерек құрылымы қажет емес) және желі түйіндерінің санымен (желі өлшемімен) тиімді түрде кеңейеді. Бұл жалпы архитектура 2PC-ден басқа атомдық міндеттеме протоколдарын тарату үшін де тиімді, өйткені барлық мұндай протоколдар бірдей дауыс беру механизмін және протокол қатысушыларына нәтижелерді таратуды пайдаланады. Транзакциялардың нәтижесі туралы болжам, яғни қабылдау немесе тоқтату, 2PC протоколын орындау кезінде қатысушылардың хабарламаларын және журналдау операцияларын үнемдеуге мүмкіндік береді. Мысалы, егер жүйелік қатеден қалпына келтіру кезінде кейбір транзакцияның қабылдануы туралы тіркелген дерек табылмайтын болса, онда ол транзакция тоқтатылды деп есептеледі және сәйкес әрекеттер орындалады. Бұл тоқтатулар тіркелмесе де маңызды емес, және осы болжам бойынша тіркеуді үнемдеуге болады. Әдетте, қалпына келтіру кезінде оптимизация түріне байланысты қосымша операциялардың салдары төленеді. Осылайша, егер бар болса, оңтайландырудың ең жақсы нұсқасы қателер мен транзакция нәтижелерінің статистикасына сәйкес таңдалады.

Бұтақтың екі фазалы протоколы

Tree 2PC протоколы – алдын ала белгіленген координаторы жоқ Tree 2PC-нің бір түрі. Ол бұрын ұсынылған бірнеше оңтайландыруларды қамтиды. Келісім хабарлары (Иә дауыстар) барлық жапырақтардан тарала бастайды, әрбір жапырақ транзакция үшін өзінің міндеттерін аяқтағанда (дайын күйге келгенде). Аралық (жапырақ емес) түйін, егер соңғы (бірден-бір) көрші түйінінен келісім хабарламасы әлі түспесе, дайын екенін хабарлайды. Координатор транзакция ағашы бойынша келісім хабарларының бәсекесі арқылы динамикалық түрде анықталады, олар қай жерде тоғысса, сонда белгіленеді. Тоғысу транзакция ағашының түйінінде немесе ағаш қабырғасында болуы мүмкін. Екінші жағдайда, қабырғаның екі түйінінің бірі координатор болып сайланады (қайдағы бір түйін). D2PC – уақыт жағынан оңтайлы (нақты транзакция ағашының барлық мысалдары мен кез келген Tree 2PC протоколының іске асырылуы арасында; барлық мысалдар бірдей ағашты пайдаланады; әр мысалда координатор ретінде әртүрлі түйін болады): Оптималды координаторды таңдау арқылы D2PC координаторды және әрбір қатысушыны ең қысқа уақытта міндеттейді, бұл әрбір транзакция қатысушысында (ағаш түйінінде) бұғатталған ресурстарды мүмкіндігінше ертерек босатуға мүмкіндік береді.