البرمجيات والمنصّات
المجالُ كاملًا، وبقيّةُ القدرات ضمنه.
تكاملٌ مصمَّمٌ ليوم تفشل فيه الشبكة، لا ليوم ينجح فيه العرضُ التوضيحي وحسب.
التكاملُ هو جعلُ أنظمةٍ منفصلة تتصرّف كنظامٍ واحد: بوّابةُ واجهات برمجة (API Gateway) تقدّم سطحًا متماسكًا، ووسيطُ رسائل (Message Broker) يفصل المنتِجين عن المستهلِكين، ومحوّلاتٌ تتحدّث بروتوكولَ كلّ نظام. نصمّم العقود، ونبني التدفّقات، ونزوّدها بأدوات القياس بحيث يصبح الفشلُ مرئيًّا وهو ما يزال صغيرًا.
نمطُ الإخفاق واحدٌ دائمًا، ويُكتشف دائمًا في الإنتاج. تكاملٌ مبنيٌّ على استدعاء HTTP مجرّد بلا مفتاحٍ للعملية المتكرّرة الآمنة (Idempotency)، وبلا سياسةِ إعادةِ محاولة، وبلا طابورٍ للرسائل الميتة، سيفقد الرسائلَ أوّلَ مرّةٍ تتعثّر فيها الشبكة، أو يكرّرها أوّلَ مرّةٍ يُعاد فيها استدعاءٌ انتهت مهلته. وكلا الأمرين صامت. تعرفون بهما من فارقٍ في المطابقة بعد أسابيع.
إن صدق أكثرُ من واحدةٍ ممّا يلي، فهذه عادةً نقطةُ البداية الصحيحة.
| المُخرَج | ما يحتويه |
|---|---|
| مواصفاتُ الـ API | عقودُ OpenAPI أو AsyncAPI مُرقَّمة الإصدارات بأمثلةٍ عملية وسياسةِ إيقافٍ، منشورةً حيث يجدها مستهلكوكم وشركاؤكم فعلًا. |
| إعدادُ البوّابة والوسيط | بنيةٌ تحتية ككود للبوّابة والوسيط والمحوّلات، مُطبَّقةً عبر خطّ التسليم لديكم لا بالنقر داخل لوحةِ تحكّم. |
| تدفّقاتُ التكامل | التكاملاتُ العاملة بمفاتيح العملية المتكرّرة الآمنة وسياسةِ إعادةِ المحاولة وطوابيرِ الرسائل الميتة وإجراءِ إعادةِ تشغيلٍ يستطيع المناوبُ اتّباعه. |
| حزمةُ المراقبة | تتبّعٌ عبر حدود الخدمات، ولوحاتُ استهلاكٍ لكلّ مستهلك، وتنبيهاتٌ مربوطة بأنماط الفشل الممكنة فعلًا لكلّ تدفّق. |
مرجعٌ لا قالب. بيئتُك هي التي تقرّر أيَّ أجزائه ينطبق، وبأيّ ترتيبٍ يصل.
تُتَّفق المستهدفاتُ معك قبل بدء العمل، ويُرفَع التقريرُ عليها طوال مدّته.
كلٌّ منها يجيب سؤالًا مختلفًا. REST للأسطح الواسعة القابلة للتخزين المؤقّت والموجّهة للأطراف الخارجيّة. وGraphQL حيث يحتاج العملاءُ تشكيلَ استعلاماتهم وتقبلون كلفةَ التخزين المؤقّت والتعقيد. وgRPC للاستدعاءات الداخلية الكثيفة بين الخدمات. والأحداثُ حيث لا ينبغي أن يعرف المنتِجُ من يستهلك. ومعظمُ البيئات الحقيقية تستخدم عدّةً منها، والخطأُ اختيارُ واحدٍ لكلّ شيء.
التغييراتُ الإضافية تدخل الإصدارَ الحالي؛ والتغييراتُ الكاسرة تأخذ إصدارًا جديدًا، ويعمل الاثنان معًا ريثما ينتقل المستهلكون. وهذا يستلزم معرفةَ من هم مستهلكوكم، ولذلك تهمّ تحليلاتُ الاستهلاك لكلّ مستهلك أكثر ممّا تبدو. وسياسةُ الإيقاف بتواريخ منشورة سلفًا هي ما يجعل الانتقال ممكنًا أصلًا.
يكفي HTTP حين يستطيع المستدعي انتظارَ الجواب انتظارًا مفيدًا وإعادةَ المحاولة بأمان. ويستحقّ الوسيطُ كلفتَه التشغيلية حين يحتمل أن يكون المستهلك متوقّفًا، أو حين يجب امتصاصُ ذُرى الحمل، أو حين تحتاج عدّةُ أنظمة الحدثَ نفسه. وهو يضيف كذلك نظامًا عليكم تشغيله، وهذا جديرٌ بالقول صراحةً قبل ظهوره على المخطّط.
لا يوجد في النظم الموزّعة تسليمٌ مرّةً واحدةً بالضبط. يوجد تسليمٌ مرّةً على الأقل، مع معالجةٍ متكرّرة آمنة، وينتج عنهما معًا أثرُ المرّة الواحدة. ولهذا يحمل كلُّ مستهلكٍ نبنيه مفتاحَ عمليةٍ متكرّرة آمنة واستراتيجيةً لإزالة التكرار. ومن يَعِد بالمرّة الواحدة على مستوى النقل فهو يصف شيئًا آخر.
غالبًا نعم. الخياراتُ هي مناظرُ قاعدة بياناتٍ مع تتبّع التغيير، وتبادلُ ملفاتٍ بمجموع تحقّقٍ وبيانِ محتوى، وأتمتةُ الشاشات كملاذٍ أخير، وطبقةُ إحلالٍ تدريجي تضع عقدًا مستقرًّا أمام النظام القديم. ولكلٍّ خصائصُ فشلٍ مختلفة سنسمّيها لكم، لأنّ المحوّلَ الهشّ يحتاج مراقبةً مبنيّةً فيه من اليوم الأول.
استيثاقٌ وتخويلٌ عند البوّابة بـ OAuth 2.0 أو TLS المتبادل، واعتماداتٌ وحدودُ معدّلٍ لكلّ مستهلك، وتحقّقٌ من الطلب مقابل المخطّط المنشور، وأسرارٌ محفوظة في مخزنٍ مُدار لا في ملفات الإعداد. أمّا ضوابطُ مستوى الحمولة، مثل تعمية الحقول والتوقيع وتقليل البيانات، فتُقرَّر بحسب ما يعبر الحدَّ فعلًا لا تُطبَّق تطبيقًا موحّدًا.
المجالُ كاملًا، وبقيّةُ القدرات ضمنه.
هندسةُ منتجات SaaS متعدّدة المستأجرين، حيث تُحسم التعدّديةُ والقياسُ والاستحقاقاتُ والطرحُ المرحلي في التصميم قبل أوّل عميلٍ مؤسسي.
تطبيقاتُ ويب تُبنى وفق ميزانيةٍ للأداء وإمكانية الوصول (Accessibility) منذ البداية: البنية، وطبقةُ الـ API، وخطُّ CI/CD، والمراقبة التي تملكونها.
أسرعُ طريقٍ إلى جوابٍ مفيد نظرةٌ قصيرةٌ محدَّدةُ النطاق على ما لديكم أصلًا.