الخدمات المُدارة
Kafka و RabbitMQ و Redis و Keycloak - ما تحصل عليه، وما ينجو منه كل ترتيب، وكيف يتّصل بها التطبيق.
الخدمة المُدارة قطعة من البنية التي تتحدّث إليها تطبيقاتك: ذاكرة تخزين مؤقّت، أو وسيط رسائل، أو سجلّ أحداث، أو خادم تسجيل دخول. ومثل قاعدة البيانات، تُطلب بمعزل عن أي تطبيق، من صفحة الخدمات.
تنشئها المنصّة، وتُبقيها تعمل، وتعيد تشغيلها حين تتوقّف. أمّا ما تضعه فيها فهو ملكك.
هذه الأربع لا يمكن تشغيلها كتطبيقات عادية: صورة Redis أو RabbitMQ أو Kafka أو Keycloak تُرفض هناك، لأن التطبيق لا يحتفظ بشيء على القرص بين نشر وآخر.
ما المعروض
Redis 7.4. محميّ بكلمة مرور. وتُسجَّل كل عملية كتابة على القرص أيضًا، فتنجو البيانات من إعادة التشغيل.
RabbitMQ 3.13. وسيط AMQP بمستخدم واحد وكلمة مرور. الطوابير الدائمة والرسائل المستديمة تُحفظ على القرص.
Kafka 3.8. يعمل بلا ZooKeeper. لا يطلب الوسيط اسم مستخدم ولا كلمة مرور: الشبكة الخاصة هي حدّه الوحيد.
Keycloak 26.0. خادم تسجيل دخول خاص بك، مع وحدة تحكّمه الإدارية. تعيش
الـ realms والمستخدمون في PostgreSQL: قاعدة مصغّرة منخفضة الكلفة افتراضيًا، أو
مثيل مخصّص تملكه أصلًا. ويمكنك رفع سمات تسجيل الدخول الخاصة بك على هيئة
.tar.gz.
إن كان كل ما تحتاجه تسجيل الدخول لتطبيق واحد، فإن realm على Keycloak تشغّله المنصّة يكلّف أقلّ من خادم خاص بك. وهو معروض في الصفحة نفسها.
الأحجام والعُقد والسعر
الأحجام أنواع نسخ مسمّاة لكل منطقة، يُعرض كل منها مع سعره الشهري قبل النشر. والسعر لكل عقدة: ثلاث عُقد تكلّف ثلاثة أضعاف الحجم.
المنطقة التي لم تحدّد سعرًا لخدمة لا تعرضها. ويقول النموذج ذلك بدل أن يفشل عند الإرسال.
يعمل Redis و Keycloak على عقدة أو عقدتين أو ثلاث. ويعمل RabbitMQ و Kafka على عقدة أو ثلاث أو خمس.
ما ينجو منه كل ترتيب
العقدة الواحدة هي الافتراضية، وهي الترتيب المجرَّب.
تنجو من إعادة التشغيل: يحتفظ Redis و RabbitMQ و Kafka ببياناتها على القرص، ويحتفظ Keycloak ببياناته في قاعدة بياناته.
ولا تنجو من فقدان جهازها. فالبيانات على قرص ذلك الجهاز والخدمة مرتبطة به، فتصبح الخدمة غير قابلة للوصول حتى يعود الجهاز.
العُقد الإضافية ليست تحويلًا عند العطل اليوم. تُعطى تطبيقاتك دائمًا عنوان العقدة الأولى، مهما كان العدد.
- Redis. تتبع العُقد الأخرى الأولى كنسخ. ولا شيء يرقّي إحداها إن فُقدت الأولى.
- Kafka. ثلاثة وسطاء أو خمسة تشكّل عنقودًا واحدًا وتتّفق بالأغلبية، ولهذا يكون العدد فرديًا. ومع ذلك يُجري العملاء اتصالهم الأول عبر الوسيط الأول.
- RabbitMQ. تُشغَّل العُقد الإضافية، لكنها لا تُضمّ لك في عنقود واحد. شغّل عقدة واحدة.
- Keycloak. تتشارك العُقد الإضافية قاعدة البيانات نفسها، لكن العنوان يقود إلى الأولى.
إن كان على خدمة أن تنجو من فقدان جهاز، فقل ذلك قبل أن تعتمد عليها.
لا توجد نسخ احتياطية
لا تُنسخ Redis و RabbitMQ و Kafka احتياطيًا. لا تُبقِ فيها إلا ما تستطيع إعادة بنائه أو تحتمل فقدانه: ذاكرة تخزين مؤقّت، أو عمل قيد التنفيذ، أو أحداث موجودة في مكان آخر أيضًا.
الـ realms والمستخدمون في Keycloak موجودون في قاعدة PostgreSQL الخاصة به. احمِهم كما تحمي أي قاعدة بيانات.
الاتصال
على الشبكة الخاصة. تنضمّ الخدمة إلى إحدى شبكات مؤسّستك في منطقتها، تُختار عند الإنشاء. التطبيقات على تلك الشبكة تصل إليها بالعنوان الداخلي المعروض على الخدمة. أمّا التطبيقات على شبكة أخرى فلا.
بيانات الاعتماد. افتح الخدمة واختر عرض بيانات الاعتماد: سلسلة اتصال، والمستضيف، والمنفذ، والمستخدم، وكلمة المرور. وبخلاف بيانات قاعدة البيانات، يمكن عرضها مجدّدًا لاحقًا، لكل من يُسمح له بالاتصال بتلك الخدمة. وسطر الأوامر لا يطبعها أبدًا.
لا يُضبط شيء على تطبيقك نيابةً عنك. انسخ سلسلة الاتصال إلى بيئة التطبيق،
كسرّ. والاستثناء هو AI Studio: فـ Redis أو RabbitMQ أو Keycloak المربوط بمشروع
يصل هناك على هيئة REDIS_URL أو RABBITMQ_URL أو KEYCLOAK_URL. أمّا Kafka
فلا يُربط بهذه الطريقة.
Keycloak. تستخدم التطبيقات <address>/realms/<realm> كمُصدِر (issuer).
ووحدة التحكّم الإدارية على <address>/admin/.
النشر للعموم
Keycloak عامّ افتراضيًا، على عنوان خاص به، مثل أي تطبيق: فخادم تسجيل الدخول يجب أن يكون الوصول إليه ممكنًا من المتصفّح.
أمّا Redis و RabbitMQ و Kafka فخاصّة افتراضيًا في وحدة التحكّم. ونشر إحداها
يعطيها مستضيفًا ومنفذًا يمكن الوصول إليهما من الخارج. ومن سطر الأوامر تكون
الخدمة الجديدة عامّة ما لم تمرِّر --private.
ثلاثة حدود يحسن معرفتها قبل النشر:
- التشفير غير نافذ بعد. مفتاح TLS يسجّل اختيارك. و Redis أو RabbitMQ المنشور يتحدّث ببروتوكوله غير المشفَّر، محميًّا بكلمة مروره وحدها.
- أبقِ Kafka خاصًّا. ليست له كلمة مرور، والعميل خارج المنصّة يُعاد توجيهه إلى عنوان لا يوجد إلا داخلها.
- النشر يحتاج إلى رصيد. من دونه تبقى الخدمة خاصّة، و Keycloak الذي كان سيكون عامًّا يُنشأ خاصًّا.
يمكن نشر الخدمة بعد أن تصبح عاملة.
تغيير الحجم
اختر حجمًا آخر فتُعاد تشغيل العُقد واحدة تلو الأخرى. ومع عقدة واحدة يكون ذلك انقطاعًا قصيرًا.
إضافة عُقد تُنشئها. وإزالة عقدة تحذف تلك العقدة والبيانات التي كانت فيها.
الحذف
تُزال كل عقدة وكل بياناتها، ومعها بيانات الاعتماد. ولا يمكن التراجع عن ذلك.
قاعدة بيانات Keycloak لا تُحذف معه. المثيل المخصّص يُترك كما هو، والقاعدة المصغّرة يجب حذفها على حدة.
حالات حدّية يحسن معرفتها قبل أن تصادفها
تقول الخدمة إنها تعمل وترفض الاتصالات. تُعلَّم Redis و RabbitMQ و Kafka على أنها تعمل بمجرّد إنشائها، قبل أن تقبل العملاء بقليل. أعد المحاولة.
لا يجد التطبيق الخدمة. إنه على شبكة أخرى. تنضمّ الخدمة إلى شبكة واحدة؛ ضع التطبيق على الشبكة نفسها.
Kafka منشور يقبل الاتصال الأول ثم يفشل. هذا هو الحدّ الموصوف أعلاه. استخدمه من التطبيقات الموجودة على شبكته.
أزلت عقدة ثم أضفتها من جديد. تبدأ فارغة. فبياناتها السابقة ذهبت معها.