نشر خادم Ticketing
متغيرات البيئة
يتم إعداد الخادم بالكامل عبر متغيرات البيئة. المفاتيح غير حساسة لحالة الأحرف، والقيمة الفارغة تُعامَل كغير مضبوطة، والقيم الشرطية صحيحة فقط عند 1/true/yes/on. صورة Docker مبنية على scratch، لذا يُحقَن الإعداد بالكامل عبر متغيرات البيئة دون ملف إعداد.
| متغير البيئة | الافتراضي | الوصف |
|---|---|---|
PORT | 5225 | منفذ الاستماع في الوضع المفرد. يُتجاهل في وضع العنقود، حيث يُستخدم بدلًا منه منفذ CLUSTER_SELF |
SOCKET_BIND | 0.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_VERIFY | false | تخطي التحقق من شهادة القرين — للاختبار فقط |
DOCKER | false | يثبّت منافذ الاستماع الداخلية على 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 معطلة كحد أقصى في كل مرة).
- أعد تشغيل الأتباع أولًا، واحدًا تلو الآخر. بمجرد أن تلحق عقدة أُعيد تشغيلها عبر التكرار أو اللقطة، انتقل إلى التالية.
- أخيرًا، أنزل القائد — يُنتخب قائد جديد خلال 0.5-1 ثانية، وينتقل العملاء بشفافية.
- إعادة تشغيل عقدة معطلة تُعيدها كتابع.
راجع إجراء إعادة التشغيل المتدرّج للخطوات التفصيلية.
مرجع
- الصورة:
sarolab/ticketing· Github: saro-lab/ticketing - سجّل عنوان كل عقدة لدى العميل (الوسيط) ليتحول تلقائيًا عند الأعطال. راجع المكتبات للاستخدام الخاص بكل لغة.