بلیتفروشی یعنی هزاران نفر همزمان برای چند صندلی محدود تلاش میکنند. نوتیفیکیشن یعنی یک اتفاق باید به افراد زیادی، از چند کانال و با تنظیمات شخصی برسد. در هر دو، کار اصلی را سریع و مطمئن انجام میدهیم و کارهای فرعی را به صف میسپاریم.
بلیتفروشی Flash Sale
- CDN و waiting room در لبه، ظرفیت checkout را محدود میکند؛ token صف امضاشده و expiry دارد و bypass آن مجاز نیست.
- منبع حقیقت صندلی در DB تراکنشی است: UPDATE ... WHERE status=free یا unique constraint؛ hold با expiry ثبت میشود، سپس payment pending و finally confirm.
- hold expiry باید job قابلاعتماد و idempotent داشته باشد؛ payment timeout = pending + reconciliation، نه آزادسازی حدسی صندلی.
- هر client action idempotency key دارد؛ وضعیت reservation state machine و audit log دارد.
Notification Platform
- producer فقط event معتبر منتشر میکند؛ policy service audience، consent، quiet hours، template و channel را تعیین میکند.
- هر channel adapter (email/SMS/push) queue و rate limit خودش را دارد؛ provider callback تکراری/دیررس idempotent مصرف میشود.
- dedup key و collapse key از spam جلوگیری میکنند؛ preference/opt-out منبع حقیقت و auditپذیر است.
- metrics: accepted، queued، sent، provider-accepted، delivered/clicked (با تعریف دقیق)، bounce و lag. «sent» به معنی «دیده شد» نیست.
به زبان ساده
بلیتفروشی یعنی مهار موج در لبه (اتاق انتظار) و رزرو اتمیک با انقضا در مرکز؛ نوتیفیکیشن هم یعنی صفهای جدا per کانال با احترام به ترجیحات کاربر.
مثال واقعی
صندلی با UPDATE شرطی hold میشود و ۱۰ دقیقه مهلت پرداخت دارد؛ اگر پرداخت نامعلوم ماند، صندلی حدسی آزاد نمیشود — reconciliation تصمیم میگیرد.