Bosh sahifa Wiki Three-Phase Commit

Three-Phase Commit

Three-Phase Commit — distributed transaction ishtirokchilari orasida commit yoki abort qarorini muvofiqlashtirishga mo‘ljallangan protocol. Qisqartmasi 3PC. U Two-Phase Commitdagi ayrim blocking holatlarini kamaytirish uchun commit jarayoniga qo‘shimcha oraliq bosqich kiritadi.

Protocol nazariy jihatdan cheklangan network va timing taxminlariga tayanadi. Real distributed tizimlarda network partition va failure sabab qo‘llanishi cheklangan.

Ishtirokchilar

Protocol odatda quyidagi rollarga ega:

Coordinator barcha participantlardan javob yig‘adi.

Participantlar local transaction holatini saqlaydi.

Uch bosqich

Three-Phase Commitning asosiy bosqichlari:

  1. CanCommit;
  2. PreCommit;
  3. DoCommit.

Nomlar implementation va manbalarda biroz farq qilishi mumkin.

CanCommit

Coordinator participantlardan transactionni commit qilishga tayyormi deb so‘raydi.

Har participant:

ni tekshiradi.

Javob Yes yoki No.

Bitta No bo‘lsa coordinator abort qarorini beradi.

PreCommit

Barcha participantlar Yes desa coordinator PreCommit yuboradi.

Participant:

  • commitga tayyor holatni durable saqlaydi;
  • kerakli locklarni ushlab turadi;
  • acknowledgement yuboradi.

Bu bosqich participantlarga umumiy qaror commit tomon ketayotganini bildiradi.

DoCommit

Barcha PreCommit acknowledgementlari kelgach coordinator DoCommit yuboradi.

Participant local transactionni commit qiladi va yakuniy acknowledgement qaytaradi.

Coordinator transaction tugaganini qayd etadi.

Abort

CanCommit bosqichida rad javobi yoki timeout bo‘lsa abort yuboriladi.

Participant local transactionni rollback qiladi va locklarni bo‘shatadi.

PreCommitdan keyingi abort semantikasi protocol taxminlari va failure holatiga bog‘liq.

Two-Phase Commit bilan farqi

2PC bosqichlari:

Prepare
→ Commit

Coordinator prepare’dan keyin yo‘qolsa participantlar qarorni bilmay locklarni ushlab qolishi mumkin.

3PC PreCommit orqali participantga commit qaroriga yaqin oraliq holat beradi.

Ayrim timeout holatlarida participant mustaqil qaror chiqarishga urinishi mumkin.

Non-blocking maqsadi

3PC ma’lum taxminlar ostida participantlarning cheksiz bloklanishini kamaytiradi.

Taxminlar:

Asynchronous real networkda bu taxminlar har doim bajarilmaydi.

Timeout

Har bosqich uchun timeout mavjud.

CanCommit vaqtida timeout participantning abort qilishiga olib kelishi mumkin.

PreCommit holatida participant boshqa participantlar holatini aniqlash yoki commit tomon yurish qoidalariga ega bo‘lishi mumkin.

Timeoutning o‘zi node o‘chganini isbotlamaydi.

Coordinator failure

Coordinator ishlamay qolsa participantlar yangi coordinator tanlashi mumkin.

Yangi coordinator participantlarning state’ini yig‘adi:

  • abort holati bormi;
  • precommit holati bormi;
  • commit qilinganmi.

Keyin xavfsiz qaror chiqarishga urinadi.

Network partition bu jarayonni murakkablashtiradi.

Participant failure

Participant qayta ishga tushganda durable logdan o‘z holatini tiklaydi.

U coordinator yoki boshqa participantdan yakuniy qarorni so‘raydi.

Local log bo‘lmasa transaction holati yo‘qolishi mumkin.

Network partition

Partition cluster’ni ikki guruhga ajratishi mumkin.

Har guruh boshqa failure xulosasiga kelishi ehtimoli bor.

3PC classic modelda network partitionga to‘liq xavfsiz yechim bermaydi.

Shu sababli consensus protocol va replicated state machine ko‘proq ishlatiladi.

Atomicity

Maqsad barcha participantlar commit qilishi yoki barchasi abort qilishi.

Ammo failure model va protocol taxminlari buzilsa atomicity yoki availability xavf ostida qoladi.

Distributed commit har doim coordination, latency va blocking xarajatiga ega.

Locklar

Participant transaction davomida row yoki resource locklarini ushlab turishi mumkin.

Uchta network round-trip lock vaqtini uzaytiradi.

Contention yuqori workload’da throughput kamayadi.

Durability

Har state transition local durable logga yozilishi kerak.

Masalan:

VOTED_YES
PRECOMMITTED
COMMITTED
ABORTED

Crashdan keyin participant log orqali recovery qiladi.

3PC va Consensus

Consensus node’lar yagona log yoki qaror ustida kelishishini boshqaradi.

3PC esa ma’lum transactionni bir nechta resource’da commit qilishga qaratilgan.

Consensus coordinator state’ini replicated qilish uchun ishlatilishi mumkin, ammo participant resource transactionlari muammosi qoladi.

Amaliy qo‘llanish

3PC nazariy va ta’limiy jihatdan muhim.

Amaliy tizimlarda ko‘pincha:

tanlanadi.

Tanlov consistency va availability talabiga bog‘liq.

Kamchiliklari

3PC:

xarajatiga ega.

“Uchinchi bosqich” barcha distributed failure’ni avtomatik hal qilmaydi.

Heuristic qaror

Participant yakuniy qarorni bilmay uzoq qolsa operator yoki local policy asosida heuristic commit yoki abort qilishi mumkin.

Bu atomicity buzilishi xavfini tug‘diradi.

Heuristic natija audit va reconciliation talab qiladi.

Recovery coordinator

Yangi coordinator faqat participantlardan javob olgan holda xavfsiz qaror chiqaradi.

Javob bermayotgan participant holati noma’lum bo‘lsa protocol yana bloklanishi mumkin.

Bu perfect failure detector yo‘qligining amaliy oqibati.

Throughput

Har transaction uchun uch coordination bosqichi va durable log write’lari kerak.

Geografik uzoq participantlarda latency keskin oshadi.

Shu sababli qisqa, yuqori throughputli operationlar uchun 3PC odatda mos emas.

Participant membership

Transaction boshlangandan keyin qaysi participantlar qatnashishi o‘zgarmas ro‘yxat sifatida saqlanadi.

Yangi participantni PreCommitdan keyin qo‘shish mumkin emas.

Coordinator recovery vaqtida aynan shu membership bilan qaror qiladi.

Bog‘liq tushunchalar

Distributed transaction, Two-Phase Commit, Coordinator, Participant, PreCommit, Atomicity, Consensus, Network partition, Transaction log, Saga pattern