الهندسة
الجزء الصعب ليس إرسال الأحداث
نشر حدثٍ سهل. أمّا ضمان أن تنتهي كل خدمة متّسقةً, حتى حين تصل الرسائل متأخّرة أو مكرّرة أو خارج الترتيب, فهو العمل الحقيقي.
نعتمد على تصميم مدفوع بالأحداث حيث تملك كل خدمة بياناتها وتتفاعل مع أحداث الأخرى، بدل الوصول إلى جداول مشتركة. هذا يُبقي الخدمات منفصلة ويتيح لكلٍّ التوسّع وحده.
التفاصيل التي تجعله موثوقاً غير برّاقة: مستهلكون حياديّون تكرارياً فلا يضرّ الحدث المكرّر، وملكية واضحة فيكون هناك مصدر حقيقة واحد لكل معلومة، وتعامل دقيق مع الترتيب والفشل.
التحدّي الحقيقي
الاتّساق وعدٌ لا حالة افتراضية
إرسال حدثٍ سهل؛ الاتفاق على الحقيقة صعب.
في نظام موزّع قد تصل الرسالة نفسها مرّتين أو بترتيب مختلف أو بعد أن تكون الخدمة قد مضت. الهندسة الصعبة ليست المراسلة, بل التصميم بحيث لا تُفسد أيٌّ من هذه الحالات بياناتك.
نعتمد على العمليات المتماثلة (idempotency) وملكية واضحة لكل جزء من الحالة، فتعالج كل خدمة الحدث بثقة، عالمةً أن إعادة التشغيل لا تغيّر ما لا ينبغي.
كيف نبقي الحقيقة واضحة
معالِجات متماثلة
معالجة الحدث نفسه مرّتين تعطي النتيجة نفسها.
ملكية واحدة
خدمة واحدة تملك كل حقيقة، فلا التباس يحتاج تسوية.
إعادة تشغيل آمنة
إعادة معالجة التدفّق عمليةٌ روتينية لا مخاطرة.
كيف نُبقيها متّسقة
المبادئ التي تهمّ
- 1
ملكية واضحة
لكل معلومة خدمةٌ واحدة تملكها بالضبط، فلا يقع نزاع على الحقيقة أبداً.
- 2
مستهلكون حياديّون تكرارياً
معالجة الحدث ذاته مرّتين تعطي النتيجة ذاتها, فتكون إعادات المحاولة والمكرّرات آمنة.
- 3
التعامل مع الفشل
نصمّم للرسالة التي تصل متأخّرة أو تفشل أو لا تصل أبداً، لا للمسار السعيد فقط.
- 4
مراقبة كل شيء
حين ينحرف شيء، نراه بسرعة ونتتبّعه إلى سببه.
الأدوات تخدم المبادئ، لا العكس
الطابور أو التدفّق المحدّد يهمّ أقلّ من الانضباط حوله. اضبط الملكية والحيادية التكرارية والتعامل مع الفشل، وستؤدّي معظم الأدوات المهمّة جيداً.
تعمّق تقني
القرارات «المملة» التي تجعل المزامنة الفورية موثوقة
الجزء الأصعب في المزامنة الفورية ليس طبقة الاتصال, بل تحديد ما يحدث عندما يتصادم تعديلان، أو يعيد عميلٌ الاتصال بعد أسبوع دون شبكة، أو يتأخر مستهلكٌ عن تيار الأحداث. نحسم هذه القواعد أولاً ونوثّقها كتابةً.
الأحداث لدينا مرقّمة الإصدارات وقابلة للتكرار دون أثر جانبي، فالرسالة التي تصل مرتين لا تغيّر شيئاً في المرة الثانية. هذه الخاصية وحدها تلغي فئة كاملة من حوادث الثالثة فجراً، لأن إعادة المحاولة تصبح آمنة بدل أن تكون مقامرة.
كما نقيّد التوزيع عمداً: مؤشرات الحضور والكتابة يمكن التسامح مع فقدها، أما الحالة المالية فلا. فصل الاثنين على ضمانات تسليم مختلفة يُبقي المسار السريع سريعاً دون المجازفة بالأرقام.
نبني برمجيات لفرق تريد أدواتها أن تناسب طريقة عملها الفعلية — الويب والموبايل والذكاء الاصطناعي والأنظمة التي تربطها. نكتب هنا عمّا نتعلّمه أثناء إطلاقها.