Сайн уу.
CAP theorem буюу Brewer’s Theorem талаар тайлбарлья. NOSql өгөгдлийн сангууд дээр их яригддаг ойлголт юм байна.
CAP товчлолын тайлбарууд:
Consistency
Wiki definition: “Every read receives the most recent write or an error.”
Энэ ойлголт нь ерөнхийдөө таны тархсан өгөгдлийн сангийн node-үүд бүгд ижил өгөгдөлтэй байх буюу аль нэг node дээр дата зөрөх, ямар нэг байдлаар хоцрогдолтой байх ёсгүй гэсэн ойлголт юм. Жишээ болгон дараах table-г авч үзье:
Байгууллага 10 node бүхий тархсан өгөгдлийн сантай бөгөөд 3 id тай ажилтан буюу Батболдын цалинг ₮4,000,000.00 болгож өөрчилсөн. Үүний дараа тухайн ажилтны цалингийн мэдээллийг SELECT хийж харахад 10 node 10-уулаа ₮4,000,000.00 гэсэн мэдээлэл буцаах ёстой. Хэрвээ аль нэг node хуучин мэдээлэл буюу ₮2,500,000.00 буцаавал энэ нь non-consistent болох юм.
Тэгэхээр хамгийн энгийнээр бүх node-үүд хамгийн шинэ мэдээллийг буцаана эсвэл алдаа гарна.
Availability- Хүртээмжтэй байдал
Wiki definition: “Every request receives a (non-error) response, without the guarantee that it contains the most recent write.”
Өгөгдлийн сан үргэлж хүртээмжтэй байх ёстой. Өөрөөр бол буцааж буй мэдээлэл нь хамгийн сүүлийн, зөв мэдээлэл байх нь чухал биш бөгөөд гол нь тухайн систем ямар нэг тасалдалгүйгээр ажиллаж байх ёстой. Дээр дурьдсан жишээг авч үзвэл зарим node-үүд ₮2,500,000.00 зарим нь ₮4,000,000.00 гэсэн мэдээлэл буцааж болох бөгөөд гол нь ямар нэг алдаа буцаахгүй байх ёстой.
Partition tolerance
Wiki definition: “The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes.”
Нэг эсвэл хэсэг бүлэг node-үүд бусадтайгаа холбогдож чадахгүй болсон ч систем хэвийн үйл ажиллагаагаа явуулсаар байна. Жишээ нь сүлжээний хуваагдал гарсан тохиолдолд
Тодорхойлолт:
Ямар ч shared-data систем дээр эдгээр 3 шинж чанараас хамгийн ихдээ 2-ыг нь бүрэн хангах боломжтой.
Тайлбар:
Тодорхойлолтоос хараад “Хэзээд дээрх 3 шинж чанарын зөвхөн 2-ыг нь л сонгож бүрдүүлж чадах юм байна” гэж эхэндээ ойлгосон ч энэ нь буруу байсан. Сүлжээний хуваагдал эсвэл тасалдал үүссэн тохиолдолд л Consistency, Availability хоёрын аль нэгийг золиослох ёстой. Доорх хоёроос аль нэгийг нь сонгох хэрэгтэй болно:
- Үйл ажиллагаагаа зогсоох буюу Availability багасгаж Consistency хангах
- Үйл ажиллагаагаа хэвийн үргэлжлүүлэх буюу Availability хангасан ч буцааж буй мэдээлэл нь хамгийн сүүлийн, зөв эсэхэд баталгаа өгч чадахгүй. Өөрөөр Consistency хангаж чадахгүй.
Сүлжээний тасалдал эсвэл хуваагдал үүсээгүй тохиололд Availability болон Consistency зэрэг хангагдах боломжтой.
Эх сурвалж: