Akhirnya konsistensi dalam bahasa Inggris yang sederhana


130

Saya sering mendengar tentang konsistensi akhirnya dalam pidato yang berbeda tentang NoSQL, data grid dll. Tampaknya definisi konsistensi akhirnya bervariasi di banyak sumber (dan bahkan mungkin tergantung pada penyimpanan data yang konkret).

Adakah yang bisa memberikan penjelasan sederhana tentang Konsistensi Terakhir dalam istilah umum, tidak terkait dengan penyimpanan data yang nyata?


1
Apakah misalnya Wikipedia tidak membantu? en.wikipedia.org/wiki/Eventual_consistency
Oliver Charlesworth

22
@OliCharlesworth: tidak. Mungkin hanya saya tetapi sama sekali tidak jelas bahkan setelah membaca dua kali.
Roman

Jawaban:


228

Konsistensi akhirnya:

  1. Saya menonton laporan cuaca dan mengetahui bahwa besok akan turun hujan.
  2. Saya katakan bahwa besok akan turun hujan.
  3. Tetangga Anda memberi tahu istrinya bahwa besok akan cerah.
  4. Anda memberi tahu tetangga Anda bahwa besok akan turun hujan.

Akhirnya, semua server (Anda, saya, tetangga Anda) mengetahui kebenaran (bahwa besok akan turun hujan), tetapi sementara itu klien (istrinya) pergi berpikir itu akan cerah, meskipun dia bertanya setelah satu atau lebih dari server (Anda dan saya) memiliki nilai yang lebih up-to-date.

Berbeda dengan Konsistensi Ketat / kepatuhan ACID:

  1. Saldo bank Anda adalah $ 50.
  2. Anda menyetor $ 100.
  3. Saldo bank Anda, yang ditanyakan dari ATM mana saja, adalah $ 150.
  4. Anak Anda menarik $ 40 dengan kartu ATM Anda.
  5. Saldo bank Anda, yang ditanyakan dari ATM mana saja, adalah $ 110.

Saldo Anda tidak dapat mencerminkan apa pun selain jumlah aktual dari semua transaksi yang dilakukan pada akun Anda pada saat yang tepat.

The Alasan mengapa begitu banyak sistem NoSQL memiliki konsistensi akhirnya adalah bahwa hampir semua dari mereka yang dirancang untuk didistribusikan, dan dengan sistem terdistribusi sepenuhnya ada overhead super-linear untuk menjaga konsistensi yang ketat (yang berarti Anda hanya dapat skala sejauh sebelum hal mulai melambat turun, dan ketika mereka melakukannya, Anda perlu membuang lebih banyak perangkat keras secara eksponensial pada masalah untuk terus scaling).


Saya tidak mengerti. Apakah pertumbuhannya linear atau eksponensial?
Maciek Kreft

4
Pertumbuhan overhead komunikasi dari sistem N node yang secara konsisten konsisten umumnya dipahami sebagai super-linear (yaitu, lebih dari linear). Bisa eksponensial, bisa kubik ... Tergantung protokol komunikasi, dll.
Chris Shain

2
Jawaban yang bagus. Beberapa pertanyaan tindak lanjut: bukankah "buruk" bahwa permintaan ke server dapat membuat Anda salah / ketinggalan zaman informasi? Apakah orang baik-baik saja dengan itu atau apakah ada solusi untuk itu? Juga, bagaimana data akhirnya direplikasi di server yang berbeda? Jika salah satu server turun, dan data direplikasi di seluruh server, jika server itu kembali, bagaimana cara memperbaharui datanya?
noblerare

5
@noblerare ini "buruk" untuk berbagai tingkat kejahatan. Akan sangat buruk jika saldo ATM saya kedaluwarsa. Ini tidak terlalu buruk jika basis data logging saya tidak cukup, atau jika umpan Facebook saya tertinggal beberapa detik. Replikasi data dan mekanisme daya tahan sangat bervariasi, dan tergantung pada platform tertentu. Untuk Cassandra (sebagai contoh) penulis dapat memutuskan apakah untuk penulisan tertentu agar berhasil harus dilakukan pada satu, semua, atau kuorum (mayoritas) node. HBase mengambil pendekatan yang berbeda, di mana simpul tertentu adalah "master" untuk setiap baris data.
Chris Shain

Sebenarnya, sebagian besar sistem perbankan pada akhirnya konsisten.
Kekacauan

106

Konsistensi akhirnya:

  1. Data Anda direplikasi di beberapa server
  2. Klien Anda dapat mengakses server mana saja untuk mengambil data
  3. Seseorang menulis sepotong data ke salah satu server, tetapi belum disalin ke yang lain
  4. Seorang klien mengakses server dengan data, dan mendapatkan salinan terbaru
  5. Klien yang berbeda (atau bahkan klien yang sama) mengakses server yang berbeda (yang belum mendapatkan salinan baru), dan mendapatkan salinan yang lama

Pada dasarnya, karena butuh waktu untuk mereplikasi data di beberapa server, permintaan untuk membaca data mungkin pergi ke server dengan salinan baru, dan kemudian pergi ke server dengan salinan lama. Istilah "akhirnya" berarti bahwa pada akhirnya data akan direplikasi ke semua server, dan dengan demikian mereka semua akan memiliki salinan terbaru.

Konsistensi akhirnya adalah suatu keharusan jika Anda ingin pembacaan latensi rendah, karena server yang merespons harus mengembalikan salinan datanya sendiri, dan tidak punya waktu untuk berkonsultasi dengan server lain dan mencapai kesepakatan bersama tentang konten data. Saya menulis posting blog yang menjelaskan ini secara lebih rinci.


2
Posting blog yang bagus. Layak dibaca untuk seseorang yang baru dengan gagasan konsistensi akhirnya. Jawaban ini akan lebih baik jika ditulis ulang untuk menjelaskan lebih banyak tentang apa yang ada dalam posting blog.
axiopisty

1
Dijelaskan dengan baik di blog Anda. Terima kasih telah berbagi.
Ataur Rahman Munna

12

Pikir Anda memiliki aplikasi dan replika. Maka Anda harus menambahkan item data baru ke aplikasi.

masukkan deskripsi gambar di sini

Kemudian aplikasi menyinkronkan data ke replika lain yang ditampilkan di bawah

masukkan deskripsi gambar di sini

Sementara itu klien baru akan mendapatkan data dari satu replika yang belum diperbarui. Dalam hal ini dia tidak bisa mendapatkan data up date yang benar. Karena sinkronisasi punya waktu. Dalam hal itu pada akhirnya tidak konsisten

Masalahnya adalah bagaimana akhirnya kita bisa konsisten ?

Untuk itu kami menggunakan aplikasi mediator untuk memperbarui / membuat / menghapus data dan menggunakan query langsung untuk membaca data. yang akhirnya membantu konsistensi

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


3

Ketika aplikasi membuat perubahan ke item data pada satu mesin, perubahan itu harus disebarkan ke replika lain. Karena perubahan propagasi tidak instan, ada selang waktu di mana beberapa salinan akan memiliki perubahan terbaru, tetapi yang lain tidak. Dengan kata lain, salinan akan saling tidak konsisten. Namun, perubahan pada akhirnya akan disebarkan ke semua salinan, dan karenanya istilah "konsistensi akhirnya". Istilah konsistensi akhirnya hanyalah pengakuan bahwa ada penundaan tanpa batas dalam menyebarkan perubahan yang dilakukan pada satu mesin ke semua salinan lainnya. Konsistensi akhirnya tidak berarti atau relevan dalam sistem terpusat (salinan tunggal) karena tidak perlu propagasi.

sumber: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

Dalam bahasa Inggris yang sederhana, kita dapat mengatakan: Meskipun sistem Anda mungkin dalam keadaan tidak konsisten, tujuannya selalu untuk mencapai konsistensi di beberapa titik untuk setiap bagian data.


1

Akhirnya konsistensi berarti perubahan membutuhkan waktu untuk disebarkan dan data mungkin tidak dalam keadaan yang sama setelah setiap tindakan, bahkan untuk tindakan atau transformasi data yang identik. Ini dapat menyebabkan hal-hal yang sangat buruk terjadi ketika orang tidak tahu apa yang mereka lakukan ketika berinteraksi dengan sistem seperti itu.

Tolong jangan mengimplementasikan penyimpanan data dokumen bisnis penting sampai Anda memahami konsep ini dengan baik. Mengacaukan implementasi penyimpanan data dokumen jauh lebih sulit untuk diperbaiki daripada model relasional karena hal-hal mendasar yang akan dikacaukan tidak dapat diperbaiki karena hal-hal yang diperlukan untuk memperbaikinya tidak ada dalam ekosistem. Refactoring data toko dalam pesawat juga jauh lebih sulit daripada transformasi ETL sederhana dari RDBMS.

Tidak semua penyimpanan dokumen dibuat sama. Beberapa hari ini (MongoDB) mendukung transaksi semacam itu, tetapi memigrasi datastore mungkin sebanding dengan biaya implementasi ulang.

PERINGATAN: Pengembang dan bahkan arsitek yang tidak mengetahui atau memahami teknologi dari suatu penyimpanan data dokumen dan takut untuk mengakui bahwa karena takut kehilangan pekerjaan mereka tetapi telah dilatih secara klasik dalam RDBMS dan yang hanya mengetahui sistem ACID (betapa berbedanya sistem ACID). ?) dan siapa yang tidak tahu teknologi atau meluangkan waktu untuk mempelajarinya, akan kehilangan mendesain penyimpanan data dokumen. Mereka juga dapat mencoba dan menggunakannya sebagai RDBMS atau untuk hal-hal seperti caching. Mereka akan memecah apa yang seharusnya menjadi transaksi atom yang harus beroperasi pada seluruh dokumen menjadi potongan "relasional" lupa bahwa replikasi dan latensi adalah sesuatu, atau lebih buruk lagi, menyeret sistem pihak ketiga ke dalam "transaksi". Mereka akan melakukan ini sehingga RDBMS mereka dapat mencerminkan data lake mereka, tanpa memperhatikan apakah itu akan berhasil atau tidak, dan tanpa pengujian, karena mereka tahu apa yang mereka lakukan. Kemudian mereka akan bertindak terkejut ketika benda kompleks yang disimpan dalam dokumen terpisah seperti "pesanan" memiliki lebih sedikit "barang pesanan" dari yang diharapkan, atau mungkin tidak sama sekali. Tapi itu tidak akan sering terjadi, atau cukup sering sehingga mereka hanya akan bergerak maju. Mereka bahkan mungkin tidak menemukan masalah dalam pengembangan. Kemudian, alih-alih mendesain ulang, mereka akan membuang "keterlambatan" dan "coba lagi" dan "memeriksa" untuk memalsukan model data relasional, yang tidak akan berfungsi, tetapi akan menambah kompleksitas tambahan tanpa manfaat. Tapi sekarang sudah terlambat - masalahnya telah dikerahkan dan sekarang bisnis berjalan di atasnya. Akhirnya, seluruh sistem akan dibuang dan departemen akan di-outsourcing-kan dan orang lain akan memeliharanya. Itu masih tidak akan berfungsi dengan benar, tetapi mereka bisa gagal lebih murah daripada kegagalan saat ini.


0

Konsistensi akhirnya lebih seperti spektrum. Di satu sisi Anda memiliki konsistensi yang kuat dan di sisi lain Anda memiliki konsistensi akhirnya. Di antara ada tingkat seperti Snapshot, baca tulisan saya, staleness terbatas. Doug Terry memiliki penjelasan yang indah dalam makalahnya tentang konsistensi akhirnya melalui baseball .

Sesuai dengan saya konsistensi akhirnya pada dasarnya adalah toleransi terhadap data acak dalam urutan acak setiap kali Anda membaca dari penyimpanan data. Yang lebih baik dari itu adalah model konsistensi yang lebih kuat. Misalnya, snapshot memiliki data basi tetapi akan mengembalikan data yang sama jika dibaca lagi sehingga dapat diprediksi. Terkadang aplikasi dapat mentolerir data yang sudah basi untuk jangka waktu tertentu yang menuntut data konsisten.

Jika Anda melihat makna konsistensi itu lebih berkaitan dengan keseragaman atau kurangnya penyimpangan. Jadi dalam istilah sistem non komputer bisa berarti toleransi untuk variasi yang tidak terduga. Bisa dijelaskan dengan sangat baik melalui ATM. ATM dapat offline sehingga berbeda dari saldo akun dari sistem inti. Namun ada toleransi untuk menunjukkan saldo yang berbeda untuk jangka waktu tertentu. Setelah ATM online, dapat disinkronkan dengan sistem inti dan mencerminkan keseimbangan yang sama. Jadi ATM dapat dikatakan konsisten pada akhirnya.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.