ڪلستر → سادو OTP ڪلستر مينيجمينٽ

لڳ ڀڳ هر ڪامياب ڪاروباري ايپليڪيشن جلد يا بعد ۾ هڪ مرحلي ۾ داخل ٿئي ٿي جتي افقي اسڪيلنگ جي ضرورت هوندي آهي. ڪيترين ئي صورتن ۾، توهان صرف هڪ نئين مثال شروع ڪري سگهو ٿا ۽ لوڊ اوسط کي گهٽائي سگهو ٿا. پر اتي به گهٽ ننڍا ڪيس آهن جتي اسان کي پڪ ڪرڻ جي ضرورت آهي ته مختلف نوڊس هڪ ٻئي جي باري ۾ ڄاڻن ٿا ۽ ڪم جي لوڊ کي احتياط سان ورهائي رهيا آهن.

ڪلستر → سادو OTP ڪلستر مينيجمينٽ

اهو ايترو خوش قسمت نڪتو ته ايرلانگ، جنهن کي اسان ان جي خوشگوار نحو ۽ ان جي چوڌاري hype لاءِ چونڊيو آهي، هڪ فرسٽ ڪلاس آهي ورهايل نظام جي حمايت. نظريي ۾، هي آواز مڪمل طور تي معمولي آهي:

مختلف نوڊس تي عملن جي وچ ۾ پيغام، گڏوگڏ لنڪس ۽ مانيٽر جي وچ ۾، شفاف آهي [...]

عملي طور تي، هر شيء ٿورو وڌيڪ پيچيده آهي. ورهايل ايرلانگ ترقي ڪئي وئي جڏهن "ڪنٽينر" جو مطلب آهي وڏي لوهه جي دٻي جو سامان شپنگ لاء، ۽ "ڊاڪر" صرف لانگشورمن لاء هڪ مترادف هو. IN IP4 اتي ڪيترائي غير آباد ايڊريس هئا، نيٽ ورڪ جي ڀڃڪڙي عام طور تي ڪيبل ذريعي چوڪن جي ڪري ٿي، ۽ پيداوار واري نظام جو اوسط اپ ٽائيم ڏهاڪن ۾ ماپيو ويو.

هاڻي اسان سڀ ناقابل يقين حد تائين خودمختاري، پيڪيج ٿيل، ۽ ورهايل هلائيندڙ آهيون ايرلانگ هڪ ماحول ۾ جتي متحرڪ IP پتي وڏي بي ترتيب جي اصول تي هٿ ڪيا ويا آهن، ۽ نوڊس ظاهر ۽ غائب ٿي سگهن ٿا شيڊولر جي کاٻي هيل جي وهم تي. ورهايل هلندڙ هر منصوبي ۾ بوائلر پليٽ ڪوڊ جي انبار کان بچڻ لاء ايرلانگدشمني واري ماحول کي منهن ڏيڻ لاءِ، مدد جي ضرورت آهي.

ويچاري: مون کي خبر آهي ته اتي آهي libcluster. اهو واقعي ٿڌو آهي، ان ۾ هڪ هزار تارن کان مٿي آهي، ليکڪ ڪميونٽي ۾ مشهور آهي، ۽ اهو سڀ ڪجهه. جيڪڏهن ڪلستر ٺاهڻ ۽ برقرار رکڻ لاءِ هن پيڪيج پاران پيش ڪيل طريقا توهان لاءِ ڪافي آهن، مان توهان لاءِ خوش آهيان. بدقسمتي سان، مون کي وڌيڪ ضرورت آهي. مان تفصيل سان سيٽ اپ کي ڪنٽرول ڪرڻ چاهيان ٿو ۽ ڪلستر جي بحالي واري ٿيٽر ۾ ٻاهران تماشو نه ٿيڻ چاهيان ٿو.

گه

مون کي ذاتي طور تي هڪ لائبريري جي ضرورت هئي جيڪا ڪلستر جو انتظام سنڀالي وٺندي ۽ هيٺيون خاصيتون هونديون:

  • نوڊس جي سخت ڪوڊ ٿيل لسٽ ۽ خدمتن جي ذريعي متحرڪ دريافت ٻنهي سان شفاف ڪم ايرلانگ;
  • هر ٽوپولوجي جي تبديلي لاءِ مڪمل طور تي فنڪشنل ڪال بڪ (نوڊ اتي، نوڊ هتي، نيٽ ورڪ عدم استحڪام، تقسيم)؛
  • ڊگھي ۽ مختصر نالن سان ڪلستر شروع ڪرڻ لاءِ شفاف انٽرفيس، جيئن ته :nonode@nohost;
  • ڊاکر سپورٽ باڪس مان ٻاهر، بغير انفراسٽرڪچر ڪوڊ لکڻ جي.

جنهنڪري جو مطلب اهو آهي ته مون بعد ۾ ايپليڪيشن کي مقامي طور تي آزمايو :nonode@nohost، يا استعمال ڪندي مصنوعي طور تي ورهايل ماحول ۾ test_cluster_task، مان صرف هلڻ چاهيان ٿو docker-compose up --scale my_app=3 ۽ ڏسو ته اهو ڪيئن عمل ڪري ٿو ٽن مثالن کي ڊاکر ۾ بغير ڪنهن ڪوڊ تبديلين جي. مان پڻ چاهيان ٿو منحصر ايپليڪيشنون جهڙوڪ 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, جيڪو وڌيڪ عام-مقصد آهي، يا ان کان به گهٽ-سطح ڪلستر پاڻ کي سنڀاليو. هن ڪوڊ لائبريري جو مقصد هر ممڪن منظرنامن کي ڍڪڻ نه آهي، پر غير ضروري درد ۽ پيچيده ڪاپي پيسٽ کان سواء سڀ کان وڌيڪ عام منظر استعمال ڪرڻ آهي.

نوٽ: هن نقطي تي اصل ۾ اهو جملو هو “Happy clustering!”، ۽ Yandex، جنهن سان مان ترجمو ڪريان ٿو (مون کي پاڻ کي ڊڪشنري ذريعي وڃڻ جي ضرورت ناهي)، مون کي اختيار ڏنو ته ”Happy clustering! ان کان بهتر ترجمي جو تصور ڪرڻ شايد ناممڪن آهي، خاص ڪري موجوده جيو پوليٽيڪل صورتحال جي روشنيءَ ۾.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو