GaiaEx AcademyGaiaEx Academy
أنماط تصميم البرمجيات لأنظمة التداول
مطوّرالبرمجة12 min read

أنماط تصميم البرمجيات لأنظمة التداول

تسجيل الأحداث، وCQRS، والأنماط المعمارية التي تستخدمها البورصات

مشاركة المنشورات

لماذا تهم الأنماط في أنظمة التداول

البرمجيات المالية تفشل بطرق مكلفة: أوامر مكررة، أرصدة غير متسقة، أعطال جزئية صامتة. أنماط التصميم ليست جوائز — إنها استجابات لأوضاع فشل متكررة: تسجيل الأحداث (event sourcing) لضمان قابلية التدقيق، وCQRS لتوسيع القراءات بشكل مختلف عن الكتابات، وقواطع الدائرة (circuit breakers) لإيقاف الأعطال المتسلسلة، والقوة اللاإرادية (idempotency) حتى لا تُضاعِف عمليات إعادة المحاولة التداول.

CQRS + event log (conceptual) Write side commands validate append events Event log immutable ordered Read side projections Caches / SQL API queries Readers can lag slightly; writers stay the source of truth in the log.
الأوامر تُنتج حقائق؛ المستهلكون يبنون عروضًا مُجسَّدة لاستعلامات سريعة.

النشر/الاشتراك (Pub/Sub) والاقتران الفضفاض

محركات المطابقة، وفحوصات المخاطر، وناشرو بيانات السوق لا ينبغي أن يستدعي كل منهم الآخر مباشرةً في كرة موحلة عملاقة (ball of mud). ناقل النشر/الاشتراك (publish/subscribe) يتيح لمحرّك المطابقة نشر التنفيذات بينما تشترك الخدمات اللاحقة دون معرفة تفاصيل تنفيذ الخدمات السابقة — لكن يجب عليك مع ذلك اختيار ضمانات التسليم (مرة واحدة على الأقل مقابل مرة واحدة بالضبط) ومدة الاستبقاء لإعادة التشغيل.

قواطع الدائرة والحواجز (Bulkheads)

قاطع الدائرة (Circuit breaker) يتوقف عن استدعاء تابعية معطوبة بعد فشل متكرر، مانحًا لها وقتًا للتعافي وحاميًا مجمّعات الخيوط (thread pools) لديك. الحواجز (Bulkheads) تفصل مجمّعات الموارد حتى لا تستطيع مهمة تحليلية جامحة تجويع تقديم الأوامر.

Circuit breaker states CLOSED calls pass failures OPEN fast-fail timeout HALF trial call Half-open probes decide whether to close again or reopen.
يُفصَل عند طفرات الفشل؛ يُهدَّأ لبعض الوقت؛ يُختبَر باستدعاء واحد قبل السماح بالمرور الكامل.

آلات الحالة (State Machines) والقوة اللاإرادية

للأوامر والتحويلات دورات حياة قانونية. رمِّز الانتقالات المسموح بها في آلة حالة منتهية (finite state machine) حتى تصبح القفزات غير الصحيحة مستحيلة. اقرن ذلك مع مفاتيح القوة اللاإرادية (idempotency keys) على طلبات العميل حتى لا تستطيع عمليات إعادة المحاولة عبر الشبكة إنشاء أوامر حيّة مكررة.

محركات المطابقة: أولوية السعر-الزمن

المنصات المركزية تُطابق الأوامر الواردة مع السيولة المعلّقة بأولوية السعر-الزمن. المطابقات على السلسلة (كما في كثير من تصاميم البورصات اللامركزية على الطبقة الأولى) يجب أن تكون حتمية: كل مدقّق يُعيد تنفيذ التسلسل نفسه ويصل إلى حالة متطابقة — GaiaEx ترث هذا النموذج من قواعد Hyperliquid.

التبنّي العملي

لا تُقلّد كل نمط بشكل أعمى من اليوم الأول. ابدأ بحدود واضحة، وسجلات مُنظَّمة، واختبارات حول حركة الأموال. أضف سجل أحداث حين يظهر ألم في المطابقة (reconciliation)؛ أضف قواطع دائرة حين تصبح واجهات API الخارجية غير مستقرة. الأنماط تحلّ مشكلات حقيقية، لا خيالية.