Sementara saya mencoba memahami "Ketersediaan" (A) dan "Toleransi partisi" (P) dalam CAP, saya merasa sulit untuk memahami penjelasan dari berbagai artikel.
Saya merasa bahwa A dan P dapat berjalan bersama (saya tahu ini bukan masalahnya, dan itulah mengapa saya gagal untuk memahami!).
Menjelaskan secara sederhana, apa A dan P dan perbedaan di antara mereka?
database
nosql
consistency
availability
Kannan Manikandan
sumber
sumber
Jawaban:
Konsistensi berarti bahwa data adalah sama di seluruh cluster, sehingga Anda dapat membaca atau menulis dari / ke node apa pun dan mendapatkan data yang sama.
Ketersediaan berarti kemampuan untuk mengakses gugus bahkan jika sebuah simpul dalam gugus turun.
Toleransi partisi berarti bahwa cluster terus berfungsi bahkan jika ada "partisi" (komunikasi istirahat) antara dua node (kedua node naik, tetapi tidak dapat berkomunikasi).
Untuk mendapatkan ketersediaan dan toleransi partisi, Anda harus menghentikan konsistensi. Pertimbangkan jika Anda memiliki dua node, X dan Y, dalam pengaturan master-master. Sekarang, ada jeda antara komunikasi jaringan antara X dan Y, sehingga mereka tidak dapat menyinkronkan pembaruan. Pada titik ini Anda dapat:
A) Biarkan node keluar dari sinkronisasi (menyerah konsistensi), atau
B) Anggap cluster sebagai "down" (menyerah ketersediaan)
Semua kombinasi yang tersedia adalah:
Anda harus mencatat bahwa sistem CA tidak ada secara praktis (bahkan jika beberapa sistem mengklaim demikian).
sumber
Mempertimbangkan P dalam istilah yang sama dengan C dan A adalah sedikit kesalahan, bukan gagasan '2 dari 3' di antara C, A, P yang menyesatkan. Cara ringkas yang akan saya jelaskan teorema CAP adalah, "Dalam penyimpanan data terdistribusi, pada saat partisi jaringan Anda harus memilih Konsistensi atau Ketersediaan dan tidak bisa mendapatkan keduanya". Sistem NoSQL yang lebih baru mencoba untuk fokus pada Ketersediaan sementara database ACID tradisional memiliki fokus yang lebih tinggi pada Konsistensi.
Anda benar-benar tidak dapat memilih CA, partisi jaringan bukanlah sesuatu yang orang ingin miliki, itu hanya kenyataan yang tidak diinginkan dari sistem terdistribusi, jaringan dapat gagal. Pertanyaannya adalah trade off apa yang Anda pilih untuk aplikasi Anda ketika itu terjadi. Ini artikel dari orang yang pertama kali merumuskan istilah yang tampaknya untuk menjelaskan hal ini dengan sangat jelas.
sumber
Inilah cara saya membahas CAP, terutama tentang P.
CA hanya mungkin jika Anda OK dengan database server tunggal monolitik (mungkin dengan replikasi tetapi semua data pada satu "blok kegagalan" - server tidak dianggap gagal sebagian).
Jika masalah Anda memerlukan peningkatan, distribusi, dan multi-server --- partisi jaringan dapat terjadi. Anda sudah membutuhkan P. Beberapa masalah yang saya pendekatan dapat menerima paradigma server tunggal (atau, seperti yang dikatakan Stonebraker, "didistribusikan adalah tabel taruhan"). Jika Anda dapat menemukan masalah CA, solusi seperti RDBMS non-skala-out tradisional memberikan banyak manfaat.
Bagi saya, jarang: jadi kita beralih ke membahas AP vs CP.
Anda hanya memilih antara operasi AP dan CP ketika Anda memiliki partisi. Jika jaringan & perangkat keras beroperasi dengan benar, Anda mendapatkan kue dan memakannya juga.
Mari kita bahas perbedaan AP / CP.
AP - ketika ada partisi jaringan, biarkan bagian independen beroperasi secara bebas.
CP - ketika ada partisi jaringan, matikan node atau larang membaca dan menulis sehingga ada kegagalan deterministik.
Saya suka arsitektur yang dapat melakukan keduanya, karena beberapa masalah adalah AP dan beberapa CP - dan beberapa database dapat melakukan keduanya. Di antara solusi CP dan AP, ada juga kehalusan.
Misalnya, dalam dataset AP, Anda memiliki kemungkinan pembacaan yang tidak konsisten, dan menghasilkan konflik tulis - ini adalah dua mode AP yang berbeda. Dapatkah sistem Anda dikonfigurasikan untuk AP dengan ketersediaan baca tinggi tetapi tidak mengizinkan konflik tulis? Atau dapatkah sistem AP Anda menerima konflik tulis, dengan sistem resolusi yang kuat dan fleksibel? Apakah Anda akan membutuhkan keduanya pada akhirnya, atau dapatkah Anda memilih sistem yang hanya melakukan satu saja?
Dalam sistem CP, berapa banyak ketidaktersediaan yang Anda dapatkan dengan partisi kecil (server tunggal), jika ada? Replikasi yang lebih besar dapat meningkatkan ketidaktersediaan dalam sistem CP, bagaimana sistem menangani pengorbanan tersebut?
Ini semua adalah pertanyaan untuk diajukan dengan CP vs AP.
Bacaan yang bagus di bidang ini sekarang adalah tulisan "12 tahun kemudian" dari Brewer. Saya percaya ini bergerak maju perdebatan CAP dengan jelas, dan sangat merekomendasikannya.
http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed
sumber
Konsistensi:
Pembacaan dijamin untuk mengembalikan penulisan terbaru (seperti ACID) untuk klien tertentu. Jika ada permintaan yang datang selama waktu itu, ia harus menunggu sampai sinkronisasi data selesai di seluruh / dalam node.
Ketersediaan:
setiap node (jika tidak gagal) selalu mengeksekusi query dan harus selalu menanggapi permintaan. Tidak masalah apakah itu mengembalikan salinan terbaru atau tidak.
Toleransi partisi:
Sistem akan terus berfungsi ketika partisi jaringan terjadi.
sumber foto
sumber
Saya merasa toleransi partisi tidak dijelaskan dengan baik di salah satu jawaban jadi hanya untuk menjelaskan hal-hal secara lebih rinci teorema CAP artinya:
C : (Linearizability atau konsistensi yang kuat) kira-kira berarti
A :
P :
Sumber: Awesome Martin kleppmann ini bekerja
Contohnya saja: Cassandra bisa maksimal menjadi sistem AP. Tetapi jika Anda mengkonfigurasinya untuk membaca atau menulis berdasarkan kuorum maka itu tidak tetap CAP-tersedia (tersedia sesuai definisi teorema CAP) dan hanya sistem P.
sumber
Dalam teorema CAP sederhana menyatakan bahwa mustahil bagi sistem terdistribusi untuk secara bersamaan memberikan ketiga jaminan:
Konsistensi
Setiap node berisi data yang sama pada saat yang sama
Ketersediaan
Setidaknya satu node harus tersedia untuk melayani data setiap saat
Toleransi partisi
Kegagalan sistem sangat jarang terjadi
Sebagian besar setiap sistem hanya dapat menjamin minimal dua fitur baik CA, AP, atau CP .
sumber
Konsistensi - Ketika kami mengirim permintaan baca, jika itu mengembalikan hasil, itu harus mengembalikan tulisan terbaru yang diberikan oleh permintaan klien. Ketersediaan - Permintaan Anda untuk membaca / menulis harus selalu berhasil. Toleransi partisi - Ketika ada partisi jaringan (masalah bagi beberapa mesin untuk berbicara satu sama lain) terjadi, sistem harus tetap bekerja.
Dalam didistribusikan ada kemungkinan bahwa partisi jaringan akan terjadi dan kami tidak dapat menghindari "P" dari CAP. Jadi kami memilih antara "Konsistensi" dan "Ketersediaan".
http://bigdatadose.com/understanding-cap-theorem/
sumber
Cara sederhana untuk memahami teorema CAP:
Penjelasan ini dari artikel yang sangat bagus ini . Semoga ini bisa membantu.
sumber
Saya telah melalui banyak tautan, tetapi tidak ada yang bisa memberi saya jawaban yang memuaskan, kecuali satu.
Karenanya saya menggambarkan CAP dalam kata-kata yang sangat sederhana.
Konsistensi : Harus mengembalikan data yang sama , terlepas dari dari mana simpul itu berasal.
Ketersediaan : Node harus merespons (harus tersedia).
Toleransi Partisi : Cluster harus merespons (harus tersedia), bahkan jika ada partisi (mis. Kegagalan jaringan) antara node.
(Juga salah satu alasan utama kebingungan lebih banyak adalah konvensi penamaan yang buruk. Jika saya benar, saya mungkin telah memberikan teorema DNC sebagai gantinya: Konsistensi Data , Ketersediaan Node , Ketersediaan Cluster , di mana masing-masing sesuai dengan Konsistensi , Ketersediaan , dan Toleransi Partisi )
Database CP: Database CP memberikan konsistensi dan toleransi partisi dengan mengorbankan ketersediaan. Ketika partisi terjadi antara dua node, sistem harus mematikan simpul yang tidak konsisten (mis., Membuatnya tidak tersedia) sampai partisi tersebut diselesaikan.
Basis data AP: Basis data AP memberikan ketersediaan dan toleransi partisi dengan mengorbankan konsistensi. Ketika sebuah partisi terjadi, semua node tetap tersedia tetapi yang di ujung yang salah dari partisi mungkin mengembalikan versi data yang lebih lama daripada yang lain. (Ketika partisi diselesaikan, database AP biasanya menyinkronkan kembali node untuk memperbaiki semua inkonsistensi dalam sistem.)
Basis data CA: Basis data CA memberikan konsistensi dan ketersediaan di semua node. Ini tidak dapat melakukan ini jika ada partisi antara dua node dalam sistem, dan karenanya tidak dapat memberikan toleransi kesalahan. Dalam sistem terdistribusi, partisi tidak dapat dihindari. Jadi, sementara kita dapat mendiskusikan database CA yang didistribusikan secara teori, untuk semua tujuan praktis, database CA yang didistribusikan bisa ada tetapi tidak boleh ada.
Oleh karena itu, ini tidak berarti Anda tidak dapat memiliki database CA untuk aplikasi terdistribusi Anda jika Anda membutuhkannya. Banyak database relasional, seperti PostgreSQL, memberikan konsistensi dan ketersediaan dan dapat digunakan untuk beberapa node menggunakan replikasi.
Sumber: https://www.ibm.com/cloud/learn/cap-theorem
sumber