کلوسٹر → سادہ OTP کلسٹر مینجمنٹ

تقریباً ہر کامیاب کاروباری درخواست جلد یا بدیر ایک ایسے مرحلے میں داخل ہوتی ہے جہاں افقی پیمانے کی ضرورت ہوتی ہے۔ بہت سے معاملات میں، آپ آسانی سے ایک نئی مثال شروع کر سکتے ہیں اور بوجھ کی اوسط کو کم کر سکتے ہیں۔ لیکن کم معمولی معاملات بھی ہیں جہاں ہمیں یہ یقینی بنانا ہوگا کہ مختلف نوڈس ایک دوسرے کے بارے میں جانتے ہیں اور کام کے بوجھ کو احتیاط سے تقسیم کرتے ہیں۔

کلوسٹر → سادہ OTP کلسٹر مینجمنٹ

یہ اتنا خوش قسمت نکلا کہ ایرلنگ، جسے ہم نے اس کے خوشگوار نحو اور اس کے ارد گرد ہائپ کے لیے منتخب کیا ہے، اس کا پہلا درجہ ہے۔ تقسیم شدہ نظاموں کے لیے سپورٹ. نظریہ میں، یہ مکمل طور پر معمولی لگتا ہے:

مختلف نوڈس پر عمل کے ساتھ ساتھ لنکس اور مانیٹر کے درمیان پیغام گزرنا شفاف ہے […]

عملی طور پر، سب کچھ تھوڑا زیادہ پیچیدہ ہے. تقسیم کیا گیا۔ ایرلنگ اس وقت تیار کیا گیا تھا جب "کنٹینر" کا مطلب شپنگ کے لیے لوہے کا ایک بڑا ڈبہ ہوتا تھا، اور "ڈاکر" صرف لانگ شور مین کا مترادف تھا۔ میں IP4 وہاں بہت سے غیرمقبول پتے تھے، نیٹ ورک ٹوٹنا عام طور پر چوہوں کے کیبل کے ذریعے چبانے کی وجہ سے ہوتا تھا، اور پیداواری نظام کا اوسط اپ ٹائم دہائیوں میں ناپا جاتا تھا۔

اب ہم سب ناقابل یقین حد تک خود کفیل، پیکڈ، اور تقسیم شدہ چل رہے ہیں۔ ایرلنگ ایک ایسے ماحول میں جہاں متحرک آئی پی ایڈریس عظیم بے ترتیب ہونے کے اصول پر دیے جاتے ہیں، اور نوڈس شیڈیولر کی بائیں ایڑی کی خواہش پر ظاہر اور غائب ہو سکتے ہیں۔ تقسیم شدہ ہر پروجیکٹ میں بوائلر پلیٹ کوڈ کے ڈھیر سے بچنے کے لیے ایرلنگمخالف ماحول کا مقابلہ کرنے کے لیے مدد کی ضرورت ہے۔

نوٹ: میں جانتا ہوں کہ وہاں ہے۔ 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، استعمال کرتا ہے۔ ایرلنگ سروس کی دریافت نوڈس کو جوڑنے کے لیے، کم از کم تین، اور 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 پرواز میں دستاویزات کلسٹر.

استعمال کرنے کا بنیادی فائدہ کلسٹر یہ ہے کہ یہ ٹوپولوجی میں تبدیلی کے بعد کلسٹر کو دوبارہ بنانے کے لیے تمام ضروری کارروائیاں انجام دیتا ہے۔ ٹوپی کے نیچے. ایپلیکیشن پہلے سے تیار شدہ تقسیم شدہ ماحول میں چلتی ہے، تمام نوڈس منسلک ہوتے ہیں، قطع نظر اس کے کہ ہم آئی پی ایڈریس اور اس لیے نوڈ کے نام پہلے سے جانتے ہیں، یا انہیں متحرک طور پر تفویض/تبدیل کیا گیا ہے۔ اس کے لیے قطعی طور پر کوئی خاص ڈوکر کنفیگریشن سیٹنگز کی ضرورت نہیں ہے اور ایپلیکیشن ڈویلپر کے نقطہ نظر سے، تقسیم شدہ ماحول میں چلنے یا مقامی ماحول میں چلانے میں کوئی فرق نہیں ہے۔ :nonode@nohost. آپ اس کے بارے میں مزید پڑھ سکتے ہیں۔ دستاویزات.

اگرچہ ٹوپولوجی تبدیلیوں کا پیچیدہ ہینڈلنگ حسب ضرورت نفاذ کے ذریعے ممکن ہے۔ MyApp.Listener، ہمیشہ ایسے معاملات ہوسکتے ہیں جہاں لائبریری کی یہ حدود اور کنفیگریشن تعصب عمل درآمد کی بنیاد ثابت ہوتے ہیں۔ یہ ٹھیک ہے، صرف اوپر لے لو libcluster، جو زیادہ عام مقصد ہے، یا یہاں تک کہ نچلے درجے کے کلسٹر کو خود ہینڈل کریں۔ اس کوڈ لائبریری کا مقصد ہر ممکنہ منظر نامے کا احاطہ کرنا نہیں ہے، بلکہ غیر ضروری درد اور بوجھل کاپی پیسٹ کے بغیر عام ترین منظر نامے کو استعمال کرنا ہے۔

نوٹ: اس مقام پر اصل میں ایک جملہ تھا "Happy clustering!"، اور Yandex، جس کے ساتھ میں ترجمہ کرتا ہوں (مجھے خود لغات سے نہیں جانا پڑتا)، نے مجھے "Happy clustering!" کا آپشن پیش کیا۔ اس سے بہتر ترجمہ کا تصور کرنا شاید ناممکن ہے، خاص طور پر موجودہ جغرافیائی سیاسی صورتحال کی روشنی میں۔

ماخذ: www.habr.com

نیا تبصرہ شامل کریں