Cloister → sadə OTP çoxluq idarəçiliyi

Demək olar ki, hər bir uğurlu biznes tətbiqi gec-tez üfüqi miqyaslaşdırmanın tələb olunduğu mərhələyə daxil olur. Bir çox hallarda, sadəcə olaraq yeni bir nümunəyə başlaya və orta yükü azalda bilərsiniz. Ancaq fərqli qovşaqların bir-biri haqqında bilməsini və iş yükünü diqqətlə paylamasını təmin etməli olduğumuz daha az əhəmiyyətsiz hallar da var.

Cloister → sadə OTP çoxluq idarəçiliyi

O qədər şanslı oldu ki erlanqxoş sintaksisi və ətrafında şırıngaya görə seçdiyimiz , birinci dərəcəlidir. paylanmış sistemlər üçün dəstək. Teorik olaraq, bu tamamilə mənasız səslənir:

Fərqli qovşaqlardakı proseslər, eləcə də keçidlər və monitorlar arasında ötürülən mesaj şəffafdır [...]

Praktikada hər şey bir az daha mürəkkəbdir. Paylanmış erlanq "konteyner" daşınma üçün böyük dəmir qutu nəzərdə tutulduğu zaman hazırlanmışdır və "doker" sadəcə olaraq dəniz sahilində işləyənlərin sinonimi idi. IN IP4 çoxlu boş ünvanlar var idi, şəbəkə fasilələri adətən siçovulların kabeli çeynəməsi nəticəsində yaranırdı və istehsal sisteminin orta işləmə müddəti onilliklərlə ölçülürdü.

İndi biz hamımız inanılmaz dərəcədə özümüzü təmin edirik, paketlənmişik və paylanmış vəziyyətdəyik erlanq dinamik IP ünvanlarının böyük təsadüfilik prinsipi ilə verildiyi və qovşaqların planlaşdırıcının sol dabanının şıltaqlığı ilə görünə və yoxa çıxa biləcəyi bir mühitdə. Paylanmış hər layihədə çalışan kod yığınlarının qarşısını almaq üçün erlanq, düşmən mühitlə mübarizə aparmaq üçün kömək lazımdır.

Qeyd: Var olduğunu bilirəm libcluster. Bu, həqiqətən gözəldir, onun mindən çox ulduzu var, müəllif cəmiyyətdə məşhurdur və bütün bunlar. Klaster yaratmaq və saxlamaq üçün bu paketin təklif etdiyi üsullar sizin üçün kifayətdirsə, mən sizin üçün xoşbəxtəm. Təəssüf ki, daha çox şeyə ehtiyacım var. Mən təfərrüatlı şəkildə quraşdırmaya nəzarət etmək və klasterin yenidən qurulması teatrında kənar tamaşaçı olmamaq istəyirəm.

Tələblər

Şəxsən mənə lazım olan şey klasterin idarə olunmasını öz üzərinə götürəcək və aşağıdakı xüsusiyyətlərə malik olan bir kitabxana idi:

  • həm qovşaqların sərt kodlu siyahısı, həm də xidmətlər vasitəsilə dinamik kəşf ilə şəffaf iş erlanq;
  • hər topologiya dəyişikliyi üçün tam funksional geri çağırış (orada qovşaq, burada node, şəbəkə qeyri-sabitliyi, bölünmələr);
  • kimi uzun və qısa adları olan klasterin işə salınması üçün şəffaf interfeys :nonode@nohost;
  • İnfrastruktur kodunu yazmadan Docker dəstəyi.

Sonuncu o deməkdir ki, tətbiqi yerli olaraq sınaqdan keçirdikdən sonra :nonode@nohost, və ya süni şəkildə paylanmış mühitdə istifadə edərək test_cluster_task, mən sadəcə qaçmaq istəyirəm docker-compose up --scale my_app=3 və heç bir kod dəyişikliyi olmadan docker-də üç nümunəni necə icra etdiyinə baxın. kimi asılı proqramları da istəyirəm mnesia - topologiya dəyişdikdə, pərdə arxasında proqramdan heç bir əlavə zərbə olmadan klasteri canlı olaraq yenidən qururlar.

Monastır klasteri dəstəkləməkdən tutmuş qəhvə hazırlamağa qədər hər şeyə qadir olan bir kitabxana olmaq nəzərdə tutulmamışdı. Bu, bütün mümkün halları əhatə etməyi qarşısına məqsəd qoyan gümüş güllə deyil və ya nəzəriyyəçilərin fikrincə, akademik baxımdan tam bir həlldir. CS bu terminə daxil edin. Bu kitabxana çox aydın bir məqsədə xidmət etmək üçün hazırlanmışdır, lakin o qədər də böyük olmayan işini mükəmməl şəkildə yerinə yetirir. Bu məqsəd yerli inkişaf mühiti ilə düşmən konteynerlərlə dolu paylanmış elastik mühit arasında tam şəffaflığı təmin etmək olacaq.

Seçilmiş yanaşma

Monastır qabaqcıl istifadəçilər birbaşa işləməklə klasterin yığılması və saxlanması ilə əl ilə işləyə bilsələr də, proqram kimi işlədilməsi nəzərdə tutulur. Cloister.Manager hədəf tətbiqin nəzarətçi ağacında.

Tətbiq kimi işlədildikdə, kitabxana etibar edir config, ondan aşağıdakı əsas dəyərləri oxuyur:

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

Yuxarıdakı parametrlər sözün əsl mənasında aşağıdakıları ifadə edir: Monastır OTP tətbiqi üçün istifadə olunur :my_app, istifadə edir erlang xidmət kəşfi qovşaqları birləşdirmək üçün, ən azı üç və MyApp.Listener modulu (həyata keçirən @behaviour Cloister.Listener) topologiya dəyişiklikləri haqqında bildirişlər almaq üçün konfiqurasiya edilmişdir. Tam konfiqurasiyanın ətraflı təsviri ilə tanış ola bilərsiniz sənədləşdirmə.

Bu konfiqurasiya ilə tətbiq Monastır iradə mərhələlərlə işə salın, konsensus əldə olunana qədər əsas tətbiqin işə salınması prosesinin təxirə salınması (yuxarıdakı nümunədə olduğu kimi üç qovşaq birləşdirilir və birləşdirilir.) Bu, əsas tətbiqə işə başlayanda klasterin artıq mövcud olduğunu güman etmək imkanı verir. Hər dəfə topologiya dəyişdikdə (onların çoxu olacaq, çünki qovşaqlar tam sinxron başlamaz), işləyici çağırılacaq. MyApp.Listener.on_state_change/2. Çox vaxt status mesajı aldığımız zaman bir hərəkət edirik %Cloister.Monitor{status: :up}, yəni: "Salam, klaster yığılıb."

Əksər hallarda quraşdırma consensus: 3 optimaldır, çünki daha çox qovşağın bağlanmasını gözləsək belə, geri çağırış keçəcək status: :rehashingstatus: :up hər hansı yeni əlavə edilmiş və ya çıxarılan qovşaqda.

İnkişaf rejimində başladıqda, sadəcə təyin etməlisiniz consensus: 1 и Monastır görəndə klaster montajını gözləməyi xoşbəxtliklə atlayacaq :nonode@nohostVə ya :node@hostVə ya :[email protected] - node necə konfiqurasiya edildiyindən asılı olaraq (:none | :shortnames | :longnames).

Paylanmış Tətbiq İdarəetmə

Vakuumda olmayan paylanmış proqramlara adətən paylanmış asılılıqlar daxildir, məsələn mnesia. Eyni geri çağırışdan onların yenidən konfiqurasiyasını idarə etmək bizim üçün asandır on_state_change/2. Burada, məsələn, yenidən konfiqurasiyanın ətraflı təsviri verilmişdir mnesia tez daxil sənədləşdirmə Monastır.

İstifadənin əsas üstünlüyü Monastır topologiya dəyişikliyindən sonra klasterin yenidən qurulması üçün bütün lazımi əməliyyatları yerinə yetirməsidir başlıq altında. Tətbiq sadəcə olaraq, IP ünvanlarını və buna görə də qovşaq adlarını əvvəlcədən bildiyimizdən və ya onların dinamik olaraq təyin edilməsindən/dəyişikliyindən asılı olmayaraq, bütün qovşaqlar birləşdirilmiş, artıq hazırlanmış paylanmış mühitdə işləyir. Bunun üçün heç bir xüsusi docker konfiqurasiya parametrləri tələb olunmur və proqram tərtibatçısının nöqteyi-nəzərindən paylanmış mühitdə işləmək və yerli mühitdə işləmək arasında heç bir fərq yoxdur. :nonode@nohost. Bu barədə ətraflı oxuya bilərsiniz sənədləşdirmə.

Baxmayaraq ki, topologiya dəyişikliklərinin kompleks şəkildə idarə edilməsi fərdi tətbiq vasitəsilə mümkündür MyApp.Listener, bu kitabxana məhdudiyyətləri və konfiqurasiya meyllərinin həyata keçirilməsinin təməl daşları olduğu sübut olunduğu hər zaman kənar hallar ola bilər. Yaxşı, yuxarıdakıları götürün libcluster, daha ümumi məqsədlidir və ya hətta aşağı səviyyəli klasteri özünüz idarə edin. Bu kod kitabxanasının məqsədi bütün mümkün ssenariləri əhatə etmək deyil, lazımsız ağrı və çətin surətdə yapışdırmaq olmadan ən ümumi ssenaridən istifadə etməkdir.

Qeyd: Bu nöqtədə orijinalda “Xoşbəxt klasterləşmə!” ifadəsi var idi və tərcümə etdiyim Yandex (lüğətləri özüm keçməli deyiləm) mənə “Xoşbəxt klasterləşmə!” variantını təklif etdi. Xüsusilə də indiki geosiyasi vəziyyət fonunda daha yaxşı tərcümə təsəvvür etmək bəlkə də mümkün deyil.

Mənbə: www.habr.com

Добавить комментарий