GET /work/rsvapi200 OK
02 / 08 · سرویس بکاند · 2026
RsvAPI
بکاند بلیتفروشی رویداد؛ جایی که آخرین بلیت فقط یکبار فروخته میشود.
یک بکاند مقیاسپذیر برای بلیتفروشی با Node.js و TypeScript که کل چرخه رزرو را پوشش میدهد: مدیریت رویداد و بلیت، رزرو و پردازش پرداخت.
01 / مسئله
مسئله
وقتی چند نفر همزمان سراغ بلیتهای محدود میروند، کدِ ساده ممکن است یک صندلی را دوبار بفروشد. بکاندِ بلیتفروشی باید زیر درخواستهای همزمان هم درست کار کند، نه فقط در مسیر ایدهآل.
مسئله، به تصویر
02 / نقش من
نقش من
طراحی و پیادهسازی کامل سرویس، از ابتدا تا انتها.
03 / تصمیمهای مهم
تصمیمهای مهم
- 01
رزرو بهصورت تراکنش انجام میشود
ثبت رزرو و بهروزرسانی موجودی با هم موفق یا ناموفق میشوند؛ پس دیتابیس هیچوقت نیمهکاره بهروز نمیماند.
- 02
کنترل همزمانی صریح
درخواستهای رقیب برای یک بلیت عمداً مدیریت میشوند تا شرایط رقابتی (race condition) فروش را از موجودی بالاتر نبرد.
- 03
کش با Redis
دادههایی که زیاد خوانده میشوند در Redis کش میشوند تا فشار از روی PostgreSQL کم شود.
- 04
لایههای تمیز، ورودیهای اعتبارسنجیشده
مسیرها، منطق کسبوکار و دسترسی به داده از هم جدا هستند. ورودی با Zod اعتبارسنجی میشود، احراز هویت با JWT است، API در Swagger مستند شده و تستهای یکپارچگی و Docker قابلیت تکرار را تضمین میکنند.
04 / بخش سخت کار
غیرممکن کردن فروش بیشازحد، نه فقط بعید کردنش. بخش جذاب کار در مسیرهای همزمان بود، نه در CRUD.
ابزارها
- Node.js
- TypeScript
- Express.js
- PostgreSQL
- TypeORM
- Redis
- JWT
- Zod
- Swagger
- Integration tests
- Docker