بازگشت به کتابخانهکتابخانه5.2الگوهای Microservices
طراحی سیستم نرم‌افزاری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 5.2فصل ۵معماری نرم‌افزار

الگوهای Microservices

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

رستوران بزرگ شد. مشتری دیگر نباید برود داخل آشپزخانه از قصاب و شیرینی‌پز جدا بپرسد. یک میزبان دم در سفارش را می‌گیرد، هویت را چک می‌کند، و به ایستگاه درست می‌فرستد. اگر ایستگاه شیرینی سوخت، میزبان همان‌جا می‌گوید امروز کیک نداریم — کل سالن را معطل آشپز مرده نمی‌کند. اسم این میزبان API Gateway است.

دنیای چندسرویسی دردهای تازه دارد: پیداکردن آدرس ایستگاه، خرابی آبشاری، تراکنش بین چند دفتر. برای هر درد یک شغل جاافتاده هست. این‌ها واژگان مشترک مهندسان ارشدند — نه تزئین روی دیاگرام.

میزبان دم در و چند ایستگاه آشپزخانه
مشتری فقط با میزبان حرف می‌زند. سه ایستگاه جدا؛ یکی کرکره پایین است. API Gateway همان میزبان است؛ Circuit Breaker همان کرکره؛ Bulkhead همان جزیره‌های جدا.
DIAGRAMورود از یک در
Clients
API Gateway
Users svc
Orders svc
Payments svc
DB / صف هر سرویس

پنج کمربند ایمنی

هر تماس شبکه می‌تواند بشکند، دیر برسد، یا دوبار برسد. این پنج تا شغل‌شان این است که آن فرض را جدی بگیرند — نه اینکه بعد از حادثه یادت بیفتد.

API Gateway
تک‌درِ ورود. شغلش مسیریابی، احراز هویت، Rate Limit و گاهی تجمیع پاسخ است. کلاینت با ده سرویس حرف نمی‌زند؛ توپولوژی داخلی آزاد است عوض شود.
Service Discovery
ایستگاه‌ها می‌آیند و می‌روند. شغل رجیستری — Consul یا DNS داخل Kubernetes — این است که آدرس لحظه‌ای را بدهد، نه یک IP حک‌شده در کد.
Circuit Breaker
وقتی مقصد پشت‌هم خطا می‌دهد، مدار باز می‌شود: مدتی اصلاً صدایش نزن، Fallback بده. شغلش قطع کردن انتظار پشت آشپز مرده است تا سالن هم خفه نشود.
Timeout
هر فراخوانی شبکه‌ای باید سقف انتظار داشته باشد. بدون Timeout، یک سرویس کند تمام Thread های تو را می‌بلعد.
Retry
تلاش دوباره، فقط با Backoff نمایی و Jitter، و فقط برای کار Idempotent. Retry فوری و انبوه یعنی کوبیدن سرویسِ در حال احتضار.
Bulkhead
جداسازی منابع — Thread pool و اتصال — به‌ازای هر مقصد. شغلش این است که غرق شدن یک ایستگاه، کشتی را غرق نکند. اسمش از دیوار ضدآب کشتی آمده.

سفارش چندایستگاهی: Saga

سفارش = کسر موجودی + پرداخت + ارسال. هرکدام در سرویس خودش. تراکنش سراسری نداری؛ یک دفتر مشترک در کار نیست. Saga یعنی زنجیره‌ای از تراکنش‌های محلی که هرکدام رویداد بعدی را راه می‌اندازد — و برای هر قدم یک جبران تعریف می‌شود: پرداخت شکست → موجودی برگردد.

Compensation
تراکنش جبرانی. شغلش برگرداندن اثر قدم قبلی است، نه rollback جادویی سراسری. رزرو موجودی را آزاد می‌کنی؛ پول را برمی‌گردانی.
Choreography
هر سرویس به Event گوش می‌دهد و خودش قدم بعد را برمی‌دارد. غیرمتمرکز است؛ ردگیری‌اش سخت‌تر.
Orchestration
یک هماهنگ‌کننده مرکزی مراحل را می‌راند. قابل‌ردگیری‌تر است؛ خود هماهنگ‌کننده نباید SPOF شود.

به زبان ساده

هر تماس شبکه ممکن است بشکند، دیر برسد یا دوبار برسد. Gateway در است، Circuit Breaker فیوز، Bulkhead دیوار ضدآب، Saga زنجیره با جبران.

مثال واقعی

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

دانش‌سنجی

آزمون درس

۴ Q
01
Circuit Breaker چه مشکلی را حل می‌کند؟
02
Retry بدون کدام دو شرط خطرناک است؟
03
در Saga، شکست مرحله سوم چگونه جبران می‌شود؟
04
چرا کلاینت موبایل بهتر است فقط با API Gateway حرف بزند؟