Cloister → manajemén klaster OTP basajan

Ampir unggal aplikasi bisnis suksés sooner atanapi engké asup kana fase dimana skala horizontal diperlukeun. Dina seueur kasus, anjeun ngan saukur tiasa ngamimitian conto énggal sareng ngirangan rata-rata beban. Tapi aya ogé kasus kirang trivial dimana urang kudu mastikeun yén titik béda nyaho ngeunaan silih tur taliti ngadistribusikaeun workload nu.

Cloister → manajemén klaster OTP basajan

Tétéla jadi untung éta erlang, nu urang milih pikeun sintaksis pikaresepeun sarta hype sabudeureun éta, boga kelas munggaran rojongan pikeun sistem disebarkeun. Dina tiori, ieu disada sagemblengna trivial:

Pesen anu dikirimkeun antara prosés dina titik anu béda, ogé antara tautan sareng monitor, transparan […]

Dina prakték, sagalana geus saeutik leuwih pajeulit. Disebarkeun erlang ieu dimekarkeun nalika "wadah" dimaksudkan kotak beusi badag pikeun pengiriman barang, sarta "docker" éta saukur sinonim pikeun longshoreman. DI IP4 aya loba alamat unoccupied, jaringan ngarecah biasana disababkeun ku beurit nyapek ngaliwatan kabel, sarta uptime rata-rata sistem produksi diukur dina dekade.

Ayeuna urang sadayana incredibly swasembada, rangkep, jeung ngajalankeun disebarkeun erlang dina lingkungan dimana alamat IP dinamis dibikeun kaluar dina prinsip randomness hébat, sarta titik bisa muncul tur ngaleungit di whim tina keuneung kénca scheduler nu. Pikeun nyingkahan tumpukan kode boilerplate di unggal proyék ngajalankeun disebarkeun erlang, pikeun merangan lingkungan mumusuhan, pitulung diperlukeun.

nyarios: Abdi terang aya libcluster. Éta saé pisan, éta gaduh langkung ti sarébu béntang, pangarangna kasohor di masarakat, sareng seueur deui. Upami metodeu anu ditawarkeun ku pakét ieu pikeun nyiptakeun sareng ngajaga klaster cukup pikeun anjeun, kuring bahagia pikeun anjeun. Hanjakal, kuring peryogi langkung seueur. Abdi hoyong ngadalikeun setelan sacara rinci sareng henteu janten panongton luar dina téater reorganisasi klaster.

sarat

Anu dibutuhkeun ku kuring pribadi nyaéta perpustakaan anu bakal ngokolakeun manajemén kluster sareng bakal ngagaduhan sipat ieu:

  • karya transparan kalawan duanana daptar hard-disandi titik sarta kapanggihna dinamis ngaliwatan jasa erlang;
  • callback fungsi pinuh pikeun unggal robah topologi (titik dinya, titik di dieu, instability jaringan, pamisah);
  • panganteur transparan pikeun launching klaster kalawan ngaran panjang tur pondok, sakumaha kalayan :nonode@nohost;
  • Docker ngadukung out of the box, tanpa kedah nyerat kode infrastruktur.

Anu terakhir hartosna saatos kuring nguji aplikasi sacara lokal di :nonode@nohost, atanapi dina lingkungan anu disebarkeun sacara artifisial ngagunakeun test_cluster_task, Kuring ngan hayang lumpat docker-compose up --scale my_app=3 tur tingal kumaha eta executes tilu instansi di docker tanpa parobahan kode. Abdi ogé hoyong aplikasi gumantung sapertos mnesia - nalika topologi robah, balik layar aranjeunna ngawangun deui kluster hirup tanpa tajongan tambahan tina aplikasi.

Cloister teu dimaksudkeun pikeun perpustakaan sanggup sagalana ti ngarojong klaster pikeun nyieun kopi. Éta sanés pélor pérak anu tujuanana pikeun nutupan sadaya kasus anu mungkin, atanapi janten solusi anu lengkep sacara akademis dina hartos yén para ahli téori ti CS nempatkeun kana istilah ieu. Perpustakaan ieu dirarancang pikeun tujuan anu jelas pisan, tapi ngalakukeun padamelan anu henteu ageung-ageung sampurna. Tujuanana ieu bakal nyadiakeun transparansi lengkep antara lingkungan pangwangunan lokal jeung lingkungan elastis disebarkeun pinuh ku wadah mumusuhan.

Pendekatan anu dipilih

Cloister dimaksudkeun pikeun ngajalankeun salaku hiji aplikasi, sanajan pamaké canggih tiasa dianggo kalayan assembly tur pamaliharaan tina klaster sacara manual ku jalan langsung Cloister.Manager dina tangkal pengawas aplikasi target.

Nalika dijalankeun salaku aplikasi, perpustakaan ngandelkeun config, ti mana éta maca nilai dasar ieu:

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 di luhur hartosna sacara harfiah kieu: Cloister dipaké pikeun aplikasi OTP :my_app, ngagunakeun kapanggihna jasa erlang pikeun nyambungkeun titik, sahenteuna tilu, jeung MyApp.Listener modul (implementasi @behaviour Cloister.Listener) dikonpigurasi pikeun nampa béwara ngeunaan parobahan topologi. Katerangan lengkep ngeunaan konfigurasi lengkep tiasa dipendakan dina dokuméntasi.

Kalayan konfigurasi ieu, aplikasi Cloister bakal peluncuran sacara bertahap, delaying prosés ngamimitian aplikasi utama nepi ka konsensus ngahontal (tilu titik disambungkeun tur disambungkeun, sakumaha dina conto di luhur.) Hal ieu méré aplikasi utama kasempetan pikeun nganggap yén lamun dimimitian, kluster geus sadia. Iraha waé topologina robih (bakal seueur di antarana, sabab titik-titik henteu ngamimitian sacara sinkron), pawang bakal disebat. MyApp.Listener.on_state_change/2. Seringna urang ngalakukeun tindakan nalika nampi pesen status %Cloister.Monitor{status: :up}, nu hartina: "Halo, kluster geus dirakit."

Dina kalolobaan kasus, instalasi consensus: 3 optimal sabab sanajan urang ngaharepkeun leuwih titik nyambungkeun, callback bakal ngaliwatan status: :rehashingstatus: :up dina sagala titik nu anyar ditambahkeun atawa dihapus.

Nalika ngamimitian dina modeu pamekaran, anjeun ngan ukur kedah nyetél consensus: 1 и Cloister bakal happily skip ngadagoan assembly klaster nalika anjeunna ningali :nonode@nohostatawa :node@hostatawa :[email protected] - gumantung kana kumaha node dikonpigurasikeun (:none | :shortnames | :longnames).

Manajemén Aplikasi disebarkeun

Aplikasi anu disebarkeun henteu dina vakum biasana kalebet katergantungan anu disebarkeun, sapertos mnesia. Ieu gampang pikeun urang pikeun nanganan reconfiguration maranéhanana ti callback sarua on_state_change/2. Di dieu, contona, pedaran lengkep ngeunaan kumaha carana reconfigure mnesia dina laleur di dokuméntasi Cloister.

Kauntungan utama ngagunakeun Cloister éta ngalakukeun sagala operasi diperlukeun pikeun ngawangun deui klaster sanggeus parobahan topologi handapeun tiung. Aplikasi ngan saukur dijalankeun dina lingkungan anu disebarkeun anu tos disiapkeun, sareng sadaya titik disambungkeun, paduli naha urang terang alamat IP sareng ku kituna nami node sateuacanna, atanapi aranjeunna parantos ditugaskeun / dirobih sacara dinamis. Ieu ngabutuhkeun leres pisan henteu aya setélan konfigurasi docker khusus sareng tina sudut pandang pamekar aplikasi, henteu aya bédana antara ngajalankeun di lingkungan anu disebarkeun atanapi ngajalankeun di lokal. :nonode@nohost. Anjeun tiasa maca langkung seueur ngeunaan ieu dina dokuméntasi.

Sanajan penanganan kompléks parobahan topologi mungkin ngaliwatan palaksanaan custom MyApp.Listener, meureun aya salawasna kasus ujung dimana watesan perpustakaan ieu sarta biases konfigurasi ngabuktikeun jadi cornerstones palaksanaan. Henteu kunanaon, ukur nyandak anu di luhur libcluster, nu leuwih umum-tujuan, atawa malah nanganan kluster-tingkat low sorangan. Tujuan tina perpustakaan kode ieu teu nutupan unggal skenario mungkin, tapi ngagunakeun skenario paling umum tanpa nyeri teu perlu jeung pajeulit salinan-témpél.

Catetan: Dina titik ieu dina aslina aya frasa "Senang clustering!", sarta Yandex, nu kuring narjamahkeun (Kuring teu kudu ngaliwatan kamus sorangan), nawarkeun kuring pilihan "Senang clustering!" Panginten teu mungkin pikeun ngabayangkeun tarjamahan anu langkung saé, khususna dina kaayaan geopolitik ayeuna.

sumber: www.habr.com

Tambahkeun komentar