Biara -> manajemen kluster OTP mudah

Hampir setiap aplikasi bisnis yang sukses cepat atau lambat memasuki fase ketika penskalaan horizontal diperlukan. Dalam banyak kasus, Anda cukup memulai instance baru dan mengurangi beban rata-rata. Tetapi ada beberapa kasus sepele ketika kita harus memastikan bahwa node yang berbeda saling mengetahui dan mendistribusikan beban kerja secara akurat.


Biara


Kebetulan erlang , yang kami pilih karena sintaks dan hype yang bagus, memiliki dukungan kelas satu untuk sistem terdistribusi . Secara teori, ini terdengar sepele:


Perpesanan antar proses pada node yang berbeda, serta antara tautan dan monitor bersifat transparan [...]

Dalam praktiknya, hal-hal sedikit lebih rumit. Erlang yang didistribusikan dikembangkan ketika "wadah" berarti kotak besi yang besar untuk transportasi, dan "buruh pelabuhan" hanya identik dengan port loader. Dalam IP4 ada banyak alamat yang tidak dihuni, dalam kesenjangan jaringan - tikus yang digerogoti biasanya disalahkan, dan waktu operasi rata-rata sistem produksi diukur selama beberapa dekade.


, , erlang , IP- , . , erlang, , .


: libcluster. , ,  โ€” , .  โ€”  . , , . .



, , :


  • , erlang;
  • ( , , , );
  • , :nonode@nohost;
  • , .

, , :nonode@nohost, - test_cluster_task, docker-compose up --scale my_app=3 , - . , , mnesia โ€” , - .


Cloister , : . , , , CS . , . , .



Cloister , (assembly and maintainance) , Cloister.Manager .


, config, :


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

: Cloister OTP :my_app, erlang service discovery , , MyApp.Listener ( @behaviour Cloister.Listener) . .


, Cloister , ( , .) , , . ( , ), MyApp.Listener.on_state_change/2. , %Cloister.Monitor{status: :up}, : ยซ, ยป.


consensus: 3 , , , status: :rehashing โ†’ status: :up .


, consensus: 1 Cloister , :nonode@nohost, :node@host, :node@host.domain โ€” , (:none | :shortnames | :longnames).



, mnesia. on_state_change/2. , , , mnesia Cloister.


Cloister , . , , , IP- , , , /. , :nonode@nohost. .


, MyApp.Listener, , . , libcluster, , . , , , -.




Catatan: pada titik ini dalam aslinya adalah frasa "Happy clustering!", Dan Yandex, yang saya terjemahkan (tidak memanjat kamus sendiri), menawari saya opsi "Happy cluster!" Mungkin terjemahan terbaik, terutama mengingat situasi geopolitik saat ini, tidak mungkin untuk dibayangkan.


All Articles