فی الحال ٹیسٹنگ جاری ہے: مکمل ہونے پر GitHub کوڈ کھول دیا جائے گا۔

Ticketing سرور کی تعیناتی

ماحول
شیل
موڈ
bash
کلائنٹ کنکشن کی مثال
rust
nc کے ساتھ فوری ٹیسٹ
bash

ماحولیاتی متغیرات

سرور کی ترتیب مکمل طور پر ماحولیاتی متغیرات کے ذریعے کی جاتی ہے۔ کلیدیں بڑے/چھوٹے حروف سے آزاد ہیں، خالی قدر کو غیر ترتیب شدہ سمجھا جاتا ہے، اور flag طرز کی قدریں صرف 1/true/yes/on پر سچ ہوتی ہیں۔ Docker امیج scratch پر مبنی ہے، اس لیے ترتیب مکمل طور پر ماحولیاتی متغیرات کے ذریعے، بغیر کسی کنفیگ فائل کے، دی جاتی ہے۔

ماحولیاتی متغیرڈیفالٹتفصیل
PORT5225سنگل موڈ میں سننے کا پورٹ۔ کلسٹر موڈ میں نظر انداز — اس کی بجائے CLUSTER_SELF کا پورٹ استعمال ہوتا ہے
SOCKET_BIND0.0.0.0سننے کا پتہ
CLIENT_TOKENS(کوئی نہیں)کلائنٹ تصدیقی ٹوکنز کی کوما سے علیحدہ فہرست۔ اگر سیٹ نہ ہو تو خالی ٹوکن کی اجازت ہے
CLUSTER_SELF(کوئی نہیں)اس نوڈ کا اعلان شدہ پتہ، host:port۔ اس کی موجودگی کلسٹر موڈ فعال کرتی ہے
CLUSTER_PEERS(کوئی نہیں)ہر نوڈ کے اعلان شدہ پتوں کی کوما سے علیحدہ فہرست۔ بالکل 3 یا 5، ہر نوڈ پر ایک ہی ترتیب، self کو شامل ہونا لازم
CLUSTER_TOKENS(کوئی نہیں)پیئر سے پیئر تصدیقی ٹوکنز کی کوما سے علیحدہ فہرست
TLS_CERT / TLS_KEY(کوئی نہیں)سرٹیفکیٹ/پرائیویٹ کلید PEM فائلوں کے راستے — TLS فعال کرنے کے لیے دونوں کو ساتھ سیٹ کریں
TLS_CA(کوئی نہیں)پیئر سرٹیفکیٹس کی تصدیق کے لیے CA — اگر سیٹ نہ ہو تو سسٹم ٹرسٹ اسٹور پر واپس جاتا ہے
TLS_SKIP_VERIFYfalseپیئر سرٹیفکیٹ کی تصدیق چھوڑ دیں — صرف ٹیسٹ کے لیے
DOCKERfalseکلسٹر موڈ میں اندرونی سننے کے پورٹس کو 5225/6225 پر مقرر کرتا ہے — سرکاری امیج میں پہلے سے سیٹ
DEBUGبلڈ پر منحصر1/true ڈیبگ لاگنگ فعال کرتا ہے

مکمل اصولوں (پورٹ اخذ کرنا، اعلان شدہ پتے، بغیر تعطل ٹوکن کی تبدیلی وغیرہ) کے لیے ترتیب (ماحولیاتی متغیرات) دیکھیں۔

سنگل بمقابلہ کلسٹر

  • سنگل (1 نوڈ): CLUSTER_* کے بغیر، نوڈ اکیلا چلتا ہے۔ سب سے تیز، لیکن دوبارہ آغاز پر مختصر تعطل ہوتا ہے، اور حالت میموری میں ہے اس لیے دوبارہ آغاز پر ضائع ہو جاتی ہے (lease حفاظتی جال ہے)۔
  • کلسٹر (بلا تعطل): 3 یا 5 نوڈز۔ نوڈز Raft اتفاقِ رائے کے ذریعے ایک ہی لاک حالت میں شریک ہوتے ہیں — صرف قائد درخواستیں سنبھالتا ہے، اور ہر حالت کی تبدیلی صرف اکثریت کی کمٹ کے بعد ہی حتمی ہوتی ہے۔ اگر قائد ختم ہو جائے، تو 0.5-1 سیکنڈ میں نیا قائد منتخب ہوتا ہے، اور جب تک اکثریت زندہ ہے، لاک کی حالت اور سروس چلتی رہتی ہے۔ مکمل وضاحت کے لیے یہ کیسے کام کرتا ہے اور پروٹوکول (کلسٹر) دیکھیں۔
  • ہر کلسٹر نوڈ کلائنٹ پورٹ کے علاوہ ایک Raft پورٹ (کلائنٹ پورٹ + 1000) پر بھی سنتا ہے — اپنے فائر وال میں دونوں پورٹس کھولیں۔

Kubernetes کلسٹر تعیناتیاں StatefulSet + headless Service استعمال کرتی ہیں۔ ہر pod کو ایک مستحکم DNS نام دیں (ticketing-0.ticketing…، ticketing-1.ticketing…)، ان ناموں کو CLUSTER_PEERS میں ڈالیں، اور ہر pod کا CLUSTER_SELF downward API (metadata.name) کے ذریعے خودکار طور پر انجیکٹ کریں۔

بلا تعطل دوبارہ آغاز (رولنگ)

ایک بنیادی اصول ہے — اکثریت ہمیشہ زندہ رہنی چاہیے (3 میں سے ایک وقت میں زیادہ سے زیادہ 1 نیچے)۔

  1. پہلے فالوورز کو ایک ایک کر کے دوبارہ شروع کریں۔ جیسے ہی کوئی دوبارہ شروع کیا گیا نوڈ نقل یا اسنیپ شاٹ کے ذریعے پکڑ لے، اگلے پر جائیں۔
  2. آخر میں، قائد کو نیچے لے جائیں — 0.5-1 سیکنڈ میں ایک نیا منتخب ہو جاتا ہے، اور کلائنٹس شفاف طریقے سے منتقل ہو جاتے ہیں۔
  3. کسی بند کیے گئے نوڈ کو دوبارہ اوپر لانا اسے فالوور کے طور پر دوبارہ شامل کر دیتا ہے۔

تفصیلی مراحل کے لیے بلا تعطل دوبارہ آغاز (رولنگ) طریقہ کار دیکھیں۔

حوالہ

  • امیج: sarolab/ticketing · Github: saro-lab/ticketing
  • کلائنٹ (broker) کے ساتھ ہر نوڈ کا پتہ رجسٹر کریں تاکہ یہ خودکار طور پر failover کر سکے۔ زبان کے مخصوص استعمال کے لیے لائبریریز دیکھیں۔