5.1 Distribusi data
Ayo dipikirake carane data disebarake gumantung saka kunci ing antarane simpul kluster. Cassandra ngidini sampeyan nyetel strategi distribusi data. Strategi pisanan kasebut nyebarake data gumantung saka nilai kunci md5 - partisi acak. Kapindho njupuk menyang akun perwakilan bit saka tombol dhewe - markup ordinal (byte-ordered partitioner).
Strategi pisanan, umume, menehi kaluwihan liyane, amarga sampeyan ora perlu kuwatir babagan distribusi data ing antarane server lan masalah kasebut. Strategi kapindho digunakake ing kasus-kasus langka, contone, yen pitakon interval (jarak scan) dibutuhake. Wigati dimangerteni manawa pilihan strategi iki digawe sadurunge nggawe kluster lan nyatane ora bisa diganti tanpa data lengkap.
Cassandra nggunakake teknik sing dikenal minangka hashing konsisten kanggo nyebarake data. Pendekatan iki ngidini sampeyan nyebarake data ing antarane simpul lan priksa manawa nalika simpul anyar ditambahake lan dibusak, jumlah data sing ditransfer cilik. Kanggo nindakake iki, saben simpul diwenehi label (token), sing mbagi set kabeh nilai kunci md5 dadi bagean. Wiwit RandomPartitioner digunakake ing umume kasus, ayo dipikirake.
Kaya sing dakkandhakake, RandomPartitioner ngitung md5 128-bit kanggo saben tombol. Kanggo nemtokake endi simpul data sing bakal disimpen, mung ngliwati kabeh label saka simpul saka sing paling cilik nganti paling gedhe, lan nalika nilai label dadi luwih gedhe tinimbang nilai tombol md5, banjur simpul iki, bebarengan karo a nomer simpul sakteruse (ing urutan label) dipilih kanggo panyimpenan. Jumlah total node sing dipilih kudu padha karo faktor replikasi. Tingkat replikasi disetel kanggo saben papan tombol lan ngidini sampeyan nyetel redundansi data (redundansi data).
![](https://cdn.codegym.cc/images/article/0bc059bf-5aec-4de6-8367-fa98a80b761b/1024.jpeg)
Sadurunge simpul bisa ditambahake menyang kluster, kudu diwenehi label. Persentase tombol sing nutupi celah ing antarane label iki lan sabanjure nemtokake jumlah data sing bakal disimpen ing simpul kasebut. Kabeh set label kanggo kluster diarani dering.
Iki minangka ilustrasi nggunakake sarana nodetool sing dibangun kanggo nampilake cincin kluster saka 6 kelenjar kanthi label kanthi jarak sing rata.
![](https://cdn.codegym.cc/images/article/51a9b82a-d1e9-40df-b6c3-143968efb3b9/1024.jpeg)
5.2 Konsistensi data nalika nulis
Kelenjar kluster Cassandra padha karo, lan klien bisa nyambung menyang salah sawijining, kanggo nulis lan maca. Panyuwunan ngliwati tahap koordinasi, nalika nemokake kanthi bantuan tombol lan markup ing ngendi simpul data kudu ana, server ngirim panjalukan menyang simpul kasebut. Kita bakal nelpon simpul sing nindakake koordinasi koordinator , lan simpul sing dipilih kanggo nyimpen rekaman kanthi kunci sing diwenehake, simpul replika . Secara fisik, salah sawijining simpul replika bisa dadi koordinator - mung gumantung ing tombol, markup, lan label.
Kanggo saben panjalukan, loro kanggo maca lan nulis, bisa nyetel tingkat konsistensi data.
Kanggo nulis, tingkat iki bakal mengaruhi jumlah kelenjar tiron sing bakal ngenteni konfirmasi kasil rampung operasi (data ditulis) sadurunge bali kontrol kanggo pangguna. Kanggo cathetan, ana tingkat konsistensi iki:
- ONE - koordinator ngirim panjalukan kanggo kabeh simpul tiron, nanging sawise nunggu konfirmasi saka simpul pisanan, bali kontrol kanggo pangguna;
- TWO - padha, nanging koordinator ngenteni konfirmasi saka rong kelenjar pisanan sadurunge bali kontrol;
- THREE - padha, nanging koordinator ngenteni konfirmasi saka telung kelenjar pisanan sadurunge bali kontrol;
- QUORUM - kuorum diklumpukake: koordinator ngenteni konfirmasi rekaman saka luwih saka setengah simpul replika, yaiku babak (N / 2) + 1, ing ngendi N minangka tingkat replikasi;
- LOCAL_QUORUM - Koordinator nunggu konfirmasi saka luwih saka setengah saka kelenjar tiron ing pusat data sing padha ing ngendi koordinator dumunung (potensi beda kanggo saben request). Ngidini sampeyan nyingkirake wektu tundha sing ana gandhengane karo ngirim data menyang pusat data liyane. Masalah nggarap akeh pusat data dianggep ing artikel iki liwat;
- EACH_QUORUM - Koordinator nunggu konfirmasi saka luwih saka setengah kelenjar tiron ing saben pusat data, kanthi mandiri;
- ALL - koordinator ngenteni konfirmasi saka kabeh kelenjar replika;
- ANY - ndadekake iku bisa kanggo nulis data, sanajan kabeh kelenjar tiron ora nanggapi. Koordinator ngenteni respon pisanan saka salah siji simpul tiron, utawa kanggo data disimpen nggunakake handoff hinted ing koordinator.
![](https://cdn.codegym.cc/images/article/192a8b9b-4bc0-48ff-994b-36b324277212/1024.jpeg)
5.3 Konsistensi data nalika maca
Kanggo maca, tingkat konsistensi bakal mengaruhi jumlah simpul replika sing bakal diwaca. Kanggo maca, ana tingkat konsistensi iki:
- ONE - koordinator ngirim panjalukan menyang simpul replika sing paling cedhak. Liyane saka réplika uga diwaca kanggo ndandani diwaca karo kemungkinan kasebut ing konfigurasi cassandra;
- TWO padha, nanging koordinator ngirim panjalukan kanggo loro kelenjar paling cedhak. Nilai kanthi cap wektu paling gedhe dipilih;
- THREE - padha karo pilihan sadurunge, nanging karo telung kelenjar;
- QUORUM - kuorum diklumpukake, yaiku, koordinator ngirim panjalukan menyang luwih saka setengah simpul replika, yaiku babak (N / 2) + 1, ing ngendi N minangka tingkat replikasi;
- LOCAL_QUORUM - kuorum diklumpukake ing pusat data ing ngendi koordinasi ditindakake, lan data kanthi cap wektu paling anyar bakal bali;
- EACH_QUORUM - Koordinator ngasilake data sawise rapat kuorum ing saben pusat data;
- ALL - Koordinator ngasilake data sawise maca saka kabeh kelenjar replika.
![](https://cdn.codegym.cc/images/article/a39054d5-5e53-4e3f-b670-451e75541bfb/1024.jpeg)
Mangkono, bisa nyetel wektu tundha operasi maca lan nulis lan nyetel konsistensi (konsistensi tune), uga kasedhiyan (kasedhiyan) saben jinis operasi. Nyatane, kasedhiyan langsung ana hubungane karo tingkat konsistensi maca lan nulis, amarga nemtokake jumlah simpul replika sing bisa mudhun lan isih dikonfirmasi.
Yen nomer simpul saka sing nulis ngakoni teka, plus nomer simpul saka kang maca digawe, luwih saka tingkat réplikasi, banjur kita duwe njamin yen nilai anyar bakal tansah diwaca sawise nulis, lan iki diarani konsistensi kuwat (konsistensi kuat). Yen ora konsistensi kuwat, ana kamungkinan sing operasi maca bakal bali data stale.
Ing kasus apa wae, nilai kasebut bakal nyebar ing antarane replika, nanging mung sawise ngenteni koordinasi wis rampung. Panyebaran iki diarani konsistensi pungkasan. Yen ora kabeh simpul replika kasedhiya ing wektu nulis, banjur cepet utawa mengko piranti Recovery kayata remedial maca lan anti-entropy simpul ndandani bakal teka menyang muter. Liyane babagan iki mengko.
Mangkono, kanthi tingkat konsistensi maca lan nulis QUORUM, konsistensi sing kuat bakal tansah dijaga, lan iki bakal dadi keseimbangan antarane latensi maca lan nulis. Kanthi ALL nulis lan ONE maca bakal konsistensi kuwat lan maca bakal luwih cepet lan luwih kasedhiya, IE nomer simpul gagal ing kang maca isih bakal rampung bisa luwih saka karo QUORUM.
Kanggo operasi nulis, kabeh simpul pekerja replika bakal dibutuhake. Nalika nulis ONE, maca ALL, ana uga konsistensi sing ketat, lan operasi nulis bakal luwih cepet lan kasedhiyan nulis bakal gedhe, amarga bakal cukup kanggo konfirmasi mung sing operasi nulis njupuk Panggonan ing paling siji saka server, nalika maca luwih alon lan mbutuhake kabeh simpul replika. Yen aplikasi ora duwe syarat kanggo konsistensi sing ketat, mula bisa nyepetake operasi maca lan nulis, uga nambah kasedhiyan kanthi nyetel tingkat konsistensi sing luwih murah.