Бараг бүх амжилттай бизнесийн програмууд эрт орой хэзээ нэгэн цагт хэвтээ масштаблах шаардлагатай үе шатанд ордог. Ихэнх тохиолдолд та зүгээр л шинэ жишээ эхлүүлж, ачааллын дундажийг бууруулж болно. Гэхдээ өөр өөр зангилаанууд бие биенийхээ талаар мэдэж, ажлын ачааллыг сайтар хуваарилах шаардлагатай тийм ч өчүүхэн тохиолдлууд байдаг.
Энэ нь үнэхээр азтай зүйл болсон эрлан, бидний аятайхан синтакс, шуугиан тарьсан тул сонгосон нь нэгдүгээр зэрэглэлийн
Өөр өөр зангилаа дээрх процессууд, түүнчлэн холбоосууд болон мониторуудын хооронд дамжих мессеж нь ил тод [...]
Практикт бүх зүйл арай илүү төвөгтэй байдаг. Тархсан эрлан "контейнер" гэдэг нь тээвэрлэлтийн зориулалттай том төмөр хайрцаг, "докер" гэдэг нь ердөө л урт эрэгчин гэсэн утгатай ижил утгатай байх үед бүтээгдсэн. IN IP4 Олон тооны эзэнгүй хаягууд байсан, сүлжээний тасалдал нь ихэвчлэн хархнууд кабелийг зажлахаас үүдэлтэй байдаг бөгөөд үйлдвэрлэлийн системийн дундаж ажиллах хугацааг хэдэн арван жилээр хэмждэг.
Одоо бид бүгдээрээ гайхалтай бие дааж, савлаж, тарааж ажиллаж байна эрлан Динамик IP хаягууд нь маш санамсаргүй байдлын зарчмаар тараагддаг, зангилаанууд нь төлөвлөгчийн зүүн өсгийт дур зоргоороо гарч ирэх ба алга болдог орчинд. Түгээмэл ажиллаж байгаа төсөл болгонд овоолсон кодоос зайлсхийхийн тулд эрлан, дайсагнасан орчинтой тэмцэхийн тулд тусламж шаардлагатай.
тайлбар: Байгааг би мэдэж байна libcluster
шаардлага
Би хувьдаа кластерын удирдлагыг хариуцах, дараах шинж чанаруудтай номын сан хэрэгтэй байсан.
- зангилааны хатуу кодлогдсон жагсаалт болон үйлчилгээгээр дамжуулан динамик нээлтийн аль алинд нь ил тод ажиллах эрлан;
- топологийн өөрчлөлт болгонд бүрэн ажиллагаатай буцаан дуудлага хийх (зангилаа энд, зангилаа энд, сүлжээний тогтворгүй байдал, хуваагдал);
- -тэй адил урт ба богино нэртэй кластер эхлүүлэхэд зориулсан ил тод интерфейс
:nonode@nohost
; - Докерын дэмжлэг нь дэд бүтцийн код бичих шаардлагагүй.
Сүүлийнх нь би програмыг дотооддоо туршиж үзсэний дараа гэсэн үг юм :nonode@nohost
, эсвэл зохиомлоор тархсан орчинд ашиглан test_cluster_task
docker-compose up --scale my_app=3
ямар ч кодын өөрчлөлтгүйгээр docker дээр гурван тохиолдлыг хэрхэн гүйцэтгэж байгааг хараарай. Би мөн адил хамааралтай програмуудыг хүсч байна mnesia
- топологи өөрчлөгдөхөд хөшигний ард тэд кластерыг програмаас нэмэлт цохилтгүйгээр шууд сэргээдэг.
Хумсчин Энэ нь кластерийг дэмжихээс эхлээд кофе хийх хүртэл бүх зүйлийг хийх боломжтой номын сан байхаар төлөвлөөгүй байв. Энэ нь боломжит бүх тохиолдлыг хамрах зорилготой мөнгөн сум биш, эсвэл онолчдын үзэж байгаагаар академик бүрэн шийдэл байх болно. CS энэ нэр томъёонд оруулах. Энэхүү номын сан нь маш тодорхой зорилготойгоор бүтээгдсэн боловч тийм ч том биш ажлаа төгс гүйцэтгэдэг. Энэ зорилго нь орон нутгийн хөгжлийн орчин болон дайсагнасан саваар дүүрэн тархсан уян хатан орчныг бүрэн ил тод болгох явдал юм.
Сонгосон хандлага
Хумсчин Дэвшилтэт хэрэглэгчид шууд ажиллуулах замаар кластерын угсрах, засвар үйлчилгээ хийх ажлыг гараар хийх боломжтой боловч програм хэлбэрээр ажиллуулахаар төлөвлөж байна. 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
Дээрх параметрүүд нь шууд утгаараа дараахь утгатай. Хумсчин OTP програмд ашигладаг :my_app
, ашигладаг erlang үйлчилгээний нээлт зангилааг холбохын тулд дор хаяж гурваас доошгүй ба MyApp.Listener
модуль (хэрэгжүүлж байна @behaviour Cloister.Listener
Энэхүү тохиргооны тусламжтайгаар програм Хумсчин байх болно MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, энэ нь: "Сайн уу, кластер угсарч байна" гэсэн үг.
Ихэнх тохиолдолд суурилуулалт consensus: 3
оновчтой, учир нь бид илүү олон зангилаа холбогдоно гэж найдаж байсан ч буцаан залгалт дамжих болно status: :rehashing
→ status: :up
шинээр нэмэгдсэн эсвэл устгасан аливаа зангилаа дээр.
Хөгжүүлэлтийн горимд эхлэх үед та зүгээр л тохируулах хэрэгтэй consensus: 1
и Хумсчин түүнийг хараад кластерын угсралтыг хүлээхийг баяртайгаар алгасах болно :nonode@nohost
болон :node@host
болон :[email protected]
- зангилаа хэрхэн тохируулагдсанаас хамаарна (:none | :shortnames | :longnames
).
Түгээмэл хэрэглээний менежмент
Вакуумд байдаггүй тархсан програмууд нь ихэвчлэн тархсан хамаарлыг агуулдаг, тухайлбал mnesia
. Бидэнд ижил дуудлагаас тэдний дахин тохиргоог хийхэд хялбар байдаг on_state_change/2
. Жишээлбэл, энд хэрхэн дахин тохируулах талаар дэлгэрэнгүй тайлбарласан болно mnesia
нисэх үед
Ашиглалтын гол давуу тал Хумсчин Энэ нь топологийн өөрчлөлтийн дараа кластерыг дахин бүтээхэд шаардлагатай бүх үйлдлүүдийг гүйцэтгэдэг хамар доор. Аппликейшн нь IP хаягууд болон зангилааны нэрийг урьдчилан мэдэж байгаа эсэх, эсвэл динамикаар хуваарилагдсан/өөрчлөгдсөн эсэхээс үл хамааран бүх зангилаа холбогдсон, аль хэдийн бэлтгэсэн тархсан орчинд ажилладаг. Энэ нь докерын тохиргооны тусгай тохиргоог огт шаарддаггүй бөгөөд програм хөгжүүлэгчийн үүднээс авч үзвэл тархсан орчинд ажиллах эсвэл дотоод орчинд ажиллах хоёрын хооронд ялгаа байхгүй. :nonode@nohost
. Та энэ талаар дэлгэрэнгүй уншиж болно
Хэдийгээр өөрчлөн хэрэгжүүлснээр топологийн өөрчлөлтийг нарийн төвөгтэй зохицуулах боломжтой MyApp.Listener
, эдгээр номын сангийн хязгаарлалтууд болон тохиргооны хэвийсэн байдал нь хэрэгжилтийн тулгын чулуу болж нотлогдох захын тохиолдол үргэлж байж болно. Зүгээр дээ, дээрхийг л ав libcluster
, энэ нь илүү ерөнхий зориулалттай, эсвэл бүр доод түвшний кластерийг өөрөө зохицуулдаг. Энэхүү кодын номын сангийн зорилго нь боломжит бүх хувилбарыг хамрах биш, харин хамгийн түгээмэл хувилбарыг шаардлагагүй өвдөлт, хуулж буулгах үйлдлүүдгүйгээр ашиглах явдал юм.
Тайлбар: Энэ үед эх хувилбарт "Аз жаргалтай кластер!" гэсэн хэллэг байсан бөгөөд миний орчуулдаг Yandex (би өөрөө толь бичгүүдийг үзэх шаардлагагүй) надад "Аз жаргалтай кластер!" гэсэн сонголтыг санал болгосон. Ялангуяа өнөөгийн геополитикийн нөхцөл байдлаас харахад илүү сайн орчуулгыг төсөөлөхийн аргагүй юм.
Эх сурвалж: www.habr.com