Cloître -> gestion aisée des clusters OTP

Presque chaque application commerciale réussie entre tôt ou tard dans une phase où une mise à l'échelle horizontale est requise. Dans de nombreux cas, vous pouvez simplement démarrer une nouvelle instance et réduire la charge moyenne. Mais il y a des cas moins triviaux où nous devons nous assurer que les différents nœuds se connaissent et distribuent avec précision la charge de travail.


Cloître


Il se trouve que erlang , que nous avons choisi pour sa belle syntaxe et son battage médiatique, a un support de première classe pour les systèmes distribués . En théorie, cela semble généralement trivial:


La messagerie entre les processus sur différents nœuds, ainsi qu'entre les liens et les moniteurs est transparente [...]

En pratique, les choses sont un peu plus compliquées. L' erlang distribué a été développé lorsque «conteneur» signifiait une si grande boîte en fer pour le transport, et «docker» était simplement synonyme de chargeur de port. Dans IP4, il y avait de nombreuses adresses inoccupées, dans les lacunes du réseau - les rats qui étaient rongés étaient généralement à blâmer, et le temps de disponibilité moyen d'un système de production était mesuré pendant des décennies.


, , 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: :rehashingstatus: :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, , . , , , -.




Remarque: à ce stade de l'original se trouvait la phrase «Happy clustering!», Et Yandex, que je traduis (pas pour grimper moi-même dans les dictionnaires), m'a proposé l'option «Happy cluster!» La meilleure traduction, surtout à la lumière de la situation géopolitique actuelle, est peut-être impossible à imaginer.


All Articles