Claustro -> fácil gerenciamento de cluster OTP

Quase todos os aplicativos de negócios bem-sucedidos, mais cedo ou mais tarde, entram em uma fase quando a escala horizontal é necessária. Em muitos casos, você pode simplesmente iniciar uma nova instância e reduzir a carga média. Mas há casos menos triviais em que devemos garantir que nós diferentes se conheçam e distribuam com precisão a carga de trabalho.


Claustro


Aconteceu que erlang , que escolhemos por sua boa sintaxe e hype, tem suporte de primeira classe para sistemas distribuĂ­dos . Em teoria, isso soa geralmente trivial:


Mensagens entre processos em diferentes nĂłs, bem como entre links e monitores, sĂŁo transparentes [...]

Na prática, as coisas são um pouco mais complicadas. O erlang distribuído foi desenvolvido quando "contêiner" significava uma caixa de ferro tão grande para transporte, e "docker" era simplesmente sinônimo de carregador de porta. No IP4, havia muitos endereços desocupados, nas lacunas da rede - os ratos que eram roídos eram geralmente os culpados, e o tempo de atividade médio de um sistema de produção foi medido por décadas.


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




Nota: neste momento, no original, estava a frase “Happy clustering!”, E o Yandex, que eu traduzi (para não subir nos dicionários), me ofereceu a opção “Happy cluster!” Talvez a melhor tradução, especialmente à luz da atual situação geopolítica, seja impossível de imaginar.


All Articles