Кіріспе
Компьютерлік транзакция алгоритмі транзакцияларды өңдеуде, деректер базаларында және компьютерлік желілерде екі фазалық міндеттеме протоколы (2PC, tupac) атомдық міндеттеме протоколының (ACP) бір түрі болып табылады. Бұл – транзакцияны орындау немесе тоқтату (қайтару) туралы бөлінген атомдық транзакцияға қатысатын барлық процестерді үйлестіретін бөлінген алгоритм. Бұл протокол (консенсус протоколының арнайы түрі) өз мақсатына тіпті жүйелік уақытша ақаулар кезінде (процесс, желілік түйін, байланыс және т.б. қатысы бар сәтсіздіктер) қол жеткізеді және осылайша кеңінен қолданылады. Алайда, ол барлық мүмкін болатын ақаулық конфигурацияларына төзімді емес және сирек жағдайларда нәтижелерді түзету үшін қолмен араласу қажет болуы мүмкін. Ақаудан қалпына келтіруді қамтамасыз ету үшін (көбінесе автоматты түрде) протоколда қатысушылар протоколдың күйін тіркейді. Әдетте, жасауға біраз уақыт кететін, бірақ сәтсіздіктерден аман қалатын журнал жазбалары протоколдың қалпына келтіру процедураларында қолданылады. Көптеген протокол нұсқалары бар, олар негізінен тіркеу стратегиялары мен қалпына келтіру механизмдері бойынша ерекшеленеді. Көбінесе жиі қолданылмайтын болса да, қалпына келтіру процедуралары протоколдың маңызды бөлігін құрайды, себебі протокол көптеген мүмкін ақаулық сценарийлерін қарастыруы және қолдауы керек. Кез келген бір бөлінген транзакцияның "қалыпты орындалуында" (яғни, ешқандай қателік болмаған кезде, әдеттегі ең жиі кездесетін жағдай) протокол екі фазадан тұрады:
Міндеттеме сұрауы фазасы (немесе дауыс беру фазасы), онда үйлестіруші процесс транзакцияға қатысатын барлық процестерді (қатысушылар, когорталар немесе жұмысшылар деп аталатын) транзакцияны орындау немесе тоқтату үшін қажетті қадамдарды жасауға және дауыс беруге дайындауға тырысады, "Иә": міндеттеме беру (егер транзакция қатысушысының жергілікті бөлігін орындау дұрыс аяқталса) немесе "Жоқ": тоқтату (егер жергілікті бөлігінде проблема анықталған болса), және
Міндеттеме беру фазасы, онда үйлестіруші қатысушылардың дауыс беруіне сүйене отырып, транзакцияны орындау (егер барлығы "Иә" деп дауыс берсе ғана) немесе тоқтату (әйтпесе) туралы шешім қабылдайды және барлық қатысушыларға нәтиже туралы хабарлайды. Қатысушылар кейін қажетті әрекеттерді (орындау немесе тоқтату) өздерінің жергілікті транзакциялық ресурстарымен (сонымен қатар қалпына келтірілетін ресурстар деп аталады; мысалы, деректер қоры деректері) және транзакцияның басқа шығысындағы тиісті бөліктерімен (егер қолданылса) жасайды. Екі фазалық міндеттеме (2PC) протоколын екі фазалық құлыптау (2PL) протоколымен, бір мезгілдестікті басқару протоколымен шатастыруға болмайды.
In transaction processing, databases, and computer networking, the two phase commit protocol (2PC, tupac) is a type of atomic commitment protocol (ACP). It is a distributed algorithm that coordinates all the processes that participate in a distributed atomic transaction on whether to commit or abort (roll back) the transaction. This protocol (a specialised type of consensus protocol) achieves its goal even in many cases of temporary system failure (involving either process, network node, communication, etc. failures), and is thus widely used. However, it is not resilient to all possible failure configurations, and in rare cases, manual intervention is needed to remedy an outcome. To accommodate recovery from failure (automatic in most cases) the protocol's participants use logging of the protocol's states. Log records, which are typically slow to generate but survive failures, are used by the protocol's recovery procedures. Many protocol variants exist that primarily differ in logging strategies and recovery mechanisms. Though usually intended to be used infrequently, recovery procedures compose a substantial portion of the protocol, due to many possible failure scenarios to be considered and supported by the protocol. In a "normal execution" of any single distributed transaction (i. e., when no failure occurs, which is typically the most frequent situation), the protocol consists of two phases:
The commit request phase (or voting phase), in which a coordinator process attempts to prepare all the transaction's participating processes (named participants, cohorts, or workers) to take the necessary steps for either committing or aborting the transaction and to vote, either "Yes": commit (if the transaction participant's local portion execution has ended properly), or "No": abort (if a problem has been detected with the local portion), and
The commit phase, in which, based on voting of the participants, the coordinator decides whether to commit (only if all have voted "Yes") or abort the transaction (otherwise), and notifies the result to all the participants. The participants then follow with the needed actions (commit or abort) with their local transactional resources (also called recoverable resources; e. g., database data) and their respective portions in the transaction's other output (if applicable). The two phase commit (2PC) protocol should not be confused with the two phase locking (2PL) protocol, a concurrency control protocol.
Міндеттеме беру туралы өтініш (немесе дауыс беру) кезеңі
Үйлестіруші барлық қатысушыларға міндеттеме туралы хабарлама жібереді және барлық қатысушылардан жауап алғанша күтеді. Қатысушылар мәмілені міндеттеме сұралғанға дейін орындайды. Олардың әрқайсысы өздерінің кері қайтару журналына (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 координаторды және әрбір қатысушыны ең қысқа уақытта міндеттейді, бұл әрбір транзакция қатысушысында (ағаш түйінінде) бұғатталған ресурстарды мүмкіндігінше ертерек босатуға мүмкіндік береді.