Aeron: كيف يعمل نظام المراسلة الذي يُشغّل نصف صناعة التداول عالي التردد
Aeron: Media Driver، ذاكرة مشتركة، سجلات ثلاثية التخزين المؤقت — المعمارية التي وضعت معيار المراسلة منخفضة زمن الاستجابة.
عندما يتعلق الأمر بأنظمة المراسلة للتداول عالي التردد، هناك اسم واحد يظهر في كل محادثة — Aeron. طوّره Martin Thompson وفريق Real Logic (الذي أصبح لاحقاً Adaptive Financial Consulting)، وأصبح Aeron المعيار الفعلي لنقل البيانات في عالمٍ تُحسم فيه الأمور بالميكروثانية.
في هذه المقالة، سنفكك Aeron جزءاً بجزء: Transport وArchive وCluster وSequencer. سنشرح البنية الداخلية ونقاط القوة، والمواضع التي تبدأ فيها المشكلات.
ملخص
- Aeron — نظام مراسلة مفتوح المصدر (Apache 2.0) للتطبيقات منخفضة زمن الاستجابة
- زمن استجابة IPC: حوالي 250 نانوثانية ذهاباً وإياباً عبر الذاكرة المشتركة
- معدل النقل: أكثر من 20 مليون رسالة في الثانية
- أربعة منتجات: Transport (النواة)، Archive (تسجيل/إعادة تشغيل)، Cluster (Raft)، Sequencer (ترتيب كلي)
- اللغة: Java (أساسية) + عميل C (أقل اكتمالاً)
- المستخدمون: عشرات شركات HFT وصنّاع السوق والبورصات
الجزء الأول: Aeron Transport — نواة كل شيء
المعمارية: Media Driver

المكوّن المركزي في Aeron هو Media Driver. وهو عملية مستقلة (أو مكتبة مدمجة) تدير كل عمليات نقل البيانات. تتواصل التطبيقات مع Media Driver عبر الذاكرة المشتركة (ملفات mmap في /dev/shm).
┌──────────┐ ┌──────────────┐ ┌──────────┐
│ Publisher │ ── shm commands ─→│ Media Driver │←─ shm commands ── │Subscriber│
│ (App) │ ←─ shm responses─│ (process) │─→ shm responses │ (App) │
└──────────┘ │ │ └──────────┘
│ Log Buffers │
│ (data path) │
└──────┬───────┘
│
Network
(UDP/IPC)
هياكل البيانات الرئيسية:
- ManyToOneRingBuffer (MPSC) — أوامر من العملاء إلى Media Driver
- BroadcastTransmitter/Receiver — استجابات من Media Driver إلى العملاء
- Log Buffers — سجل ثلاثي التخزين المؤقت للإلحاق فقط للبيانات
- Position Counters — عدّادات ذرّية لتنسيق المواقع
Log Buffers: تخزين مؤقت ثلاثي
تُنقل البيانات في Aeron عبر Log Buffers — ثلاثة term buffers متناوبة. عندما يمتلئ أحدها، يتم التبديل إلى التالي (term rotation). يتيح هذا للناشر الكتابة في buffer بينما يقرأ المشترك من آخر.
حجم كل term buffer يتراوح من 64 كيلوبايت إلى 1 غيغابايت، ويُحدد عند إنشاء Publication.
البروتوكول
يستخدم Aeron بروتوكول wire خاصاً فوق UDP:
- Data frames — البيانات الفعلية مع رأس (stream ID، session ID، term ID، offset)
- Status Messages — التحكم بالتدفق (يُبلغ المستقبل عن موقعه)
- NAK — طلب إعادة الإرسال (يقوده المستقبل)
- Setup — إنشاء الاتصال
- Heartbeat — فحص النشاط
الأداء
المواصفات المُعلنة:
| المقياس | القيمة |
|---|---|
| IPC (ذاكرة مشتركة) RTT | ~250 نانوثانية |
| UDP unicast RTT (خادم مخصص) | ~10 ميكروثانية |
| UDP unicast RTT (سحابي، AWS) | <100 ميكروثانية |
| معدل النقل | >20 مليون رسالة/ثانية |
| Aeron Premium (تجاوز النواة) P99 | 39 ميكروثانية |
| Aeron Premium P99.9 | 43 ميكروثانية |
هذه الأرقام مثيرة للإعجاب. لكن هناك نقطة مهمة — تم قياسها على Java، مما يعني أنها تتأثر بعوامل JVM.
الجزء الثاني: Aeron Archive — التسجيل وإعادة التشغيل
Archive يحل مشكلة حفظ الرسائل على القرص مع إمكانية إعادة التشغيل من أي موقع.
آلية العمل
- عملية Archive تشترك في التدفقات عبر Aeron Transport
- جميع الرسائل تُسجّل في ملفات مُجزأة على القرص
- عند الحاجة — إعادة تشغيل: Archive يُنشئ Publication جديد من البيانات المسجلة
- العميل يشترك في تدفق إعادة التشغيل ويستقبل الرسائل التاريخية
حالات الاستخدام
- التدقيق — الجهات التنظيمية تشترط حفظ جميع الرسائل
- التعافي من الأعطال — العقدة الجديدة "تلحق" بالقائد عبر إعادة التشغيل
- التحليلات — إعادة تشغيل التدفق لاختبار الاستراتيجيات بأثر رجعي
- تصحيح الأخطاء — إعادة إنتاج التسلسل الدقيق للأحداث
الجزء الثالث: Aeron Cluster — إجماع Raft

Cluster هو آلة حالة مُكرّرة متسامحة مع الأخطاء مبنية على إجماع Raft. يُستخدم للأنظمة الحرجة حيث لا يُقبل فقدان الرسائل (محرك المطابقة، إدارة الأوامر).
آلية العمل
- Leader يستقبل جميع الأوامر الواردة
- يُكرّر كل سجل إلى followers عبر Aeron Transport
- بعد تأكيد الأغلبية — يُعتبر السجل committed
- السجلات المُؤكدة تُطبّق على آلة الحالة
الخصائص
- انتخاب قائد تلقائي وتجاوز الأعطال (أقل من ثانية واحدة)
- اتساق قوي (قراءات قابلة للخطّية عبر القائد)
- ترقيات النظام الساخنة
- معدل النقل: ملايين الرسائل في الثانية مع إجماع Raft
الجزء الرابع: Aeron Sequencer — ترتيب موحد للأحداث
Sequencer — منتج جديد (2025) مُحسّن لأسواق رأس المال.
المشكلة
في صناعة السوق والبورصات، من الضروري أن يرى جميع المشاركين نفس ترتيب الأحداث. يوفر Sequencer ترتيباً كلياً (total ordering) — تسلسلاً عالمياً موحداً لجميع الرسائل.
المعمارية
- مبني فوق Aeron Cluster
- سجل موزّع مُكرّر على عدة أجهزة
- قرّاء متعددون — عدة تطبيقات تقرأ نفس السجل
- فصل الفرق — الفرق تعمل بشكل مستقل ضمن إطار ترتيب موحد
القيود
Sequencer هو منتج تجاري من Adaptive Financial Consulting. مغلق المصدر. يرث جميع نقاط ضعف Cluster.
نقاط ضعف Aeron

رغم جميع المزايا، لدى Aeron قيود جوهرية:
1. الاعتماد على JVM
حتى مع استخدام ذاكرة off-heap، تُوقف نقاط أمان JVM جميع الخيوط. GuaranteedSafepointInterval=300000 هو حل مؤقت وليس حلاً جذرياً. إحماء JIT يُضيف عدم قابلية التنبؤ في الدقائق الأولى بعد البدء.
عميل C موجود لكنه أقل اكتمالاً — لا يوجد Archive ولا Cluster.
2. حمل Media Driver الزائد
عملية منفصلة تعني قفزة إضافية عبر الذاكرة المشتركة. الوضع المدمج يربطك بـ JVM. في كلتا الحالتين — عدم قابلية تنبؤ إضافية.
3. Log Buffers ثابتة الحجم
ثلاثة term buffers بحجم ثابت عند الإنشاء. لا توجد إدارة تكيفية للذاكرة. كبيرة جداً — إهدار RAM؛ صغيرة جداً — تبديل term متكرر.
4. عدم وجود تجاوز نواة أصلي
UDP فقط للشبكة. io_uring وDPDK وAF_XDP غير مدعومة. Aeron Premium يُضيف تجاوز النواة، لكنه منتج مغلق ومدفوع.
5. SBE — تبعية منفصلة
مخططات XML، مولّد شيفرة Java، خطوة بناء منفصلة. لا تكامل داخل اللغة.
6. عدم وجود شبكات نسخ صفري
البيانات تُنسخ من المقبس إلى log buffer. على Linux 6.0+ يتيح io_uring إرسال/استقبال بنسخ صفري، لكن Aeron لا يستفيد من هذه الميزة.
البدائل
| المشروع | اللغة | نقاط القوة | نقاط الضعف |
|---|---|---|---|
| Aeron | Java/C | ناضج، مُجرّب، نظام بيئي متكامل | حمل JVM الزائد، لا تجاوز نواة (مفتوح المصدر) |
| ZigBolt | Zig | 20 نانوثانية SPSC، مُرمّزات نسخ صفري، لا GC | مشروع حديث (v0.2.1) |
| Chronicle Queue | Java | تخزين دائم، مليارات الرسائل يومياً | JVM GC، ثقيل |
| ZeroMQ | C | واجهة برمجة بسيطة، وسائل نقل متعددة | لا طبقة موثوقية، لا تجميع |
| DPDK | C | أقصى أداء | معقد، يتطلب دعم عتاد |
في Marketmaker.cc طوّرنا ZigBolt — بديل مفتوح المصدر لـ Aeron بلغة Zig. بدون JVM، بدون GC، مع مُرمّزات comptime وزمن استجابة 20 نانوثانية على SPSC. المزيد من التفاصيل في مقالنا عن ZigBolt.
الخلاصة
Aeron مشروع هندسي متميز وضع معيار المراسلة منخفضة زمن الاستجابة. قراراته المعمارية (السجلات ثلاثية التخزين المؤقت، الموثوقية المبنية على NAK، مجموعة Raft) أصبحت نموذجاً يُحتذى.
لكن العالم لا يتوقف. لغات مثل Zig وRust تسمح بتحقيق نفس النتائج (وأفضل) بدون حمل JVM الزائد. تجاوز النواة عبر io_uring وDPDK يفتح إمكانيات لا يمكن لـ UDP وحده توفيرها. وتوليد الشيفرة في وقت الترجمة يجعل مخططات XML ومولّدات شيفرة Java من مخلفات الماضي.
سيبقى Aeron في بيئات الإنتاج لدى عشرات الشركات لسنوات قادمة. لكن للمشاريع الجديدة، يستحق النظر في البدائل — بما فيها ZigBolt.
روابط مرجعية:
- Aeron GitHub: github.com/real-logic/aeron
- Aeron Wiki: github.com/real-logic/aeron/wiki
- Martin Thompson (المطوّر): mechanical-sympathy.blogspot.com
- ZigBolt (بديلنا): المقال | الموقع
- Marketmaker.cc: marketmaker.cc
الاقتباس
@article{soloviov2026aeron,
author = {Soloviov, Eugen},
title = {Aeron: كيف يعمل نظام المراسلة الذي يُشغّل نصف صناعة التداول عالي التردد},
year = {2026},
url = {https://marketmaker.cc/ar/blog/post/aeron-messaging-overview},
description = {تحليل معمارية Aeron — Transport وArchive وCluster وSequencer. نقاط القوة والضعف.}
}
MarketMaker.cc Team
البحوث والاستراتيجيات الكمية