بنية مايكروسرفيس
1) لماذا الخدمات الدقيقة في iGaming
سرعة التغيير: إصدارات مستقلة من ميزات الفريق (المدفوعات والمحتوى والمخاطر والبطولات).
الموثوقية: فشل خدمة واحدة لا يقلل من المنتج بأكمله (حدود الفشل).
المقياس: المقياس الأفقي للنطاقات «الساخنة» (المحفظة، الردهة، الجداول).
الامتثال: الفصل بين البيانات حسب المنطقة/الولاية القضائية.
عندما لا يستحق كل هذا العناء: فريق/حجم صغير، لا توجد ممارسات DevOps، أتمتة ضعيفة للاختبارات - عندها يكون التكتل المعياري أفضل.
2) المجالات والحدود والفرق (DDD + Team Topologies)
خطوط المجال: الحساب/الملف الشخصي، CCM/الامتثال، المدفوعات/المحفظة، محتوى اللعبة/التجميع، المكافآت/المهام، البطولات، التسويق/إدارة علاقات العملاء، الإبلاغ/BI.
Bounded Context = Data Model and Language Contract.
يتدفق التغيير ↔ الأوامر: أمر واحد = حلقة واحدة + SLOs.
BFF (Backend for Frontend): واجهات منفصلة لـ Web/Mobile/Partner، حتى لا يتم جمع «التنسيق» على العميل.
3) الاتصالات: متزامنة مقابل غير متزامنة
متزامن (REST/gRPC): عندما تكون هناك حاجة إلى استجابة فورية (التحقق من حدود الودائع).
Asynchron (Kafka/NATS/SQS): الأحداث وعمليات الخلفية (استرداد النقود، الرسائل البريدية، تحديثات التصنيف).
- المسار الحرج = الحد الأدنى من قفزات الشبكة.
- التكامل عبر المجالات - من خلال الأحداث وواجهات برمجة التطبيقات التعاقدية.
- لا تبني «سلاسل من 5 + مكالمات متزامنة» عبر الإنترنت → استخدم EDA/sagas.
4) العقود والتحرير
العقد الأول: OpenAPI/AsyncAPI + Schema Registry (Avro/JSON Schema).
توافق SemVer +: إضافة الحقول لا يكسر العملاء.
العقود التي يحركها المستهلك (CDC): الفحوصات التلقائية في CI (مقابل الانحدارات).
سياسة الرفض: نافذة الدعم (12-18 شهرًا)، القياس عن بعد للإصدارات القديمة.
5) الأحداث والملاحم والاتساق
Outbox/Transaction Log Tailing: السجل الذري «data + event».
أنماط الملحمة:- تنسيق (المنسق المركزي) للمدفوعات/النواتج.
- تصميم الرقصات (رد الفعل على الأحداث) للمكافآت/البعثات.
- الخصوصية: مفاتيح «كيان معرف + إجراء + غير معروف»، تخزين سجل التخلص.
- الاتساق: «خارجي» - من خلال الأحداث ؛ «الداخلية» - المعاملات داخل الخدمة.
6) البيانات والتخزين
مبدأ «المتجر الخاص»: تمتلك كل خدمة قاعدة بيانات خاصة بها (عزل المخططات).
اختيار التخزين حسب نمط الوصول:- المعاملات/الأرصدة علائقية (PostgreSQL) مع ثوابت صارمة.
- الأحداث/السجل - المرفق فقط (كافكا/ريدباندا).
- مخبأ/جلسات - Redis/KeyDB ؛ لوحات الصدارة - مجموعات Redis Sorted.
- ابحث - OpenSearch/Elastic.
- توقعات القراءة المجسدة (CQRS) - القوائم/التقارير السريعة.
7) الموثوقية والاستقرار
Timeouts/Retry with jitter/Retry-budget for idempotent operations فقط.
قاطع الدائرة/الطرد الخارجي بين الخدمات.
Bulkhead: برك منفصلة للمنبع «الصاخب».
حدود السعر لكل عميل/مسار، الضغط الخلفي (503 + Retry-After).
الحروف الميتة + التعامل مع الرسائل السامة في قوائم الانتظار.
8) إمكانية الملاحظة
Trace: OpenTelemetry ('trace _ id' through shlyuz→servisy→BD).
المقاييس: RPS، p50/p95/p99، معدل الخطأ 4xx/5xx، التشبع (CPU/mem/quelue)، مقاييس الأعمال (TTP، TtW).
Logs: JSON منظم، PII/PAN/IBAN masking، الارتباط بواسطة 'trace _ id'.
SLO/تنبيهات: إلى المسار/الوظيفة (على سبيل المثال، «الإيداع p95 ≤ 300 ms'،» النجاح ≥ 98. 5%`).
9) السلامة والامتثال
Zero-Trust: mTLS servis↔servis (SPIFFE/SPIRE)، شهادات قصيرة العمر.
AuthN/Z: OAuth2/JWT (aud/scope/exp)، تميز الأدوار.
الأسرار: KMS/Secrets Manager/Sealed Secrets، مفتاح التناوب.
اللائحة العامة لحماية البيانات/تحديد مواقع البيانات: مجموعات إقليمية، تسييج جغرافي على بوابة واجهة برمجة التطبيقات.
التدقيق: السجلات غير القابلة للتغيير (WORM)، وتتبع الإجراءات الإدارية.
10) النشر والإطلاقات
Containers/K8s: خدمة واحدة = نشر واحد ؛ والموارد/الحدود ؛ PodDistructionBudget.
CI/CD: البطانات، اختبارات الوحدة/العقد/integ، المسح الأمني، SBOM.
الإصدارات: الكناري/الأزرق الأخضر/الظل، هجرات المخطط عبر التوسع والعقد.
المقياس التلقائي: HPA بواسطة CPU + RPS + p95 + عمق قائمة الانتظار ؛ تصريف عند الانهيار.
11) الأداء والتكلفة
Profiling: p95/99 "by services and methods', flame-graphs.
التخزين المؤقت: القراءة/الكتابة ؛ TTL/الإعاقة حسب الحدث.
موقع البيانات: حافظ على البيانات الساخنة قريبة من الحساب.
FinOps: هدف التنزيل 60-70٪، «حمامات السباحة الدافئة»، التوقف التلقائي للعمال غير النشطين.
12) نماذج النطاق (iGaming)
12. 1 المدفوعات/المحفظة
الخدمات: «المدفوعات gw» (الواجهة)، «المحفظة»، «psp-adapters -»، «التحقق من الاحتيال».
التدفق: «init → reserve → capture/rellack» (ملحمة).
События: «بدء الدفع»، «الدفع المصرح به»، «الدفع/الفشل».
الخصوصية: "Idempotency-Key"، deadup in "wallet'.
12. 2 CCM/الامتثال
Сервисы: «kyc-flow»، «doc-storage»، «pensure-check»، «pep-securing».
События: «KycSubmitted/تمت الموافقة عليه/رفضه»، «RiskScoreUpdated».
مراجعة الحسابات و ETA: قائمة انتظار المهام، حالة الجدول الزمني، الإجراءات اللاحقة.
12. 3 مكافآت/بعثات
الخدمات: «محرك المكافأة»، «مكافأة المحفظة»، «الأهلية».
تصميم الرقصات: «BetPlaced → BonusEngine → BonusGented → WalletCredited».
الحماية من إساءة الاستخدام: منح خفية، حدود، محاكاة قواعد.
12. 4 بطولات/لوحات الصدارة
الخدمات: "tournament-svc"، "scoring"، "leaderboard'.
التخزين: Redis ZSET + «التدفق» الدوري في OLAP.
События: «ScoreUpdated» و «TournamentClosed» و «RewardIssue».
13) مثال العقد + الحدث (مبسط)
OpenAPI (جزء) - محفظة
yaml paths:
/v1/wallet/{userId}/credit:
post:
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/CreditRequest'
responses:
'202': { description: 'Enqueued' }
components:
schemas:
CreditRequest:
type: object required: [amount, currency, reason, idempotencyKey]
properties:
amount: { type: number }
currency: { type: string, example: UAH }
reason: { type: string, enum: [Deposit, Bonus, Adjustment] }
idempotencyKey: { type: string }
AsyncAPI (جزء) - حدث
yaml channels:
wallet. credit. applied:
publish:
message:
name: WalletCreditApplied payload:
type: object required: [userId, amount, currency, sourceEventId]
14) الاختبار
الوحدة/الممتلكات القائمة على قواعد النطاق.
CDC (Pact/Assertible) - اختبارات عقد المزود/المستهلك.
الاندماج مع السماسرة المحليين (Testcontainers).
E2E التدفق الحرج (registratsiya→depozit→start igry→vyvod)
اختبارات الفوضى/الفشل: إغلاق PSP/إسقاط الوسيط/خسارة المنطقة.
15) المقاييس و SLO (الحد الأدنى)
توافر الخدمات: '≥99. 9٪ 'للدفع/المحفظة.
Latency p95: المسار الحرج API ≤ 300-500 mm.
ميزانية الخطأ: 0. 1–0. 5٪ في الربع، تنبيهات الحرق.
قوائم الانتظار: أحداث المهلة (produce→consume)، DLQ ≤ 0. 1%.
الأعمال: TTP، TtW، FTD-success، KYC-TtV.
16) القوائم المرجعية
تصميم الخدمات
- تنظيف حدود المجال ومالك البيانات.
- عقود OpenAPI/AsyncAPI + مخططات في السجل.
- تعريف تنبيهات/تنبيهات SLO ؛ تم تضمين المقاييس/المسارات/السجلات.
- Timeout/Retray/Idempotency Policies.
- هجرات المخطط: التوسع والعقد.
قبل الإصدار
- الوحدة/مركز السيطرة على الأمراض/اختبارات التكامل الخضراء.
- طريق الكناري وخطة التراجع.
- تم تكوين حدود المعدل/طرق الوزن.
- الأسرار/المفاتيح/الشهادات قيد الحفر.
- أعلام Ficha و follbacks معدة.
17) الأنماط المضادة
الشبكة كحافلة بيانات: سلاسل متزامنة عميقة بدلاً من الأحداث.
«إله» مشترك - DB لجميع الخدمات.
عدم التمكن → الشطب المزدوج/الاستحقاقات.
إصدارات مظلمة بدون قياس عن بعد ومفتاح قتل.
جلسة خفية (اللزوجة في كل مكان بدلاً من الحالة الخارجية).
العقود «في الرمز» بدون نسخة و CDC.
المنطق في بوابة واجهة برمجة التطبيقات بدلاً من الخدمات (بوابة = رقيقة).
18) Monolith Migration (Strangler Fig)
1. حدد بوابة الواجهة والدائرة الأساسية (على سبيل المثال، المدفوعات).
2. قم بإزالة قطع الأشجار الثنائي (outbox) من monolith إلى الأحداث.
3. نقل نقاط النهاية تدريجياً إلى خدمة جديدة (أوزان التوجيه/الكناري).
4. اضغط المتراصة على «النواة» وأطفئها.
19) المكدس والبنية التحتية (مثال)
الاتصالات: REST/gRPC، Kafka/NATS ؛ سجل المخطط.
المستودعات: PostgreSQL, Redis, OpenSearch, S3/MinIO; OLAP - ClickHouse/BigQuery.
الحاويات/التنسيق: Docker، Kubernetes (Ingress/Gateway)، Service Mesh (Istio/Linkerd) إذا لزم الأمر.
البوابة: Envoy/Kong/Traefik/NGINX.
CI/CD: GitHub Actions/GitLab CI + ArgoCD/Flux ؛ Pact/OWASP/ZAP.
إمكانية الرصد: OpenTelemetry، Prometheus، Tempo/Jaeger، Loki.
20) ورقة الغش النهائية
حدود التصميم حسب المجال ومسؤولية البيانات.
Synchron - فقط حيث هناك حاجة إلى إجابة الآن ؛ والباقي أحداث.
العقود/المخططات/مراكز السيطرة على الأمراض والوقاية منها - تأمين الانحدار.
Sagas + outbox + idempotency - أساس الموثوقية.
وقابلية الملاحظة ومكتب الإحالة إلى الخارج ليسا خيارين، بل هما المعيار «الجاهز».
الإصدارات عبر الكناري/الأزرق والأخضر، والهجرات - التوسع والعقد.
السلامة/الامتثال: mTLS، JWT، KMS، البيانات الإقليمية.
أولاً، متراصة معيارية، ثم تطور - إذا كان المقياس والفريق جاهزين.