Teorema CAP - Ketersediaan dan Toleransi Partisi

207

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?

Kannan Manikandan
sumber
1
di sini adalah artikel yang menjelaskan CAP dalam bahasa Inggris ksat.me/a-plain-english-introduction-to-cap-theorem
Tushar Saha
2
jangan pergi untuk anslwers readymade. Baca, visualisasikan, dan pahami setiap C, A, P secara terpisah. Desain arsitektur cluster terdistribusi (mungkin 3 DB) dan sekarang terapkan pemahaman Anda. Lihat apa yang terjadi pada C, A, P ketika kegagalan distribusi (DB) terjadi. Setelah Anda mengerti, periksa jawaban dan terapkan dengan logika Anda. Ingat - Bahkan jika Anda mengerti, itu mungkin tidak jelas. jadi, pikirkan dan terapkan pemahaman Anda. Terima kasih
Maiden
1
Entah bagaimana tautan ksat.me di atas berjalan ke 404 url ​​karena diakhiri dengan '/'. ksat.me/a-plain-english-introduction-to-cap-theorem Ini berfungsi dengan baik dan penjelasan yang sangat terperinci untuk masing-masing 'C', 'A', 'P'
vivek.m

Jawaban:

402

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:

  • CA - data konsisten di antara semua node - selama semua node online - dan Anda dapat membaca / menulis dari sembarang node dan memastikan bahwa datanya sama, tetapi jika Anda pernah mengembangkan partisi antara node, data akan tidak sinkron (dan tidak akan disinkronkan begitu partisi diselesaikan).
  • CP - data konsisten di antara semua node, dan mempertahankan toleransi partisi (mencegah desync data) dengan menjadi tidak tersedia ketika sebuah node turun.
  • AP - node tetap online meskipun mereka tidak dapat berkomunikasi satu sama lain dan akan melakukan sinkronisasi ulang data setelah partisi teratasi, tetapi Anda tidak dijamin bahwa semua node akan memiliki data yang sama (baik selama atau setelah partisi)

Anda harus mencatat bahwa sistem CA tidak ada secara praktis (bahkan jika beberapa sistem mengklaim demikian).

Chris Heald
sumber
1
Dalam AP mengapa kami tidak menjamin bahwa semua node akan memiliki data yang sama? Ok, karena kita tidak punya "C" tapi .. ini tidak jelas buat saya ... Saya ingin tahu mengapa ini terjadi ...
grep
3
@ grep Maaf atas jawaban yang terlambat. Jika Anda memiliki keduanya ketersediaan (cluster tidak turun) dan toleransi partisi (database dapat bertahan hidup node tidak dapat berkomunikasi), maka Anda tidak dapat menjamin bahwa semua node akan selalu memiliki semua data (konsistensi), karena node siap dan menerima tulisan, tetapi tidak dapat mengkomunikasikan tulisan tersebut satu sama lain.
Chris Heald
4
Terlambat ke pesta, tetapi ada baiknya menampilkan beberapa contoh di setiap kategori, misalnya. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn
itu akan sangat membantu untuk menyertakan ilustrasi / contoh sederhana tentang node-cluster yang dimaksudkan di sini. apakah itu sistem atau tabel data / koleksi yang tersebar di berbagai sistem atau sesuatu yang lain?
shrotavre
Secara pragmatis, node paling sering adalah sistem individu (atau perangkat lunak yang berjalan pada sistem tersebut) yang dihubungkan oleh beberapa mekanisme jaringan.
Chris Heald
43

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.

Jayadev
sumber
18

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

Brian Bulkowski
sumber
Sistem CA memang membingungkan, saya punya pertanyaan tentang CA Anda contoh dari database monolitik. Jika itu hanya satu server, dari mana "A" berasal, karena bagi saya kelihatannya kegagalan dari server tersebut akan mengakibatkan tidak ada layanan yang tersedia?
chaooder
1
Pertanyaan bagus. Server dapat mengalami kegagalan disk, atau bahkan DIMM gagal, atau catu daya gagal jika dirancang untuk ketersediaan tinggi. Bahkan bayangkan berada di banyak jaringan listrik. Anda mendapatkan ketersediaan yang lebih tinggi dan lebih tinggi, tetapi tidak pernah ada "jaringan" di dalam yang memiliki kemampuan untuk mempartisi dan berjalan dengan komponen yang tidak disetujui. Sementara perangkat keras yang lebih esoteris ada (lihat SQL NON-STOP), contoh array RAID dengan komponen yang gagal dan melanjutkan masih umum hari ini, dan menyediakan ketersediaan yang sangat tinggi dalam satu server.
Brian Bulkowski
13

Teorema CAP

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.


Mengenai AP , Ketersediaan (selalu dapat diakses) dapat ada dengan ( Cassendra ) atau tanpa ( RDBMS ) toleransi partisi

sumber foto

mrsrinivas
sumber
2

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

Jika operasi B dimulai setelah operasi A berhasil diselesaikan, maka operasi B harus melihat sistem dalam keadaan yang sama seperti pada penyelesaian operasi A, atau keadaan yang lebih baru (tetapi tidak pernah keadaan lama).

A :

“Setiap permintaan yang diterima oleh simpul [database] yang tidak gagal dalam sistem harus menghasilkan respons [non-kesalahan]”. Itu tidak cukup untuk beberapa node untuk dapat menangani permintaan: setiap node yang tidak gagal harus dapat menanganinya. Banyak yang disebut sistem "sangat tersedia" (yaitu downtime rendah) sebenarnya tidak memenuhi definisi ketersediaan ini.

P :

Toleransi Partisi (sangat salah nama) pada dasarnya berarti Anda berkomunikasi melalui jaringan asinkron yang dapat menunda atau menjatuhkan pesan. Internet dan semua pusat data kami memiliki properti ini, jadi Anda tidak punya pilihan dalam hal ini.

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.

Anush
sumber
1

Dalam teorema CAP sederhana menyatakan bahwa mustahil bagi sistem terdistribusi untuk secara bersamaan memberikan ketiga jaminan:

masukkan deskripsi gambar di sini

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 .

JERRY
sumber
0

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/

rajnish
sumber
0

Cara sederhana untuk memahami teorema CAP:

Dalam hal partisi jaringan, kita perlu memilih antara ketersediaan sempurna dan konsistensi sempurna.

Memilih konsistensi berarti tidak dapat menjawab permintaan klien karena sistem tidak dapat menjamin untuk mengembalikan penulisan terbaru. Ini mengorbankan ketersediaan.

Memilih ketersediaan berarti mampu menanggapi permintaan klien tetapi sistem tidak dapat menjamin konsistensi, yaitu nilai terbaru yang ditulis. Sistem yang tersedia memberikan jawaban terbaik dalam situasi yang diberikan.

Penjelasan ini dari artikel yang sangat bagus ini . Semoga ini bisa membantu.

Mouna
sumber
0

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

Pratik K. Shah
sumber