رویدادهای زمان واقعی: معماری و امنیت
خوراک رویداد در زمان واقعی یک «سیستم گردش خون» از محصولات با gamification، ضد تقلب، راه اندازی CRM و پرداخت است. به منظور آن را به کار قابل پیش بینی در قله، جوایز تکراری نیست و داده های نشت نیست، یک معماری سخت مورد نیاز است: از پروتکل ها و اتوبوس به امضا، idemotency، privateers بودجه و مشاهده.
1) اهداف و الزامات
قابلیت اطمینان: تحویل حوادث با حداقل تاخیر (p95 ≤ 250 میلی ثانیه مصرف، p95 ≤ 1-2 ثانیه به مصرف کننده).
تحویل: حداقل یک بار حمل و نقل + منطقی دقیقا یک بار از طریق idempotence.
سفارش: سفارش توسط کلید (معمولا 'user _ id') با پنجره های مرتب سازی مجدد.
امنیت: MTLS، HMAC/JWT، چرخش کلید، حفاظت پخش/تکراری، به حداقل رساندن PII.
مقیاس: sharding افقی، فشار پشتی، محدود کردن نرخ، DLQ/پخش.
مدیریت پذیری: رجیستری طرح، نسخه، مهاجرت بدون خرابی.
انطباق: حسابرسی (WORM)، دروازه های RG/KYC، سیاست های جغرافیایی، GDPR/ناشناس سازی.
2) معماری مرجع (لایه به لایه)
1. تولید کنندگان (منابع): سرور بازی، کیف پول/پرداخت، KYC/AML، SDK های مشتری (وب/iOS/Android).
2. دروازه API (ورود): پذیرش HTTP/gRPC، اعتبار سنجی طرح، احراز هویت، HMAC/MTLS، عادی سازی زمان.
3. صف/جریان: Kafka/Rabbit/Cloud Pub/Sub - بافر، پارتیشن بندی شده توسط 'user _ id'.
4. پردازنده جریان: عادی، غنی سازی، مسیریابی موضوع، پرچم های ناهنجاری/ضد رباتها، ضبط بی نظیر.
5. مصرف کنندگان: قوانین/امتیاز، ارکستر پاداش، اتصالات CRM/CDP، ضد تقلب، سینک تحلیلی و.
6. ذخیره سازی: رویدادهای تغییر ناپذیر، storefronts، شاخص برای idemotency، ورود به سیستم حسابرسی.
7. قابلیت مشاهده: معیارها، سیاهههای مربوط، ردیابی، هشدارها ؛ وحشت → DLQ.
8. صفحه مدیریت: رجیستری طرح، کلید/اسرار، RBAC/ABAC، phicheflags، سرویس پخش.
3) پروتکل های تحویل: زمانی که از چه چیزی استفاده کنید
HTTP/JSON (وب سایت های سرور به سرور): ساده، سازگار، خوب برای شرکای خارجی. اضافه کردن HMAC + idempotency.
gRPC/Protobuf: تاخیر کم، طرح های دقیق، جریان بیدی برای خدمات داخلی.
WebSocket/SSE: فشار به مشتری، اشتراک UI به مدیران و پیشرفت.
CDC/Kafka Connect: هنگامی که منابع پایگاه داده/کیف پول هستند، نه خدمات تجاری.
توصیه: محیط بیرونی - HTTP + HMAC + MTLS ؛ در داخل - gRPC/Protobuf.
4) مدل رویداد و کنوانسیون
جی سون
{
« : « » « : «شرط»، «1 «. 3. 0»، « : « » « : « 183Z,» «کلید»: {«user_id": «u_12345»}، «ctx»: {
«session_id":» s_778 «،» پلت فرم «:» ios «،» geo «:» TR «،» device_fp": «fp_4a1...»
}، «بارگیری»: {
"game_id": "slot_wolf," "شرط": 0. 5، «برنده»: 1. 25، «ارز»: «EUR»، «ارائه دهنده»: «GameCo»
}، «sig»: {
«algo»: «HMAC-SHA256,» «بچه»: «k_2025_10,» «ts «: 1730061441، «مک»: «c7b7b3... f1»
}
}
قوانین و مقررات:
- دو زمان 'رخ داده است در' (منبع) و 'مصرف شده در' (دروازه). اجازه دهید ساعت ± 300 ثانیه حرکت کند.
- کلید مسیریابی چیزی است که سفارش را تعیین می کند (معمولا «user _ id»).
- PII تنها در 'ctx '/' payload' در اصل به حداقل رساندن ؛ برای ویژگی های حساس، نشانه گذاری.
5) تحویل، سفارش و idemotence
حداقل یک بار حمل و نقل → تکراری و مرتب سازی مجدد امکان پذیر است.
منطق دقیق یک بار: نگه داشتن یک جدول idempotence با یک شاخص منحصر به فرد در '(event_id)' و/یا '(user_id، source_seq)' ؛ تکرار - بدون عملیات.
طرح SQL:SQL
ایجاد event_log جدول (
کلید اصلی متن ، متن ، متن ، TIMESTAMPTZ، بارگیری JSONB
);
- درج دو برابر محافظت شده
INSERT INTO ( ، ، بار)
ارزش ها (:event_id,:user_id,:event_type,:occurred_at,:payload)
در تعارض (event_id) هیچ کاری نکنید ؛
سفارش: تقسیم جریان توسط 'user _ id' + پنجره مرتب سازی مجدد 60-120 ثانیه در پردازنده. بعدها، حوادثی که در «پخش» توابع اصلاحی قرار می گیرند.
6) فشار پشتی و مدیریت اوج
Token-bucket rate limiting на ingress (هر IP، هر شریک، هر کلید).
قطع کننده مدار: با 5xx از مصرف کنندگان داخلی، تخریب → (خروج از رویدادهای اختیاری، صف افزایش فواصل بازپرداخت).
DLQ: پیام های دائمی اشتباه (bitmap، امضا نامعتبر، امضای TTL بیش از حد).
سرویس پخش: پخش DLQ انتخابی توسط «event _ id »/محدوده زمانی.
7) طرح ها و تکامل: چگونه به «شکستن» تشویق
رجیستری طرح: JSON طرح/Protobuf ؛ سیاست های سازگاری: عقب برای تولید کنندگان، رو به جلو برای مصرف کنندگان.
Versioning: 'schema _ version', major - تنها از طریق ficheflag و double-write (دو نوشتن).
قراردادها: ارتقاء طرح پس از دوره قناری و معیارهای سبز.
قانون اعتبار سنجی مثال YAML:سازگاری یامل:
اجرای: حالت واقعی: blocked_fields عقب:
- محموله. SSN
- محموله. card_number required_fields:
- event_id
- event_type
- occurred_at
8) مدل تهدید و حفاظت
تهدیدها: جعل بدن، پخش مجدد، نشت PII، سازش کلیدی، مسمومیت طرحواره، DoS، MITM، سلب امضا.
حفاظت:- MTLS در محیط: گواهینامه های مشتری کوتاه مدت، CRL/OCSP.
- امضای HMAC + 'X-Timestamp' و TTL (± 300 ثانیه).
- JWT (credentials/OAuth2 مشتری) - برای محدودیت های مجوز و دامنه.
- چرخش کلید (KMS): «بچه» در هدر ؛ برنامه چرخش 30-90 روز ؛ دوبار چک کردن پنجره مهاجرت.
- Nonce/idempotency: «X-Request-Id» برای درخواست های جانبی (پرداخت، پاداش) ؛ TTL را برای مدتی نگه دارید.
- محتوا نوع پینینگ، حداکثر اندازه بدن، اجازه لیست IP/ASN برای ادغام بحرانی.
- ممیزی WORM از تمام ورودی خام payload + هدر (ذخیره سازی غیر قابل تغییر).
پایتون بدن = درخواست. raw_body ts = int (درخواست) هدر [» X-Timestamp»])
assert abs (now () - ts) <= 300 # анти -replay kid = request. هدر [» X-کلید-ID»]
راز = kms واکشی (بچه)
mac = hmac_sha256 (راز، بدن)
ادعا hmac_eq (مک، درخواست. هدر [» X-امضا»])
9) حریم خصوصی، PII و RG/KYC
به حداقل رساندن: انتقال PII توسط لینک رمز (برای 5-15 دقیقه) به جای درون خطی ؛ ویرایش/ناشناس سازی در سیاهههای خام ممنوع است - از صفحات PII جداگانه استفاده کنید.
دسترسی: ABAC توسط صلاحیت و ویژگی های نقش ؛ همه می خوانند - به گزارش حسابرسی.
GDPR: استفاده از حق حذف از طریق نقشه برداری کلیدی برای پاک کردن PII بدون شکستن حقایق حوادث.
RG/KYC: رویدادهایی که نیاز به پاداش ارزشمند دارند، فقط با سطح KYC معتبر و پرچم RG «OK» پرش می کنند.
10) قابلیت مشاهده و SLO
SLO (مثال):- مصرف p95 ≤ 250 میلی ثانیه ؛ پایان دادن به پایان p95 ≤ 2 с ؛ عدم موفقیت ≤ 0 1 درصد در روز
- امضای خطا (HMAC/JWT) ≤ 0. 02٪ از کل جریان.
- نرخ پر شدن DLQ ≤ 0. 1%; «تکراری» پس از idemotency ≤ 0. 005%.
- RPS توسط منبع، p50/p95 تاخیر، 4xx/5xx، امضای خطا، زمان انحراف.
- تاخیر توسط حزب، پردازش/ثانیه، DLQ را پر کنید، دوباره تلاش کنید، حجم پخش کنید.
- Schemes: به اشتراک گذاری پیام ها توسط نسخه، نقض سازگاری.
- ایمنی: نرخ rps-throttle، قطع کننده مدار، ناهنجاری های IP/ASN.
- SRM جریان (اعوجاج شدید ترافیک از یک منبع).
- تاخیر p95> هدف 5 دقیقه +، رشد DLQ> X/min.
- امضاهای خطا> Y ppm، 'X-Request-Id' replay spike.
- ساعات رانندگی> 120 ثانیه در منبع.
11) تحمل چند منطقه و گسل
مناطق فعال فعال، مسیریابی جهانی (GeoDNS/Anycast)، کلید چسبنده توسط «user _ id» → منطقه.
موضوع تکرار بین منطقه ای برای رویدادهای بحرانی (پولی، KYC).
شعاع انفجار: انزوا توسط مستاجران/مارک ها، بودجه های فردی و کلید.
DR-plan: RPO ≤ 5 دقیقه، RTO ≤ 30 دقیقه ؛ تمرینات منظم
12) سیاست های نگهداری و پخش
رویدادهای خام: 7-30 روز (با هزینه)، مصالح/ویترین - طولانی تر.
پخش فقط توسط یک runbook امضا شده (چه کسی، چه، چرا، محدوده زمانی) مجاز است.
Replay همیشه به یک نسخه جدید با پرچم «replayed = true» برای شفافیت تحلیلی می رود.
13) نمونه های پیکربندی
محدودیت های ورود (سبک NGINX):nginx limit_req_zone منطقه $binary_remote_addr = req _ limit: نرخ 10m = 300r/s ؛
منطقه limit_req = req _ limit burst = 600 nodelay;
client_max_body_size 512 کیلوگرم ؛
proxy_read_timeout 5 ثانیه ؛
کافکا (مثال):
properties number. پارتیشن = 64 دقیقه. insync. replicas = 2 acks = تمام احتباس. ms = 604800000 # 7 روز فشرده سازی. تایپ کنید = zstd
سیاست برای کلید (KMS):
یامل rotation_days: 45 grace_period_days: 7 allow_algos: [«HMAC-SHA256»]
key_scopes:
- موضوع: «wallet_events»
تولید کنندگان: [«wallet-svc»]
مصرف کنندگان: [«ledger-svc «, «risk-svc»]
14) زمان واقعی خوراک چک لیست راه اندازی
- MTLS در محیط، HMAC/JWT، چرخش کلید ('بچه').
- Idempointence در منطق (کلید منحصر به فرد, upsert/ON CONFLICT).
- پارتیشن بندی توسط 'user _ id'، پنجره مرتب سازی مجدد، سرویس پخش مجدد.
- رجیستری طرح + سیاست های سازگاری ؛ نوشتن دوگانه برای به روز رسانی های عمده.
- محدود کردن نرخ، قطع کننده مدار، بررسی دستی DLQ +.
- قابلیت مشاهده: SLO، هشدار توسط امضا/تاخیر/DLQ/تاخیر.
- PII/سیاست ناشناس، ABAC، حسابرسی WORM.
- DR/چند منطقه، تمرینات feilover.
- Runbooks: حوادث، پخش، بازگشت طرح/کلید.
15) مورد کوچک (مصنوعی)
زمینه: اوج مسابقات، 120 به RPS ورود، 64 بازی، 2 مناطق فعال فعال است.
مجموع 4 هفته: p95 210 میلی ثانیه، e2e p95 1. 6 ثانیه ؛ DLQ 0 05%; امضای خطا 0 009%; تکراری پس از idempotency 0. 003%.
حادثه: رانش ساعت شریک (− 9 دقیقه) → افزایش ضد پخش. قطع کننده مدار جریان را به نقطه پایانی «بافر» منتقل کرد، شریک سلامت CSM را اعلام کرد ؛ پس از کبودی NTP - پنجره 12 دقیقه به همه مصرف کنندگان پخش می شود. هیچ ضرر و زیانی وجود ندارد و دو برابر پرداخت می شود.
16) خلاصه
یک خوراک قابل اعتماد در زمان واقعی "فقط webhooks نیست. "این یک سیستم لایه ای با قراردادهای روشن است: حداقل یک بار حمل و نقل + منطقی دقیقا یک بار، طرح ثبت نام و نسخه، MTLS/HMAC/JWT و چرخش کلید، backpressure/DLQ/پخش، به حداقل رساندن PII و حسابرسی دقیق. با پیروی از این شیوه ها، شما یک جریان سریع، امن و قابل پیش بینی از حوادث دریافت خواهید کرد که در آن شما با اطمینان می توانید گیمیفیکیشن، ضد تقلب، CRM و پرداخت ها را ایجاد کنید.