Deyarli har bir muvaffaqiyatli biznes ilovasi ertami-kechmi gorizontal o'lchov talab qilinadigan bosqichga kiradi. Ko'p hollarda siz shunchaki yangi misolni boshlashingiz va o'rtacha yukni kamaytirishingiz mumkin. Ammo turli tugunlarning bir-biri haqida bilishini va ish yukini ehtiyotkorlik bilan taqsimlashini ta'minlashimiz kerak bo'lgan kamroq ahamiyatsiz holatlar ham mavjud.
Bu juda omadli bo'lib chiqdi erlang, biz o'zining yoqimli sintaksisi va atrofidagi shov-shuv uchun tanlagan, birinchi darajaga ega
Turli tugunlardagi jarayonlar o'rtasida, shuningdek havolalar va monitorlar o'rtasida o'tadigan xabar shaffof [...]
Amalda, hamma narsa biroz murakkabroq. Tarqalgan erlang "konteyner" yuk tashish uchun katta temir qutini anglatganda ishlab chiqilgan va "doker" oddiygina dengiz qirg'oqchisining sinonimi edi. IN IP4 ko'plab bo'sh manzillar bor edi, tarmoqdagi uzilishlar odatda kalamushlar kabel orqali chaynash tufayli yuzaga kelgan va ishlab chiqarish tizimining o'rtacha ish vaqti o'nlab yillar davomida o'lchangan.
Endi biz hammamiz o'zimizni nihoyatda ta'minlaymiz, paketlanganmiz va taqsimlanamiz erlang dinamik IP-manzillar katta tasodifiylik printsipi asosida uzatiladigan muhitda va tugunlar rejalashtiruvchining chap tovonining xohishiga ko'ra paydo bo'lishi va yo'qolishi mumkin. Taqsimlangan har bir loyihada qoziq kodlarining to'planishiga yo'l qo'ymaslik uchun erlang, dushman muhitga qarshi kurashish uchun yordam kerak.
nota: Men borligini bilaman libcluster
talablar
Menga shaxsan kerak bo'lgan narsa klasterni boshqarishni o'z zimmasiga oladigan va quyidagi xususiyatlarga ega bo'lgan kutubxona edi:
- qattiq kodlangan tugunlar ro'yxati va xizmatlar orqali dinamik kashfiyot bilan shaffof ish erlang;
- har bir topologiya o'zgarishi uchun to'liq funktsional qayta qo'ng'iroq qilish (u erda tugun, bu erda tugun, tarmoqning beqarorligi, bo'linishlar);
- kabi uzun va qisqa nomlar bilan klasterni ishga tushirish uchun shaffof interfeys
:nonode@nohost
; - Infratuzilma kodini yozmasdan Docker qo'llab-quvvatlashi qutidan tashqarida.
Ikkinchisi, dasturni mahalliy sifatida sinab ko'rganimdan so'ng, degan ma'noni anglatadi :nonode@nohost
, yoki sun'iy ravishda tarqatilgan muhitda foydalanish test_cluster_task
docker-compose up --scale my_app=3
va hech qanday kodni o'zgartirmasdan dockerda uchta misolni qanday bajarishini ko'ring. Men shunga o'xshash qaram ilovalarni ham xohlayman mnesia
- topologiya o'zgarganda, ular sahna ortida klasterni ilovadan qo'shimcha zarbalarsiz jonli ravishda qayta quradilar.
Monastir Klasterni qo'llab-quvvatlashdan tortib kofe tayyorlashgacha bo'lgan hamma narsaga qodir kutubxona bo'lish uchun mo'ljallanmagan. Bu barcha mumkin bo'lgan holatlarni qamrab olishni maqsad qilgan kumush o'q emas yoki nazariyotchilarning fikricha, akademik jihatdan to'liq yechim bo'lishi mumkin. CS ushbu atamaga kiriting. Ushbu kutubxona juda aniq maqsadga xizmat qilish uchun mo'ljallangan, lekin unchalik katta bo'lmagan ishini mukammal bajaring. Bu maqsad mahalliy rivojlanish muhiti va dushman konteynerlar bilan to'la taqsimlangan elastik muhit o'rtasida to'liq shaffoflikni ta'minlash bo'ladi.
Tanlangan yondashuv
Monastir Ilg'or foydalanuvchilar to'g'ridan-to'g'ri ishga tushirish orqali klasterni yig'ish va texnik xizmat ko'rsatish bilan qo'lda ishlashlari mumkin bo'lsa-da, dastur sifatida ishga tushirish uchun mo'ljallangan. Cloister.Manager
maqsadli ilovaning supervayzer daraxtida.
Ilova sifatida ishga tushirilganda, kutubxona tayanadi config
, undan quyidagi asosiy qiymatlarni o'qiydi:
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
Yuqoridagi parametrlar tom ma'noda quyidagilarni anglatadi: Monastir OTP ilovasi uchun ishlatiladi :my_app
, foydalanadi erlang xizmati kashfiyoti tugunlarni ulash uchun, kamida uchta, va MyApp.Listener
modul (amalga oshirish @behaviour Cloister.Listener
Ushbu konfiguratsiya bilan dastur Monastir bo'ladi MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, bu: "Salom, klaster yig'ildi" degan ma'noni anglatadi.
Ko'pgina hollarda, o'rnatish consensus: 3
optimal hisoblanadi, chunki ko'proq tugunlar ulanishini kutsak ham, qayta qo'ng'iroq amalga oshiriladi status: :rehashing
β status: :up
har qanday yangi qo'shilgan yoki olib tashlangan tugunlarda.
Rivojlanish rejimini ishga tushirganda, siz shunchaki sozlashingiz kerak consensus: 1
ΠΈ Monastir ko'rganida, klaster yig'ilishini kutishni xursandchilik bilan o'tkazib yuboradi :nonode@nohost
yoki :node@host
yoki :[email protected]
- tugun qanday tuzilganiga qarab (:none | :shortnames | :longnames
).
Tarqalgan ilovalarni boshqarish
Vakuumda bo'lmagan taqsimlangan ilovalar odatda taqsimlangan bog'liqliklarni o'z ichiga oladi, masalan mnesia
. Biz uchun bir xil qayta qo'ng'iroq orqali ularning qayta konfiguratsiyasini boshqarish oson on_state_change/2
. Bu erda, masalan, qanday qilib qayta konfiguratsiya qilishning batafsil tavsifi mnesia
parvozda
Foydalanishning asosiy afzalligi Monastir topologiyani o'zgartirgandan so'ng klasterni qayta tiklash uchun barcha kerakli operatsiyalarni bajarishidir kaput ostida. Ilova oddiygina oldindan tayyorlab qo'yilgan taqsimlangan muhitda ishlaydi, barcha tugunlar ulangan, biz IP-manzillar va shuning uchun tugun nomlarini oldindan bilishimiz yoki ular dinamik ravishda tayinlangan/o'zgartirilganligidan qat'i nazar. Bu mutlaqo maxsus docker konfiguratsiya sozlamalarini talab qilmaydi va dastur ishlab chiqaruvchisi nuqtai nazaridan, taqsimlangan muhitda ishlash yoki mahalliy muhitda ishlash o'rtasida hech qanday farq yo'q. :nonode@nohost
. Bu haqida ko'proq ma'lumotni o'qishingiz mumkin
Garchi topologiya o'zgarishlarini murakkab ishlov berish maxsus dastur orqali mumkin bo'lsa-da MyApp.Listener
, kutubxonaning ushbu cheklovlari va konfiguratsiyaning noto'g'riligi amalga oshirishning asosi bo'lib qoladigan holatlar har doim bo'lishi mumkin. Yaxshi, yuqoridagini oling libcluster
, bu umumiy maqsadli yoki hatto past darajadagi klasterni o'zingiz boshqaring. Ushbu kodlar kutubxonasining maqsadi barcha mumkin bo'lgan stsenariyni qamrab olish emas, balki keraksiz og'riqlar va noqulay nusxa ko'chirish-joylashsiz eng keng tarqalgan stsenariydan foydalanishdir.
Eslatma: Bu vaqtda asl nusxada "Happy klastering!" iborasi bor edi va men tarjima qiladigan Yandex (men o'zim lug'atlarni ko'rib chiqishga majbur emasman) menga "Happy klastering!" variantini taklif qildi. Ayniqsa, hozirgi geosiyosiy vaziyat nuqtai nazaridan yaxshiroq tarjimani tasavvur qilishning iloji yo'q.
Manba: www.habr.com