Raft 算法
adalah pilihan pertama untuk pembangunan sistem teragih共识算法
. Contohnya, Etcd dan Consul popular sekarang.
Jika 掌握
algoritma ini dilaksanakan, ia boleh menjadi lebih mudah untuk mengendalikan 容错
dan 一致性
keperluan kebanyakan senario. Contohnya, sistem konfigurasi teragih, storan NoSQL teragih, dsb. dengan mudah boleh menembusi had mesin tunggal sistem.
Algoritma Raft mencapai konsensus pada siri nilai dan ketekalan log setiap nod melalui semua kaedah berdasarkan ketua.
Pengikut : 普通群众
, secara senyap menerima mesej daripada pemimpin Apabila mesej degupan jantung pemimpin tamat, dia akan mengambil inisiatif untuk bangkit dan mengesyorkan dirinya sebagai calon.
Calon (Calon) : 候选人
akan meminta mesej RPC undian daripada nod lain dan memberitahu nod lain untuk mengundi Jika ia memenangi majoriti undian mengundi, ia akan dinaikkan pangkat kepada pemimpin yang.
Pemimpin : 霸道总裁
, semuanya terpulang kepada saya. Proses permintaan tulis, urus replikasi log dan hantar maklumat degupan jantung secara berterusan untuk memberitahu nod lain bahawa "Saya ketua, saya masih hidup dan anda tidak mahu" memulakan pilihan raya baharu tanpa perlu mencari pemimpin baharu untuk menggantikan saya.
Seperti yang ditunjukkan dalam rajah di bawah, tiga jenis tokoh digunakan untuk mewakili pengikut, calon dan pemimpin.
Peranan
Sekarang mari bayangkan, Di sana ialah sistem nod tunggal Nod ini berfungsi sebagai pelayan pangkalan data dan menyimpan nilai X.
Pelayan Pangkalan Data
Bulatan pepejal hijau di sebelah kiri ialah klien, dan bulatan pepejal biru di sebelah kanan ialah Nod a (Nod a ). Penggal mewakili tempoh jawatan, yang akan dibincangkan kemudian.
Pelanggan
Pelanggan menghantar data ke satu- pelayan nod Operasi kemas kini menetapkan nilai yang disimpan dalam pangkalan data kepada 8. Dalam persekitaran yang berdiri sendiri (nod pelayan tunggal), nilai yang diperoleh klien daripada pelayan juga adalah 8. Konsistensi sangat mudah untuk dipastikan.
Pelanggan menghantar data ke pelayan
Tetapi jika terdapat berbilang nod pelayan, bagaimana untuk memastikan konsistensi? Sebagai contoh, terdapat tiga nod: a, b, c. Seperti yang ditunjukkan di bawah. Ketiga-tiga nod ini membentuk kluster pangkalan data. Apabila pelanggan melakukan operasi kemas kini pada ketiga-tiga nod ini, bagaimana untuk memastikan bahawa nilai yang disimpan dalam tiga nod adalah konsisten? Ini adalah isu konsistensi yang diedarkan. Algoritma Raft ada di sini untuk menyelesaikan masalah ini. Sudah tentu, terdapat protokol lain yang juga boleh menjamin ini Artikel ini hanya memfokuskan pada algoritma Raft.
Dalam kluster berbilang nod, dalam keadaan tidak normal seperti kegagalan nod, ralat partition, dsb., bagaimanakah algoritma Raft memastikan bahawa hanya terdapat satu ketua dalam kluster di masa yang sama? Mari kita mulakan untuk menerangkan proses pemilihan pemimpin oleh algoritma Raft.
Dalam keadaan awal, semua nod dalam kelompok adalah pengikut status.
Seperti yang ditunjukkan dalam rajah di bawah, terdapat tiga nod (Nod) a, b, dan c, dan istilah (Terma) ialah 0.
Keadaan awal
Algoritma Raft melaksanakan ciri tamat masa rawak, setiap satu masa Selang masa tamat untuk setiap nod menunggu maklumat degupan jantung daripada nod pendahulu adalah rawak. Sebagai contoh, selang masa tamat menunggu nod A ialah 150 ms, nod B ialah 200 ms, dan nod C ialah 300 ms. Kemudian tamat masa dahulu, ia tamat masa kerana ia tidak menunggu maklumat degupan jantung pemimpin. Seperti yang ditunjukkan dalam rajah di bawah, pemasa tamat masa untuk tiga nod mula berjalan.
Tempoh tamat masa
Apabila tempoh tamat masa nod A tamat, nod A menjadi calon dan meningkatkan nombor jangka masanya dikemas kini daripada 0 kepada 1. Dan hantar undi untuk diri saya sendiri.
Jadi calon
Mari kita lihat bagaimana calon menjadi pemimpin .
Pemilihan pemimpin
Perkataan Inggeris ialah term, dan leaders have tenure.
Dengan mengandaikan gugusan terdiri daripada N nod, maka majoriti sekurang-kurangnya N/2+1. Sebagai contoh: untuk gugusan 3 nod, kebanyakannya adalah 2.
Untuk mengelakkan berbilang nod daripada memulakan pengundian pada masa yang sama, setiap nod akan diberikan tamat masa pilihan raya rawak. Pada masa ini, nod tidak boleh menjadi calon dan hanya boleh menunggu sehingga tamat masa. Contohnya, dalam contoh di atas, nod A tamat masa dahulu dan menjadi calon dahulu. Dengan reka bentuk yang bijak ini, dalam kebanyakan kes hanya satu nod pelayan memulakan pilihan raya terlebih dahulu dan bukannya memulakan pilihan raya pada masa yang sama, yang mengurangkan bilangan kegagalan pilihan raya akibat pembahagian undi.
Menjadi calon
Kegagalan Pemimpin
Langkah 1Penggal
Atas ialah kandungan terperinci Algoritma konsensus yang sistem teragih mesti tahu: Rakit. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!