Kreuzgang -> einfache OTP-Clusterverwaltung

Fast jede erfolgreiche Geschäftsanwendung tritt früher oder später in eine Phase ein, in der eine horizontale Skalierung erforderlich ist. In vielen Fällen können Sie einfach eine neue Instanz starten und die durchschnittliche Last reduzieren. Es gibt jedoch weniger triviale Fälle, in denen wir sicherstellen müssen, dass verschiedene Knoten einander kennen und die Arbeitslast genau verteilen.


Kloster


So kam es, dass erlang , das wir aufgrund seiner netten Syntax und seines Hype ausgewählt haben, erstklassige Unterstützung für verteilte Systeme bietet . Theoretisch klingt dies im Allgemeinen trivial:


Das Messaging zwischen Prozessen auf verschiedenen Knoten sowie zwischen Links und Monitoren ist transparent [...]

In der Praxis sind die Dinge etwas komplizierter. Distributed Erlang wurde entwickelt, als „Container“ eine so große Eisenkiste für den Transport bedeutete und „Docker“ einfach ein Synonym für einen Hafenlader war. In IP4 gab es viele unbesetzte Adressen, in Netzwerklücken - Ratten, die genagt wurden, waren normalerweise schuld, und die durchschnittliche Betriebszeit eines Produktionssystems wurde über Jahrzehnte gemessen.


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




Hinweis: Zu diesem Zeitpunkt im Original stand der Satz „Happy Clustering!“, Und Yandex, den ich übersetze (um die Wörterbücher nicht selbst zu erklimmen), bot mir die Option „Happy Clustering!“ An. Vielleicht ist die beste Übersetzung, insbesondere angesichts der aktuellen geopolitischen Situation, nicht vorstellbar.


All Articles