لماذا يهم هذا#

معظم المؤسسات التي تشتري أنظمة الاتصال أو تبنيها تنتهي بعدة أنظمة متداخلة: أداة تسويق وصندوق دعم يرسل كلاهما رسائل واتساب، ونظام إدارة عملاء ومنصة مراسلة يخزّن كلاهما جهات الاتصال، ومنتجان من استحواذ يفعلان أشياء متشابهة. والغريزة المعتادة دمجها في نظام واحد. وأحياناً يكون ذلك صواباً. وكثيراً ما يكون مكلفاً ويجعل كليهما أسوأ. تشرح هذه المادة البديل، أي ربط الأنظمة عبر واجهات منشورة ("الاتحاد")، وما يتطلبه، وما يكلّفه، واختباراً بسيطاً للاختيار بين الطريقين. وهي تنطبق بالقدر نفسه على مشترٍ يختار بين منظومة شاملة وعدة أدوات متخصصة.

لماذا قد يدمّر الدمج القيمة#

المنتجات التي تخدم جماهير مختلفة تختلف بطرق تبدو تكراراً وليست كذلك.

فأداة للمطورين وأداة لأصحاب منشآت صغيرة غير تقنيين قد ترسل كلتاهما رسائل واتساب. ودمجهما قد يُنتج منتجاً واحداً معقداً أكثر مما يحتمل الجمهور الثاني ومقيداً أكثر مما يحتمل الأول. فـ"التكرار" كان هو التكيّف مع كل جمهور.

والصيغة العامة: حين يتشارك نظامان آليةً ولا يتشاركان مستخدماً، فالآلية عَرَض والمستخدم جوهر. والتوحيد على الآلية يخاطر برمي الجوهر.

الدمج أم الاتحاد أم منظومة شاملة: المقايضات#

الدمج في نظام واحدالاتحاد (الربط عبر واجهات منشورة)شراء منظومة شاملة واحدة
ملاءمة فئات مستخدمين مختلفةضعيفة: تصميم واحد للجميعجيدة: يحتفظ كلٌّ بتصميمهتعتمد على اتساع المنظومة
اتساق البياناتقوي: قاعدة بيانات واحدةيحتاج انضباطاً: مالك واحد لكل واقعةقوي داخل المنظومة
سرعة التغييرأبطأ: إصدارات مشتركةأسرع: كلٌّ ينشر وحدهيحددها مخطط المزوّد
الكلفة التشغيليةأقل بعد الإنجازأعلى: استدعاءات شبكة وإصداراتأقل عليك؛ تُدفع في رسوم الترخيص
الخروج والاستبدالصعب: كل شيء متشابكأسهل: استبدل جزءاً كل مرةصعب: تنتقل المنظومة كلها معاً
الأنسب حينالمستخدم نفسه والعمل نفسهمستخدمون مختلفون وعملاء مشتركونفريق صغير واحتياجات معيارية

لا يوجد عمود صحيح دائماً. وبقية هذه المادة عن إتقان العمود الأوسط حين يكون هو الخيار الصحيح.

ما يتطلبه الاتحاد فعلاً#

أربعة أمور، بهذا الترتيب.

ما يتطلبه الاتحاد، بالترتيب

  1. 01عقود منشورة

    لا كود مشترك

  2. 02هوية متسقة

    من يستدعي، ونيابةً عمّن

  3. 03أعراف متسقة

    لا قاعدة بيانات مشتركة

  4. 04اتجاه سلطة واحد لكل واقعة

    مصدر حقيقة واحد بالضبط؛ والنسخ قد تتأخر

1. عقود منشورة لا كود مشترك. يعرض كل نظام واجهة موثّقة، مثل وصف OpenAPI أو مخطط أحداث (و CloudEvents أحد المعايير المفتوحة لوصف الأحداث)، ويستهلك واجهات غيره. أما المكتبات المشتركة فتُنشئ اقتراناً بمعظم كلف الدمج وقليل من فوائده، لأن أحداً لن يستطيع النشر باستقلال بعدها.

2. هوية متسقة. وهذا هو الصعب، والذي تتخطاه معظم الاتحادات. فالأنظمة التي يستدعي بعضها بعضاً تحتاج إثبات من هي ونيابةً عمّن تتصرف، مع أثر تدقيق وطريقة لسحب الصلاحية. وبدونه تحصل على أسرار مشتركة في ملفات إعداد، وهو دمج بوسيلة أخرى. انظر الهوية بين الخدمات.

3. أعراف متسقة لا قاعدة بيانات مشتركة. اتفقوا على كيفية تعريف جهة الاتصال، وصيغة التوقيتات، وشكل الأخطاء، وطريقة توقيع الاستدعاءات (webhooks). ولا تتفقوا على مخطط واحد: فذلك دمج بقبعة مختلفة.

4. اتجاه سلطة واحد لكل واقعة. فلكل قطعة بيانات نظام واحد بالضبط هو مصدر الحقيقة، ويحمل الباقون نسخاً يُسمح صراحةً بأن تتأخر قليلاً. ونظامان يعتقد كلاهما أنه يملك حالة الموافقة سيتباعدان، وقد تكتشف التباعدَ جهةٌ تنظيمية.

الاتحاد ليس "دع الأنظمة وشأنها". فالأنظمة التي لا تتشارك شيئاً ليست متحدة بل منفصلة فحسب. والاتحاد مجموعة محددة من الالتزامات المنشورة، والعمل في الالتزامات لا في الكود.

ما ينشره كل نظام، من الأسفل إلى الأعلى

  1. بياناته

    لا تُشارَك جملةً أبداً. والملكية تبقى حيث يُشغَّل النظام ويُساءل.

  2. هوية مستقرة

    شيء يستطيع نظام آخر الإشارة إليه دون معرفة كيف يُخزَّن داخلياً.

  3. عقد منشور

    الواجهة، بإصدارات وسياسة إيقاف. وهذا هو الاقتران الوحيد الموجود.

  4. جسر هوية

    كيف يقابل موضوع في نظام موضوعاً في آخر، ومن يجوز له تأكيد ذلك.

  5. سلطة مفوَّضة

    منح محدد النطاق وقابل للسحب ومحدود بمدة. نظام يعمل لآخر بإثبات.

  6. أدلة مشتركة

    أثر التدقيق العابر للحد، ليُجاب عن سؤال عبره.

الطبقة السفلى هي ما يدمّره الدمج. والطبقات الثلاث العليا هي ما يحاول الدمج شراءه عادةً، ويمكن الحصول عليها بدونه في الغالب.

نمط التفويض#

الشكل الأنفع غالباً أن يفوّض نظام إلى آخر بدل أن يكرره.

فإن كان لمنتج بيانات اعتماد صادرة ومواصفة منشورة وموزّع استدعاءات موقّعة، ولآخر أقوى نموذج لمجال بعينه، فالجواب ليس بالضرورة نقل الكود بينهما. يستطيع الأول أن يستدعي الثاني بدل إعادة تنفيذ ما يتقنه الثاني أصلاً.

لا شيء ينتقل. ويحتفظ كلاهما بجمهوره. وتصبح القدرة متاحة عبر واجهة صُممت أصلاً لتُستدعى.

نظام يعمل لآخر، بأمان

  1. 01أثبت الهوية

    لكل نظام هوية خاصة قابلة للتحقق. لا سر مشترك ولا مفتاح واجهة في ملف إعداد.

  2. 02اطلب منحاً محدد النطاق

    ضيقاً: هذا الإجراء وهذا الموضوع وهذه النافذة. والمنح الواسع لأن الضيق كان مزعجاً هو الثغرة.

  3. 03أصدره بانتهاء صلاحية

    قصير الأجل قابل للتجديد يتفوق على طويل الأجل منسي. والانتهاء هو خاصية الأمان.

  4. 04اعمل واحمل الإثبات

    كل إجراء تحت التفويض يسجّل أي منح أذن به.

  5. 05اسحب باستقلال

    سحب نظامٍ منحاً يجب ألا يقتضي تعاون الآخر، وإلا فليس سحباً.

بلا الخطوة الخامسة عندك تكامل لا اتحاد. ولا يظهر الفرق إلا يوم تريد الفصل.

كم يكلّف الاتحاد#

ليس مجانياً، والصدق في كلفته مهم:

  • استدعاءات شبكة حيث كان يكفي استدعاء دالة، بما يستتبعه من زمن استجابة وأوضاع فشل.
  • انضباط الإصدارات. فالعقد المنشور الذي يمكنك تغييره من طرف واحد ليس عقداً. والواجهات لا تُغيَّر عصر يوم جمعة.
  • نماذج قراءة مكررة. فكل نظام يحمل إسقاطاً لبيانات غيره، والإسقاطات تنجرف.
  • جهد مكرر. فقد يفعل عدة أنظمة كلٌّ نسخته مما كانت خدمة مشتركة ستفعله مرة واحدة.
  • تنسيق لكل ما يعبر الحد فعلاً.

وما تشتريه: لا تغيير منفرداً يُسقط كل شيء، ويتحرك كل منتج بوتيرته، ويحمل كلٌّ وزنه التنظيمي وحده، ويمكن استبدال أي منها أو بيعه أو إيقافه دون فكّ الآخرين.

والمقايضة مقصودة: تقبل تعقيداً تشغيلياً لتحفظ استقلال المنتجات. وهي تستحق حين تخدم المنتجات أشخاصاً مختلفين، ولا تستحق عادةً في غير ذلك. ولثلاث خدمات هي منتج واحد حقيقةً، الاتحاد عبء باسم أجمل.

ما يكلّفهما يشتريه
الاستدعاءاتاستدعاءات شبكة حيث كان يكفي استدعاء دالةلا تغيير منفرداً يُسقط كل شيء
التغييرانضباط الإصدارات: لا تغيير للعقود عصر يوم جمعةيتحرك كل منتج بوتيرته
البياناتنماذج قراءة مكررة تنجرفيحمل كلٌّ وزنه التنظيمي وحده
الجهدجهد مكرر، وتنسيق عبر الحديمكن استبدال أي جزء أو بيعه أو إيقافه وحده
يستحق حين تخدم المنتجات أشخاصاً مختلفين. ولثلاث خدمات هي منتج واحد حقيقةً، هو عبء باسم أجمل.

الاختبار#

قبل دمج نظامين، اسأل: هل لهما المستخدم نفسه؟

لا المشتري نفسه. ولا المؤسسة نفسها. بل الشخص نفسه، يؤدي العمل نفسه، في اليوم نفسه.

فإن كان الجواب نعم، فالدمج صحيح عادةً: إذ يكلّفك الفصل. وإن كان لا، ففكّر في الاتحاد، وكفّ عن قياس التكرار كأنه هدر خالص.

قبل دمج نظامين

  1. 01هل لهما المستخدم نفسه — الشخص نفسه، يؤدي العمل نفسه، في اليوم نفسه؟
    نعم
    الدمج صحيح عادةً: فالفصل يكلّفك
    لا
    فكّر في الاتحاد، وكفّ عن عدّ التكرار هدراً خالصاً
لا المشتري نفسه، ولا المؤسسة نفسها.

الخلاصة#

انشر العقود، وجسّر الهوية، وفوّض بمنح محددة النطاق قابلة للسحب، وشارك الأدلة عبر الحد. وأبقِ كل قطعة بيانات حيث تُساءل. واقبل شيئاً من التكرار ثمناً للفشل المستقل والتغيير المستقل، واسأل بصدق هل تستطيع فصل نظام واحد غداً.

إلى أين بعد ذلك#

المصادر

كل ادعاء يستحق التحقق، مع مكان للتحقق منه.

  1. OpenAPI SpecificationOpenAPI Initiative
  2. CloudEventsCloud Native Computing Foundation
  3. Standard WebhooksStandard Webhooks
  4. Bounded Contextmartinfowler.com
  5. RFC 8693: OAuth 2.0 Token ExchangeIETF