بازگشت به کتابخانهکتابخانه8.6Case Study: فروشگاه آنلاین
طراحی سیستم نرم‌افزاریSYSTEM DESIGNاز صفر تا تسلط
v1.0.0
01مبانی و تصویر بزرگ
02Scalability و ظرفیت
03لایه داده
04Cache، Queue و جریان
05معماری نرم‌افزار
06قابلیت اطمینان و عملیات
07متد طراحی
08Case Study های واقعی
09سیستم‌های توزیع‌شده عمیق
10مهندسی تولید: داده، امنیت و کارایی
11تمرین پیشرفته و کیس‌استادی‌های مکمل
12زیر کاپوت دیتابیس و معماری داده
13وب بلادرنگ و پروتکل‌های مدرن
14سیستم‌های توزیع‌شده پیشرفته
15SaaS ،SRE ،امنیت و شبکه پیشرفته
16طراحی سیستم در عصر AI
17Case Study های تکمیلی
LESSON 8.6فصل ۸Case Study های واقعی

Case Study: فروشگاه آنلاین

  • ~۱۳ دقیقه
  • ۳ پرسش
  • متن را انتخاب کن تا هایلایت شود

مسئله: کاتالوگ، سبد خرید، سفارش و موجودی — جایی که Read-Heavy (کاتالوگ) و Write-critical (سفارش/موجودی) در یک محصول جمع‌اند و باید جدا مهندسی شوند.

۱-۳) نیازمندی و طرح کلان

  • کاتالوگ و جستجو: Read-Heavy خالص → کش تهاجمی + CDN + Elasticsearch؛ کهنگی چندثانیه‌ای مجاز.
  • سبد خرید: داده per-user پرتغییر و قابل بازیابی → Redis (با TTL بلند) + پشتوانه DB برای login بین دستگاه‌ها.
  • سفارش و پرداخت: مقدس — ACID ،idempotency، صفر گم‌شدگی.
  • موجودی: مرز جنگ — همزمانی بالا روی کالای محدود.
DIAGRAMثبت سفارش
Checkout svc
DB تراکنشی — سفارش + رزرو موجودی
Outbox → Kafka
ایمیل
انبار
تحلیل

۴) عمق — موجودی و فروش ویژه

  • ضدـoversell: هرگز check-then-write جدا؛ یا UPDATE اتمی شرطی (SET stock=stock-1 WHERE stock>0) یا شمارنده اتمی Redis که از DB سرچشمه می‌گیرد.
  • رزرو دومرحله‌ای: افزودن به سبد ≠ رزرو؛ رزرو در checkout با TTL (مثلاً ۱۰ دقیقه) — انقضا برگرداندن خودکار.
  • Flash Sale: صف/waiting room جلوی checkout، موجودی در Redis اتمی، بقیه مسیر async — فصل ۴ را زنده کن.
  • قیمت و تخفیف در لحظه ثبت «فریز» می‌شود — تغییر بعدی قیمت، سفارش قبلی را عوض نمی‌کند (snapshot).
  • سفارش = state machine با رویدادها (placed → paid → shipped → delivered)؛ هر مصرف‌کننده (انبار، ایمیل) idempotent.

به زبان ساده

فروشگاه آنلاین یعنی کاتالوگ خواندنیِ کش‌پذیر، سبد خرید سبک، و یک مسیر پرداخت باریک ولی بسیار سخت‌گیر که همه انعطاف سیستم را می‌بلعد.

مثال واقعی

در حراج، صفحه محصول را CDN و کش تحمل می‌کنند؛ گلوگاه واقعی checkout است — آنجا موجودی با UPDATE شرطی کم می‌شود تا دو نفر آخرین کالا را نخرند.

دانش‌سنجی

آزمون درس

۳ Q
01
ریشه باگ oversell (فروش بیش از موجودی)؟
02
سبد خرید کجا بنشیند؟
03
چرا رویداد OrderPlaced از Outbox منتشر می‌شود نه مستقیم؟