لماذا architecture الحدثية؟
تمكن architecture الحدثية من تقليل الارتباطات، والتفاوت في الوقت، وترحيل الحوادث بشكل افتراضي. ولكنها أيضاً تؤدي إلى تعقيدات حول ترتيب الحوادث، والتوافق، ومراقبة الأخطاء.
النماذج الأساسية
1. إشعار الحدث
النموذج الأبسط: إرسال إشعار عندما يحدث حدث ما، وترك الخدمات الأخرى تتفاعل.
await eventBus.emit("order.created", {
orderId: order.id,
customerId: order.customerId,
items: order.items,
total: order.total
});2. تخزين الحوادث
تخزين كل تغيير في الحالة كحدث غير قابل للتغيير. الحالة الحالية يتم الحصول عليها من خلال استعادة الحوادث.
const events = [
{ type: "OrderCreated", data: { items: [...] }, timestamp: "2025-01-15T10:00:00Z" },
{ type: "PaymentReceived", data: { amount: 100 }, timestamp: "2025-01-15T10:05:00Z" },
{ type: "OrderShipped", data: { carrier: "FedEx", tracking: "123" }, timestamp: "2025-01-16T09:00:00Z" }
];3. CQRS (فرق المسؤولية بين الأوامر والاستفسارات)
فرق بين النماذج للكتابة والقراءة لاحتياجات الأداء المختلفة. النموذج للكتابة يركز على التوافق، بينما النموذج للقراءة يركز على أداء الاستفسارات.
اختيار وسطاء الرسائل
| وسطاء الرسائل | أفضل ل | التضاد |
|---|---|---|
| RabbitMQ | الrouting المعقد، والثبات | القدرة على التعامل أقل من Kafka |
| Kafka | القدرة العالية، وتخزين الحوادث | الجوانب التشغيلية المعقدة أكثر |
| SQS/SNS | الخزانة البسيطة/الاشعاع | الانزلاق في AWS |
التreatment للفشل
- خزانات الرسائل الميتة لرسائل لا يمكن معالجتها
- مفاتيح التكرار للاستمرار في المعالجة
- مفاتيح الحاجز لفشل الخدمات النزيهة
- نموذج السجادة لعمليات التبادلية