Cloister → идоракунии кластери оддии OTP

Қариб ҳар як барномаи муваффақи тиҷорат дер ё зуд ба марҳилае ворид мешавад, ки миқёси уфуқӣ талаб карда мешавад. Дар бисёр ҳолатҳо, шумо метавонед танҳо як мисоли навро оғоз кунед ва миёнаи сарбориро кам кунед. Аммо ҳолатҳои камтар ночиз низ ҳастанд, ки мо бояд боварӣ ҳосил кунем, ки гиреҳҳои гуногун дар бораи якдигар медонанд ва сарбории корро бодиққат тақсим мекунанд.

Cloister → идоракунии кластери оддии OTP

Он кадар хушбахтона баромад эрланг, ки мо онро барои синтаксиси гуворо ва табъи атрофи он интихоб кардем, дараҷаи аввал дорад. дастгирии системаҳои тақсимшуда. Дар назария, ин комилан ночиз садо медиҳад:

Паём байни равандҳо дар гиреҳҳои гуногун, инчунин байни пайвандҳо ва мониторҳо шаффоф аст [...]

Дар амал, ҳама чиз каме мураккабтар аст. Тақсим карда шудааст эрланг вақте таҳия шудааст, ки "контейнер" як қуттии оҳании калон барои интиқолро дошт ва "докер" танҳо як синоними марди соҳилӣ буд. ДАР IP4 суроғаҳои бекорхобида зиёд буданд, танаффусҳои шабака одатан дар натиҷаи хоидани каламушҳо тавассути кабел ба амал меоянд ва вақти миёнаи кори системаи истеҳсолӣ дар даҳсолаҳо чен карда мешуд.

Ҳоло ҳамаи мо ба таври бениҳоят худкифо ҳастем, бастабандӣ ва тақсимшуда кор мекунем эрланг дар муҳите, ки суроғаҳои IP динамикӣ аз рӯи принсипи тасодуфии бузург дода мешаванд ва гиреҳҳо метавонанд бо хоҳиши пошнаи чапи нақшакаш пайдо шаванд ва нопадид шаванд. Барои роҳ надодан ба тӯдаҳои рамзи дегхона дар ҳар як лоиҳаи тақсимшуда эрланг, ба мукобили мухити душманона ёрй расондан лозим аст.

эрод гирифтан: Ман медонам, ки вуҷуд дорад libcluster. Ин дар ҳақиқат аҷиб аст, он зиёда аз ҳазор ситора дорад, муаллиф дар ҷомеа машҳур аст ва ҳама чизҳо. Агар усулҳои пешниҳодкардаи ин баста барои эҷод ва нигоҳдории кластер барои шумо кофӣ бошанд, ман аз шумо хурсандам. Мутаассифона, ба ман бештар лозим аст. Ман мехоҳам, ки танзимотро ба таври муфассал назорат кунам ва дар театри азнавсозии кластер тамошобини беруна набошам.

талаботи

Он чизе ки ба ман шахсан лозим буд, китобхонае буд, ки идоракунии кластерро ба ӯҳда мегирад ва дорои хосиятҳои зерин буд:

  • кори шаффоф бо ҳам рӯйхати сахт-рамзи гиреҳҳо ва кашфи динамикӣ тавассути хидматҳо эрланг;
  • занги пурраи функсионалӣ барои ҳар як тағирёбии топология (гиреҳ дар он ҷо, гиреҳ дар ин ҷо, ноустувории шабака, тақсимот);
  • интерфейси шаффоф барои оғози кластер бо номҳои дароз ва кӯтоҳ, мисли бо :nonode@nohost;
  • Дастгирии Docker аз қуттӣ бидуни навиштани рамзи инфрасохтор.

Охирин маънои онро дорад, ки пас аз он ки ман барномаро дар маҳаллӣ санҷидам :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: :rehashingstatus: :up дар ҳама гиреҳи нав иловашуда ё хориҷшуда.

Ҳангоми оғоз дар реҷаи рушд, шумо танҳо бояд танзим кунед consensus: 1 и Клоун Вақте ки ӯ мебинад, хушбахтона интизории васлшавии кластерро мегузаронад :nonode@nohostё :node@hostё :[email protected] - вобаста ба он ки гиреҳ чӣ гуна танзим шудааст (:none | :shortnames | :longnames).

Идоракунии барномаҳои тақсимшуда

Барномаҳои тақсимшуда, ки дар холӣ нестанд, одатан вобастагии тақсимшударо дар бар мегиранд, масалан mnesia. Барои мо осон аст, ки танзими дубораи онҳоро аз ҳамон занги бозпас иҷро кунем on_state_change/2. Дар ин ҷо, масалан, тавсифи муфассали чӣ гуна аз нав танзим кардан аст mnesia дар парвоз хуччатхо Клоун.

Бартарии асосии истифода Клоун он аст, ки он тамоми амалиёти заруриро барои барқарор кардани кластер пас аз тағир додани топология иҷро мекунад зери капот. Барнома танҳо дар муҳити тақсимшудаи аллакай омодашуда кор мекунад ва ҳамаи гиреҳҳо пайваст аст, новобаста аз он ки мо суроғаҳои IP ва аз ин рӯ номҳои гиреҳро пешакӣ медонем ё онҳо динамикӣ таъин/тағйир дода шудаанд. Ин комилан танзимоти конфигуратсияи махсуси докерро талаб намекунад ва аз нуқтаи назари таҳиягари барнома, байни кор кардан дар муҳити тақсимшуда ё кор кардан дар муҳити маҳаллӣ фарқият вуҷуд надорад. :nonode@nohost. Шумо метавонед дар ин бора бештар хонед хуччатхо.

Гарчанде ки коркарди мураккаби тағироти топология тавассути татбиқи фармоишӣ имконпазир аст MyApp.Listener, метавонад ҳамеша ҳолатҳои канорӣ вуҷуд дошта бошад, ки дар он маҳдудиятҳои китобхона ва ғаразҳои конфигуратсия сангҳои асосии татбиқ мебошанд. Ин хуб аст, танҳо дар боло libcluster, ки ҳадафи умумӣ аст, ё ҳатто кластери сатҳи пастро худатон идора кунед. Ҳадафи ин китобхонаи кодҳо фаро гирифтани ҳар як сенарияи имконпазир нест, балки истифодаи сенарияи маъмултарин бидуни дарди нолозим ва нусхабардорӣ-часбондан аст.

Эзоҳ: Дар ин лаҳза дар нусхаи аслӣ ибораи “Кластерсозии хушбахтӣ!” мавҷуд буд ва Яндекс, ки ман бо он тарҷума мекунам (ман худам аз луғатҳо гузаштан лозим нест) ба ман варианти “Кластеркунии хушбахтона!” -ро пешниҳод кард. Тасаввур кардани тарҷумаи беҳтар, бахусус бо назардошти вазъи кунунии геополитикӣ шояд ғайриимкон аст.

Манбаъ: will.com

Илова Эзоҳ