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.
O qədər şanslı oldu ki erlanqxoş sintaksisi və ətrafında şırıngaya görə seçdiyimiz , birinci dərəcəlidir.
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
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
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
Bu konfiqurasiya ilə tətbiq Monastır iradə MyApp.Listener.on_state_change/2
%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: :rehashing
→ status: :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@nohost
Və ya :node@host
Və 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
İ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
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