Pemilihan Kepimpinan Bersama Konsul

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat bagaimana Pemilihan Pemimpin dengan Konsul membantu memastikan kestabilan data. Kami akan memberikan contoh praktikal bagaimana menguruskan penguncian diedarkan dalam aplikasi serentak.

2. Apa itu Konsul?

Consul adalah alat sumber terbuka yang menyediakan pendaftaran dan penemuan perkhidmatan berdasarkan pemeriksaan kesihatan. Selanjutnya, ia merangkumi Web Graphical User Interface (GUI) untuk melihat dan berinteraksi dengan Konsul dengan mudah. Ini juga merangkumi keupayaan tambahan pengurusan sesi dan kedai Nilai-Kunci (KV).

Pada bahagian seterusnya, kami akan memfokuskan pada bagaimana kami dapat menggunakan pengurusan sesi Konsul dan kedai KV untuk memilih pemimpin dalam aplikasi dengan banyak kejadian .

3. Asas Konsul

Ejen Konsul adalah komponen terpenting yang dijalankan pada setiap nod kluster Konsul. Ia bertanggungjawab untuk pemeriksaan kesihatan; mendaftar, menemui, dan menyelesaikan perkhidmatan; menyimpan data konfigurasi; dan banyak lagi.

Ejen konsul boleh berjalan dalam dua mod yang berbeza - Pelayan dan Ejen.

Tanggungjawab utama Pelayan Konsul adalah untuk menjawab pertanyaan yang datang dari ejen dan memilih pemimpin. Kepemimpinan dipilih menggunakan protokol konsensus untuk memberikan Konsistensi (seperti yang ditentukan oleh CAP) berdasarkan algoritma Raft.

Tidak dalam skop artikel ini untuk menjelaskan secara terperinci mengenai bagaimana konsensus itu berfungsi. Walaupun begitu, perlu dinyatakan bahawa node boleh berada di salah satu daripada tiga keadaan: pemimpin, calon, atau pengikut. Ia juga menyimpan data dan menjawab pertanyaan yang datang dari ejen.

Ejen lebih ringan daripada pelayan Consul. Ia bertanggungjawab untuk menjalankan pemeriksaan kesihatan terhadap perkhidmatan yang didaftarkan dan meneruskan pertanyaan ke pelayan. Mari lihat rajah ringkas kluster Konsul:

Konsul juga dapat membantu dengan cara lain - misalnya, dalam aplikasi bersamaan di mana satu contoh mesti menjadi pemimpin.

Mari kita lihat di bahagian yang akan datang bagaimana Konsul, melalui pengurusan sesi dan kedai KV, dapat memberikan kemampuan penting ini.

4. Pemilihan Kepimpinan Bersama Konsul

Dalam penyebaran yang diedarkan, perkhidmatan yang memegang kunci adalah peneraju. Oleh itu, untuk sistem yang sangat tersedia, sangat penting untuk menguruskan kunci dan pemimpin.

Consul menyediakan kedai dan pengurusan sesi KV yang mudah digunakan. Fungsi-fungsi itu berfungsi untuk membina pemilihan pemimpin, jadi mari kita pelajari prinsip-prinsip di belakangnya.

4.1. Pertentangan Kepimpinan

Perkara pertama yang dilakukan oleh semua sistem yang diedarkan adalah bersaing untuk kepemimpinan. Pertengkaran untuk menjadi pemimpin merangkumi beberapa langkah:

  1. Semua contoh mesti bersetuju dengan kunci bersama untuk dipertikaikan.
  2. Seterusnya, contoh membuat sesi menggunakan kunci yang dipersetujui melalui pengurusan sesi Konsul dan kemampuan KV.
  3. Ketiga, mereka harus memperoleh sesi tersebut. Sekiranya nilai pengembalian adalah benar , kunci milik instance, dan jika salah , contohnya adalah pengikut.
  4. Contohnya perlu terus diperhatikan untuk sesi tersebut untuk mendapatkan kepemimpinan semula sekiranya berlaku kegagalan atau dibebaskan .
  5. Akhirnya, pemimpin dapat melepaskan sesi, dan prosesnya bermula lagi.

Setelah pemimpin dipilih, contoh lain menggunakan Konsul KV dan pengurusan sesi untuk menemui pemimpin dengan:

  • Mengambil kunci yang dipersetujui
  • Mendapatkan maklumat sesi untuk mengetahui pemimpin

4.2. Contoh Praktikal

Kita perlu membuat kunci dan nilai bersama dengan sesi di Konsul dengan beberapa contoh berjalan. Untuk menolongnya, kami akan menggunakan pelaksanaan Java sumber terbuka Kingul Konsul Kepemimpinan Terhad Digital.

Pertama, mari kita masukkan kebergantungan:

 com.github.kinguinltdhk leadership-consul ${kinguinltdhk.version}   com.ecwid.consul consul-api   

Kami mengecualikan ketergantungan consul-api untuk menghindari pertembungan pada versi yang berbeda di Java.

Untuk kunci biasa, kami akan menggunakan:

services/%s/leader

Mari uji semua proses dengan coretan ringkas:

new SimpleConsulClusterFactory() .mode(SimpleConsulClusterFactory.MODE_MULTI) .debug(true) .build() .asObservable() .subscribe(i -> System.out.println(i));

Kemudian kami membuat kluster dengan beberapa keadaan dengan asObservable () untuk mengakses acara oleh pelanggan. Pemimpin membuat sesi di Konsul, dan semua contoh mengesahkan sesi untuk mengesahkan kepemimpinan.

Akhirnya, kami menyesuaikan konfigurasi konsul dan pengurusan sesi , dan kunci yang dipersetujui antara contoh untuk memilih pemimpin:

cluster: leader: serviceName: cluster serviceId: node-1 consul: host: localhost port: 8500 discovery: enabled: false session: ttl: 15 refresh: 7 election: envelopeTemplate: services/%s/leader

4.3. Cara Mengujinya

Terdapat beberapa pilihan untuk memasang Konsul dan menjalankan ejen.

Salah satu kemungkinan untuk menggunakan Consul adalah melalui kontena. Kami akan menggunakan gambar Consul Docker yang terdapat di Docker Hub, repositori terbesar untuk gambar kontena.

Kami akan menggunakan Consul menggunakan Docker dengan menjalankan perintah:

docker run -d --name consul -p 8500:8500 -e CONSUL_BIND_INTERFACE=eth0 consul

Konsul kini berjalan, dan seharusnya tersedia di localhost: 8500 .

Mari laksanakan coretan dan periksa langkah-langkah yang dilakukan:

  1. Pemimpin membuat sesi di Konsul.
  2. Kemudian ia dipilih (terpilih. Pertama ).
  3. Contoh selebihnya menonton sehingga sesi dilancarkan :
INFO: multi mode active INFO: Session created e11b6ace-9dc7-4e51-b673-033f8134a7d4 INFO: Session refresh scheduled on 7 seconds frequency INFO: Vote frequency setup on 10 seconds frequency ElectionMessage(status=elected, vote=Vote{sessionId='e11b6ace-9dc7-4e51-b673-033f8134a7d4', serviceName="cluster-app", serviceId="node-1"}, error=null) ElectionMessage(status=elected.first, vote=Vote{sessionId='e11b6ace-9dc7-4e51-b673-033f8134a7d4', serviceName="cluster-app", serviceId="node-1"}, error=null) ElectionMessage(status=elected, vote=Vote{sessionId='e11b6ace-9dc7-4e51-b673-033f8134a7d4', serviceName="cluster-app", serviceId="node-1"}, error=null) 

Konsul juga menyediakan GUI Web yang terdapat di // localhost: 8500 / ui .

Mari buka penyemak imbas dan klik bahagian nilai-kunci untuk mengesahkan bahawa sesi dibuat:

Oleh itu, salah satu kejadian bersamaan membuat sesi menggunakan kunci yang dipersetujui untuk aplikasi. Hanya apabila sesi dilancarkan, prosesnya dapat dimulakan lagi, dan contoh baru dapat menjadi pemimpin.

5. Kesimpulan

Dalam artikel ini, kami menunjukkan dasar-dasar Pemilihan Kepemimpinan dalam aplikasi berprestasi tinggi dengan banyak kejadian. Kami menunjukkan bagaimana pengurusan sesi dan kemampuan menyimpan KV Konsul dapat membantu mendapatkan kunci dan memilih pemimpin.

Seperti biasa, kodnya tersedia di GitHub.