Cloister → manajemen kluster OTP prasaja

Meh kabeh aplikasi bisnis sing sukses cepet utawa mengko lumebu ing fase ing ngendi skala horisontal dibutuhake. Ing sawetara kasus, sampeyan mung bisa miwiti conto anyar lan nyuda rata-rata beban. Nanging ana uga kasus sing ora pati penting kanggo mesthekake yen macem-macem kelenjar ngerti saben liyane lan kanthi ati-ati nyebarake beban kerja.

Cloister → manajemen kluster OTP prasaja

Iku nguripake metu dadi Bejo sing erlang, sing kita pilih kanggo sintaks sing nyenengake lan hype ing saubengé, nduweni kelas kapisan dhukungan kanggo sistem sing disebarake. Ing teori, iki muni ora pati penting:

Pesen sing dikirim ing antarane proses ing macem-macem simpul, uga ing antarane tautan lan monitor, transparan [...]

Ing laku, kabeh iku sethitik liyane rumit. Disebarake erlang dikembangake nalika "wadhah" tegese kothak wesi gedhe kanggo kapal, lan "docker" mung sinonim kanggo longshoreman. ING IP4 ana akeh alamat sing ora dienggoni, jaringan rusak biasane disebabake tikus ngunyah kabel, lan wektu kerja rata-rata sistem produksi diukur ing pirang-pirang dekade.

Saiki kita kabeh luar biasa swasembada, rangkep, lan mlaku mbagekke erlang ing lingkungan ngendi alamat IP dinamis diserahake ing prinsip randomness gedhe, lan kelenjar bisa katon lan ilang ing whim saka tumit kiwa panjadwal. Kanggo supaya tumpukan kode boilerplate ing saben project mlaku mbagekke a erlang, kanggo pertempuran lingkungan musuhan, bantuan dibutuhake.

komentar: Aku ngerti yen ana libcluster. Apik tenan, wis luwih saka sewu lintang, penulis misuwur ing masyarakat, lan liya-liyane. Yen cara sing ditawakake paket iki kanggo nggawe lan njaga kluster cukup kanggo sampeyan, aku seneng karo sampeyan. Sayange, aku butuh luwih akeh. Aku pengin ngontrol persiyapan kanthi rinci lan ora dadi penonton njaba ing teater reorganisasi kluster.

syarat

Apa sing aku butuhake yaiku perpustakaan sing bakal njupuk alih manajemen kluster lan bakal duwe properti ing ngisor iki:

  • karya transparan karo loro dhaftar hard-kode simpul lan panemuan dinamis liwat layanan erlang;
  • callback kanthi fungsi kanggo saben owah-owahan topologi (simpul ana, simpul kene, ora stabil jaringan, pamisah);
  • antarmuka transparent kanggo miwiti kluster karo jeneng dawa lan cendhak, minangka karo :nonode@nohost;
  • Dhukungan Docker metu saka kothak, tanpa kudu nulis kode infrastruktur.

Sing terakhir tegese sawise aku nyoba aplikasi kasebut sacara lokal :nonode@nohost, utawa ing lingkungan artificially mbagekke nggunakake test_cluster_task, Aku mung arep mlayu docker-compose up --scale my_app=3 lan ndeleng carane nindakake telung conto ing docker tanpa owah-owahan kode. Aku uga pengin aplikasi gumantung kaya mnesia - nalika owah-owahan topologi, konco sing padha mbangun kluster urip tanpa tendhangan tambahan saka aplikasi.

kloster iki ora dimaksudaké kanggo dadi perpustakaan saged kabeh saka ndhukung klompok kanggo nggawe kopi. Iku dudu peluru perak sing tujuane kanggo nutupi kabeh kasus sing bisa ditindakake, utawa dadi solusi akademik sing lengkap ing pangertene para ahli teori saka CS sijine ing istilah iki. Perpustakaan iki dirancang kanggo tujuan sing cetha banget, nanging nindakake tugas sing ora gedhe banget. Tujuane iki yaiku nyedhiyakake transparansi lengkap ing antarane lingkungan pangembangan lokal lan lingkungan elastis sing disebarake kanthi wadhah musuhan.

Pendekatan sing dipilih

kloster dimaksudaké kanggo mbukak minangka aplikasi, sanajan pangguna majeng bisa karo Déwan lan pangopènan kluster kanthi manual kanthi langsung mlaku Cloister.Manager ing wit pengawas aplikasi target.

Nalika mbukak minangka aplikasi, perpustakaan gumantung ing config, sing maca nilai dhasar ing ngisor iki:

config :cloister,
  otp_app: :my_app,
  sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
  consensus: 3,              # number of nodes to consider
                             #    the cluster is up
  listener: MyApp.Listener   # listener to be called when
                             #    the ring has changed

Parameter ing ndhuwur tegese kanthi harfiah ing ngisor iki: kloster digunakake kanggo aplikasi OTP :my_app, migunakake panemuan layanan erlang kanggo nyambungake kelenjar, paling telung, lan MyApp.Listener modul (implementasi @behaviour Cloister.Listener) dikonfigurasi kanggo nampa kabar babagan owah-owahan topologi. Katrangan rinci babagan konfigurasi lengkap bisa ditemokake ing dokumentasi.

Kanthi konfigurasi iki, aplikasi kloster bakal diluncurake kanthi bertahap, tundha proses miwiti aplikasi utama nganti konsensus tekan (telung simpul disambungake lan disambungake, kaya ing conto ing ndhuwur.) Iki menehi aplikasi utama kesempatan kanggo nganggep yen diwiwiti, kluster wis kasedhiya. Yen topologi diganti (bakal akeh, amarga simpul ora diwiwiti kanthi sinkron), panangan bakal diarani MyApp.Listener.on_state_change/2. Paling asring kita nindakake tumindak nalika nampa pesen status %Cloister.Monitor{status: :up}, sing tegesé: "Halo, kluster wis ngumpul."

Ing kasus paling, instalasi consensus: 3 optimal amarga sanajan kita ngarepake luwih akeh kelenjar sing bakal nyambung, callback bakal ditindakake status: :rehashingstatus: :up ing sembarang simpul sing mentas ditambahake utawa dibusak.

Nalika miwiti ing mode pembangunan, sampeyan mung kudu nyetel consensus: 1 и kloster bakal seneng skip Enteni kanggo Déwan kluster nalika ndeleng :nonode@nohost, utawa :node@host, utawa :[email protected] - gumantung carane node dikonfigurasi (:none | :shortnames | :longnames).

Manajemen Aplikasi sing disebarake

Aplikasi sing disebarake sing ora ana ing vakum biasane kalebu dependensi sing disebarake, kayata mnesia. Iku gampang kanggo kita kanggo nangani reconfiguration saka callback padha on_state_change/2. Ing kene, contone, ana katrangan rinci babagan cara ngatur ulang mnesia ing fly ing dokumentasi kloster.

Ing kauntungan utama saka nggunakake kloster iku nindakake kabeh operasi sing perlu kanggo mbangun maneh kluster sawise owah-owahan topologi ing ngisor tutup. Aplikasi kasebut mung mlaku ing lingkungan sing disebarake sing wis disiapake, kanthi kabeh simpul disambungake, preduli yen kita ngerti alamat IP lan mulane jeneng simpul kasebut luwih dhisik, utawa wis ditugasake / diganti kanthi dinamis. Iki pancen ora mbutuhake setelan konfigurasi docker khusus lan saka sudut pandang pangembang aplikasi, ora ana bedane antarane mlaku ing lingkungan sing disebarake utawa mlaku ing lingkungan lokal. :nonode@nohost. Sampeyan bisa maca liyane babagan iki ing dokumentasi.

Sanajan penanganan rumit saka owah-owahan topologi bisa ditindakake liwat implementasine khusus MyApp.Listener, ana uga tansah kasus pinggiran ngendi iki watesan perpustakaan lan konfigurasi biases mbuktekaken dadi cornerstones saka implementasine. Ora apa-apa, mung njupuk ing ndhuwur libcluster, sing luwih umum, utawa malah nangani kluster tingkat rendah dhewe. Sasaran saka perpustakaan kode iki ora kanggo nutupi saben skenario bisa, nanging nggunakake skenario paling umum tanpa pain rasah lan cumbersome copy-paste.

Wigati: ing titik iki ing asli ana tembung "Sugeng clustering!", Lan Yandex, karo kang aku nerjemahake (aku ora kudu mbukak liwat kamus dhewe), nawakake kula pilihan "Happy clustering!" Mbokmenawa ora bisa mbayangno terjemahan sing luwih apik, utamane amarga kahanan geopolitik saiki.

Source: www.habr.com

Add a comment