Bosh sahifa Wiki Agreement

Agreement

Agreement — taqsimlangan tizim ishtirokchilarining muayyan qiymat yoki qaror bo‘yicha bir xil natijaga kelish xususiyatidir. Masalan, replica’lar qaysi buyruq navbatdagi log yozuvi bo‘lishini kelishib olishi mumkin. Atama ko‘pincha consensus muammosining asosiy maqsadini ifodalaydi, lekin ayrim protokollarda agreement faqat bir xavfsizlik sharti sifatida ta’riflanadi.

Formal mazmuni

Consensus modelida uchta talab ajratiladi:

  • agreement — to‘g‘ri ishlayotgan ikki ishtirokchi turli qiymatni yakuniy deb qabul qilmaydi;
  • validity — qabul qilingan qiymat ruxsat etilgan takliflardan kelib chiqadi;
  • termination — kerakli sharoitlarda to‘g‘ri ishtirokchilar oxir-oqibat qaror qiladi.

Birinchi ikki talab safety bilan bog‘liq: tizim noto‘g‘ri qaror chiqarmasligi kerak. Termination esa liveness xususiyatidir. Tarmoq uzilganda ayrim protokollar agreementni saqlash uchun yangi qarorni vaqtincha to‘xtatadi.

Quorum orqali kelishuv

Ko‘plab crash-fault tolerant tizimlarda qaror ko‘pchilik quorum tomonidan tasdiqlanadi. Har ikki ko‘pchilik quorum kamida bitta umumiy a’zoga ega bo‘lgani sababli zid qarorlar orasida tarixiy bog‘lanish paydo bo‘ladi. Lekin oddiy ovoz sanashning o‘zi yetmaydi: term yoki ballot raqami, log tartibi va eski leader ma’lumotini yangi leaderga uzatish qoidalari ham kerak.

Uch replica’dan iborat guruh bir nosoz tugunga chidashi mumkin. Ikki tugun qolganida ko‘pchilik mavjud; faqat bittasi qolsa, u eski leaderdan mustaqil ravishda yangi yozuvni xavfsiz tasdiqlay olmaydi. Bu holat availability kamayishi evaziga agreement saqlanishini ko‘rsatadi.

Nosozlik modellari

Crash fault modelida tugun ishlashni to‘xtashi yoki aloqadan uzilishi mumkin, ammo ataylab qarama-qarshi xabar yubormaydi. Byzantine modelida ishtirokchi turli tomonlarga turli qiymat aytishi ham mumkin. Byzantine agreement ko‘proq replica, autentifikatsiya va murakkabroq quorum talab qiladi.

Asinxron tarmoqda kechikkan xabar bilan o‘lgan tugunni har doim ajratib bo‘lmaydi. Failure detector timeoutga tayanadi va shubha qilishi mumkin. Protocol safety’ni vaqt taxminiga bog‘lamasdan, progressni esa tarmoq bir muddat barqarorlashadigan sharoitda ta’minlashga intiladi.

Agreement va consistency

Agreement barcha o‘quvchilar darhol eng yangi qiymatni ko‘rishini anglatmaydi. Consensus replicated logga yozuv tartibini kelishtirishi mumkin, follower esa hali commit qilingan yozuvni qo‘llamagan bo‘ladi. Read protocol linearizability talabini alohida bajaradi.

Shuningdek, eventual consistency tizimi replica’larni keyinchalik birlashtirishi mumkin, ammo bir vaqtda zid qiymatlar kuzatiladi. Bu qat’iy agreementdan farq qiladi. CRDT kabi strukturalar barcha amallarni bitta global tartibda kelishtirmasdan deterministik convergence beradi.

Amaliy tekshiruv

Protocol implementatsiyasi packet loss, duplicate xabar, qayta tartiblash, clock skew, process restart va disk yozuvi uzilishi ostida tekshiriladi. Node qarorni e’lon qilishdan oldin kerakli metadata’ni barqaror xotiraga yozishi zarur; aks holda restartdan keyin oldingi va’dasini unutib, agreementni buzishi mumkin.

Monitoring faqat leader borligini emas, term almashishi, quorumga yetish, commit kechikishi va divergent log belgilarini kuzatadi. Agreement buzilishi odatda oddiy availability xatosidan og‘irroq, chunki qarama-qarshi state keyingi operatsiyalarga tarqaladi.

Membership o‘zgarishi

Replica to‘plamini almashtirish ham kelishuv protokolining qismidir. Eski konfiguratsiyani birdan yangi konfiguratsiyaga almashtirish ikki mustaqil quorum hosil qilishi mumkin. Joint consensus kabi usul o‘tish davrida eski va yangi a’zolik talablari kesishishini saqlaydi. Yangi replica ovoz berishdan oldin yetarli log tarixini oladi.

Client request qayta yuborilganda bir xil qaror ikki marta qo‘llanmasligi uchun request identifikatori yoki deduplication ishlatiladi. Consensus tartibni kelishtiradi, ammo state machine operatsiyasining idempotent yoki aynan-bir-marta ko‘rinishini alohida ta’minlash kerak.

Bog‘liq tushunchalar

Consensus, Quorum, Safety, Liveness, Raft, Paxos, Byzantine fault tolerance, Linearizability