CodeShot

Choreography (رقص هماهنگ) در مقابل Orchestration (ارکستراسیون)

در Choreography هیچ کنترل‌کننده مرکزی وجود ندارد و هر سرویس با گوش‌دادن به رویدادهای سرویس‌های دیگر تصمیم می‌گیرد چه کاری انجام دهد، در حالی که در Orchestration یک هماهنگ‌کننده مرکزی (Orchestrator) وجود دارد که به‌صراحت به هر سرویس می‌گوید چه زمانی چه کاری انجام دهد.

ویژگیChoreography (رقص هماهنگ)Orchestration (ارکستراسیون)
کنترل مرکزیندارددارد
وابستگی بین سرویس‌هاکمبه Orchestrator
قابلیت ردیابی فرآینددشوارترساده‌تر

کِی از Choreography (رقص هماهنگ) استفاده کنیم؟

وقتی می‌خواهید سرویس‌ها کاملاً مستقل و کم‌وابسته به هم باقی بمانند و جریان کار به مرور زمان قابل توسعه باشد.

کِی از Orchestration (ارکستراسیون) استفاده کنیم؟

وقتی جریان کار پیچیده است و نیاز به دید و کنترل متمرکز روی وضعیت کل فرآیند (مثل ردیابی یک Saga طولانی) دارید.

مثال Choreography (رقص هماهنگ)

// Choreography: هر سرویس به رویداد قبلی گوش می‌دهد
OrderCreated -> InventoryService رزرو می‌کند
  -> StockReserved -> PaymentService پرداخت می‌گیرد

مثال Orchestration (ارکستراسیون)

// Orchestration: یک Orchestrator مرکزی فرمان می‌دهد
await _orchestrator.ReserveInventory(orderId);
await _orchestrator.ChargePayment(orderId);
await _orchestrator.ShipOrder(orderId);

اشتباه رایج

اشتباه رایج استفاده از Choreography برای فرآیندهای پیچیده و طولانی بدون هیچ ابزار ردیابی مرکزی است؛ در چنین حالتی فهمیدن وضعیت فعلی یا دیباگ کردن یک تراکنش خاص در میان ده‌ها رویداد پراکنده بسیار دشوار می‌شود.

جمع‌بندی

برای جریان‌های ساده و مستقل از Choreography و برای فرآیندهای پیچیده و طولانی که نیاز به کنترل و ردیابی متمرکز دارند از Orchestration استفاده کنید.