قيد الاختبار حاليًا: سيتم فتح كود GitHub عند الاكتمال.

نشر خادم Ticketing

البيئة
الصدفة (Shell)
الوضع
bash
مثال على اتصال العميل
rust
اختبار سريع باستخدام nc
bash

متغيرات البيئة

يتم إعداد الخادم بالكامل عبر متغيرات البيئة. المفاتيح غير حساسة لحالة الأحرف، والقيمة الفارغة تُعامَل كغير مضبوطة، والقيم الشرطية صحيحة فقط عند 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 يفعّل سجل التصحيح

للقواعد الكاملة (اشتقاق المنفذ، العناوين المُعلَنة، تدوير الرموز دون انقطاع، إلخ) راجع الإعداد (متغيرات البيئة).

مفرد مقابل عنقود

  • مفرد (عقدة واحدة): بدون CLUSTER_*، تعمل العقدة مستقلة. الأسرع، لكن هناك انقطاع قصير عند إعادة التشغيل، والحالة في الذاكرة فتضيع عند إعادة التشغيل (lease هي شبكة الأمان).
  • عنقود (بلا توقف): 3 أو 5 عُقد. تشارك العُقد حالة قفل واحدة عبر إجماع Raft — القائد فقط يعالج الطلبات، ولا يُثبَّت أي تغيير في الحالة إلا بعد تثبيت الأغلبية. إذا مات القائد، يُنتخب قائد جديد خلال 0.5-1 ثانية، وما دامت الأغلبية حية، تستمر حالة القفل والخدمة. راجع آلية العمل والبروتوكول (العنقود) للشرح الكامل.
  • تستمع كل عقدة في العنقود على منفذ العميل بالإضافة إلى منفذ Raft (منفذ العميل + 1000) — افتح كلا المنفذين في جدار الحماية.

تستخدم عمليات نشر عنقود Kubernetes StatefulSet + خدمة عديمة الرأس (headless). أعطِ كل حاوية (pod) اسم DNS ثابتًا (ticketing-0.ticketing…، ticketing-1.ticketing…)، وضع هذه الأسماء في CLUSTER_PEERS، واحقن CLUSTER_SELF لكل حاوية تلقائيًا عبر downward API (metadata.name).

إعادة التشغيل بلا توقف (المتدرّج)

هناك قاعدة أساسية واحدة — يجب أن تبقى الأغلبية حية دائمًا (عقدة واحدة من 3 معطلة كحد أقصى في كل مرة).

  1. أعد تشغيل الأتباع أولًا، واحدًا تلو الآخر. بمجرد أن تلحق عقدة أُعيد تشغيلها عبر التكرار أو اللقطة، انتقل إلى التالية.
  2. أخيرًا، أنزل القائد — يُنتخب قائد جديد خلال 0.5-1 ثانية، وينتقل العملاء بشفافية.
  3. إعادة تشغيل عقدة معطلة تُعيدها كتابع.

راجع إجراء إعادة التشغيل المتدرّج للخطوات التفصيلية.

مرجع