Consistency Patterns
Weak, strong va eventual consistency haqida bilishingiz kerak bo'lgan hamma narsa
Muallif: Kamran Ahmed
Consistency pattern'lari haqida gaplashishdan oldin distributed system nima ekanini bilishimiz kerak. Sodda qilib aytganda, distributed system — bittadan ortiq component'dan iborat bo'lgan tizim bo'lib, unda har bir component ilovaning bir qismi uchun javob beradi.
Distributed system — component'lari tarmoqqa ulangan turli kompyuterlarda joylashgan, bir-biriga xabarlar uzatish orqali o'zaro muloqot qiladigan va harakatlarini muvofiqlashtiradigan tizim. Component'lar umumiy maqsadga erishish uchun bir-biri bilan o'zaro ta'sirlashadi. - Wikipedia
Distributed Systems
Tasavvur qiling, bizda kitob sotadigan e-commerce ilovasi bor. Bu ilova bir nechta turli component'lardan iborat bo'lishi mumkin. Masalan, bitta server akkauntlar uchun, boshqasi to'lovlar uchun, yana biri buyurtmalarni saqlash uchun, boshqasi loyalty ballari va tegishli funksionallik uchun, yana biri esa kitoblar inventarini yuritish uchun javob berishi mumkin va hokazo.

Endi, agar foydalanuvchi kitob sotib olsa, buyurtmani rasmiylashtirishda turli servislar ishtirok etishi mumkin: buyurtmani saqlash uchun order service, to'lovlarni qayta ishlash uchun payment service va buyurtma qilingan kitobning zaxirasini dolzarb holda saqlash uchun inventory service. Bu distributed system'ga misol — har biri ilovaning turli qismi uchun javob beradigan bir nechta turli component'lardan iborat ilova.
Nega consistency muhim?
Distributed system'lar bilan ishlaganda ma'lumotlarni turli serverlar bo'ylab boshqarish haqida o'ylashimiz kerak. Yuqoridagi e-commerce ilovasi misolini oladigan bo'lsak, foydalanuvchi buyurtma bergan taqdirda inventory service buyurtma qilingan mahsulotlar uchun zaxira haqidagi dolzarb ma'lumotga ega bo'lishi shart ekanini ko'ramiz. Endi, bir xil kitobni ikki xil foydalanuvchi ko'rib turgan bo'lishi mumkin. Endi tasavvur qiling, mijozlardan biri muvaffaqiyatli buyurtma beradi va inventory service zaxirani yangilashga ulgurmasdan oldin ikkinchi mijoz ham xuddi shu kitobga buyurtma beradi. Bunday holatda, inventar yangilanmagan bo'lgani uchun ikkinchi buyurtma berilganda bizda zaxira haqida noto'g'ri ma'lumot bo'ladi, ya'ni buyurtma qilingan kitob zaxirada bo'lishi ham, bo'lmasligi ham mumkin. Aynan shu yerda turli consistency pattern'lari ishga tushadi. Ular ma'lumotlarning butun ilova bo'ylab consistent bo'lishini ta'minlashga yordam beradi.
Consistency Patterns
Consistency pattern'lari ma'lumotlarning distributed system'da qanday saqlanishi va boshqarilishini hamda bu ma'lumotlar foydalanuvchilar va ilovalarga qanday taqdim etilishini anglatadi. Consistency pattern'larining uchta asosiy turi mavjud:
- Strong consistency
- Weak consistency
- Eventual Consistency
Bu pattern'larning har biri o'zining afzallik va kamchiliklariga ega va qaysi pattern'dan foydalanish ilova yoki tizimning aniq talablariga bog'liq bo'ladi.
Strong Consistency
Ma'lumotga o'zgartirish kiritilgandan so'ng u keyingi barcha o'qish operatsiyalarida darhol ko'rinadi. Ma'lumotlar sinxron tarzda replicate qilinadi, bu esa ma'lumotlarning barcha nusxalari bir vaqtda yangilanishini ta'minlaydi.
Strong consistency tizimida biror ma'lumotga kiritilgan har qanday o'zgartirish darhol barcha joylarga tarqatiladi. Bu barcha joylarda ma'lumotning bir xil versiyasi bo'lishini ta'minlaydi, ammo bu tizim highly available emasligini va yuqori latency'ga ega ekanini ham anglatadi.
Strong consistency'ga misol — foydalanuvchilar akkauntlar o'rtasida pul o'tkaza oladigan moliyaviy tizim. Tizim yuqori data integrity uchun mo'ljallangan, shuning uchun ma'lumotlar bitta joyda saqlanadi va ularga kiritilgan o'zgartirishlar darhol boshqa barcha joylarga tarqatiladi. Bu barcha foydalanuvchilar va ilovalar bir xil, aniq ma'lumotlar bilan ishlashini ta'minlaydi. Masalan, foydalanuvchi bir akkauntdan boshqasiga pul o'tkazishni boshlaganda, tizim ikkala akkauntning balansini darhol yangilaydi va tizimning boshqa barcha component'lari bu o'zgarishdan darhol xabardor bo'ladi. Bu barcha foydalanuvchilar ikkala akkauntning yangilangan balansini ko'ra olishini ta'minlaydi va har qanday nomuvofiqliklarning oldini oladi.
Weak Consistency
Ma'lumotga o'zgartirish kiritilgandan so'ng, keyingi har qanday o'qish operatsiyasi kiritilgan o'zgarishlarni darhol aks ettirishi kafolatlanmaydi. O'qish amali so'nggi yozuvni ko'rishi ham, ko'rmasligi ham mumkin.
Weakly consistent tizimda ma'lumotlarga kiritilgan o'zgartirishlar darhol tarqatilmasligi mumkin. Bu ma'lumotlarning turli versiyalari o'rtasida nomuvofiqliklar va konfliktlarga olib kelishi mumkin, ammo bu high availability va past latency'ga ham imkon beradi.
Weak consistency'ga yana bir misol — foydalanuvchilar onlayn multiplayer o'yinlarni o'ynay oladigan gaming platformasi. Foydalanuvchi o'yin o'ynaganda uning harakatlari xuddi shu data center'dagi boshqa o'yinchilarga darhol ko'rinadi, ammo agar lag yoki ulanishning vaqtincha uzilishi yuz bersa, harakatlar ba'zi foydalanuvchilarga ko'rinmasligi mumkin va o'yin davom etaveradi. Bu o'yin holatining turli versiyalari o'rtasida nomuvofiqliklarga olib kelishi mumkin, ammo bu yuqori darajadagi availability va past latency'ga ham imkon beradi.
Eventual Consistency
Eventual consistency — weak consistency'ning bir shakli. Ma'lumotga o'zgartirish kiritilgandan so'ng u keyingi o'qish operatsiyalarida oxir-oqibat ko'rinadigan bo'ladi. Ma'lumotlar asinxron tarzda replicate qilinadi, bu esa ma'lumotlarning barcha nusxalari oxir-oqibat yangilanishini ta'minlaydi.
Eventually consistent tizimda ma'lumotlar odatda bir nechta joyda saqlanadi va ularga kiritilgan o'zgartirishlar oxir-oqibat barcha joylarga tarqatiladi. Bu tizim highly available ekanini va past latency'ga ega ekanini anglatadi, ammo bu ma'lumotlarning turli versiyalari o'rtasida nomuvofiqliklar va konfliktlar bo'lishi mumkinligini ham anglatadi.
Eventual consistency'ga misol — foydalanuvchilar yangiliklar, izohlar va xabarlar joylay oladigan ijtimoiy tarmoq platformasi. Platforma high availability va past latency uchun mo'ljallangan, shuning uchun ma'lumotlar dunyo bo'ylab bir nechta data center'larda saqlanadi. Foydalanuvchi yangilik joylaganda, u xuddi shu data center'dagi boshqa foydalanuvchilarga darhol ko'rinadi, ammo yangilik boshqa data center'larga tarqalishi uchun biroz vaqt ketishi mumkin. Bu qaysi data center'ga ulanganiga qarab, ba'zi foydalanuvchilar yangilikni ko'rishi, boshqalari esa ko'rmasligi mumkinligini anglatadi. Bu ma'lumotlarning turli versiyalari o'rtasida nomuvofiqliklarga olib kelishi mumkin, ammo bu yuqori darajadagi availability va past latency'ga ham imkon beradi.
Xulosa
Xulosa qilib aytganda, consistency pattern'lari distributed system'larda hal qiluvchi rol o'ynaydi va qaysi pattern'dan foydalanish ilova yoki tizimning aniq talablariga bog'liq bo'ladi. Har bir pattern o'zining afzallik va kamchiliklariga ega va har biri turli use case'lar uchun ko'proq mos keladi. Weak consistency high availability va past latency talab qiladigan tizimlar uchun, strong consistency yuqori data integrity talab qiladigan tizimlar uchun, eventual consistency esa ham high availability, ham yuqori data integrity talab qiladigan tizimlar uchun mos keladi.