Apa alasan di balik teorema CAP?

21

http://en.wikipedia.org/wiki/CAP_theorem

http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf

Saya pikir itu sangat tidak mudah mengapa hanya dua dari

  1. Konsistensi
  2. Tersedianya
  3. Toleransi partisi

dapat menampung sistem database terdistribusi yang diberikan. Dugaan ini terbukti tetapi ada cara yang lebih mudah untuk melihat mengapa mungkin ini mungkin terus?

Saya tidak mencari bukti, hanya cara yang baik untuk memahami mengapa teorema ini masuk akal. Apa alasannya?

Lazer
sumber

Jawaban:

23

OK, mari kita bayangkan bahwa Anda memiliki database terdistribusi. Katakanlah Anda memiliki simpul di Oregon dan satu di California. Teori CAP mengatakan bahwa Anda akan mengalami masalah ketika mengatur jenis database ini.

Misalnya, jika Anda meminta data dari satu basis data, harus sama dengan data di basis data lain. Ini memastikan bahwa nilai apa pun yang Anda miliki di satu database dijamin berada di yang lain ( Konsistensi teori CAP). Melakukan hal ini memungkinkan Anda untuk memperbarui data dalam satu basis data dan meminta dari yang lain, mendapatkan hasil yang sama.

Komputer memperbarui data di Oregon, mentransfer data ke California

Ketika kami memperbarui data di simpul Oregon, data dikirim ke simpul California sehingga databasenya konsisten. Untuk benar-benar menjaga konsistensi, kami harus memastikan bahwa kedua database mendapatkan pembaruan sebelum keduanya diizinkan untuk benar-benar menyimpan data (komitmen dua fase menggunakan transaksi terdistribusi). Dengan kata lain, jika database California tidak dapat menyimpan data karena beberapa alasan (misalnya kegagalan hard drive), maka database di Oregon tidak akan menyimpan data dan akan gagal transaksi.

Masalah dengan transaksi terdistribusi seperti yang di atas muncul ketika kita ingin memiliki ketersediaan tinggi. Dalam skenario di atas, proses mencoba menyinkronkan kedua basis data adalah proses yang sangat, sangat lambat. (Bayangkan, kita harus mengirim data dari Oregon ke California, memastikan data itu sampai di sana, memastikan bahwa kedua basis data memiliki kunci pada data, dll.) Ini menyebabkan masalah besar ketika kita menginginkan sistem yang cepat dan responsif bahkan selama saat permintaan tinggi. (Ini adalah Ketersediaan teorema CAP.)

Biasanya, apa yang kita lakukan untuk memastikan ketersediaan tinggi adalah kita menggunakan replikasi daripada transaksi terdistribusi. Jadi, alih-alih menjamin California dapat menerima data, kami langsung saja menyimpannya di simpul Oregon dan kemudian mengirim data ke California ketika kami menyiasatinya. Ini menjamin bahwa kami selalu dapat menyimpan data, terlepas dari apakah California siap untuk menyimpan data atau tidak.

Oregon node memperbarui data sementara California membaca data.  Kemudian, data dipindahkan ke California

Ini meningkatkan Ketersediaan, tetapi dengan biaya Konsistensi. Lihat, jika seseorang memperbarui data di Oregon dan kemudian seseorang (pada saat yang sama) membaca data di California, mereka tidak mendapatkan data baru - database tidak lagi konsisten. Bahkan, mereka tidak akan konsisten sampai Oregon mengirim data ke California!

Jadi, itulah trade-off Ketersediaan -vs- Konsistensi.

Toleransi partisi adalah aspek ketiga dari teori CAP. Partisi adalah, dalam konteks ini, gagasan bahwa suatu basis data (atau sistem terdistribusi lainnya) dapat memecah menjadi beberapa bagian yang terpisah dan masih berfungsi dengan benar.

Pertanyaannya menjadi, apa yang terjadi ketika kedua database berjalan dengan benar, tetapi tautan dari Oregon ke California terputus?

Oregon sedang diperbarui saat simpul California sedang dibaca.  Jaringan antara node terputus.

Jika kami memperbarui basis data di Oregon, kami perlu mendapatkan data ke California dengan satu atau lain cara (transaksi terdistribusi atau replikasi). Namun, jika tautan antara keduanya terputus, maka sistem telah dipartisi dan basis data tidak lagi terhubung bersama.

Ketika ini terjadi, pilihan Anda adalah berhenti mengizinkan pembaruan (untuk mempertahankan Konsistensi) dengan biaya Ketersediaan atau untuk memungkinkan pembaruan (untuk mempertahankan Ketersediaan) dengan biaya konsistensi.

Seperti yang Anda lihat, toleransi partisi menciptakan pertukaran langsung antara Konsistensi dan Ketersediaan.


Jelas ada lebih dari itu, tetapi itu adalah beberapa contoh tentang bagaimana tiga aspek utama dari sistem terdistribusi ini bekerja untuk dan melawan satu sama lain. Penjelasan Julian Browne tentang teori CAP adalah tempat yang sangat baik untuk belajar lebih banyak.

Richard
sumber
Terkait jawaban oleh Remus Rusanu.
Nick Chammas
Dengan gambar yang jauh lebih cantik!
Richard