Microservices Communication Patterns (Saga, Circuit Breaker) · درس

تصميم منسّقات Saga

تعلّموا تصميم خدمة منسّق مخصصة مسؤولة عن إدارة حالة Saga وخطواتها.

الدرس 1 من 411 خطوة

تصميم منسّقات Saga درس مجاني في Microservices Communication Patterns (Saga, Circuit Breaker) على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Microservices Communication Patterns (Saga, Circuit Breaker)، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Microservices Communication Patterns (Saga, Circuit Breaker) 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

What is a Saga Orchestrator?

في نمط ملحمة التنسيق (Orchestration Saga)، تتولى خدمة مخصصة تُسمى المُنسِّق (Orchestrator) مسؤولية إدارة المعاملة الموزعة بالكامل.

يمكنك التفكير في الأمر كقائد فرقة موسيقية؛ فبدلاً من تفاعل الموسيقيين (الخدمات) الأفراد مع بعضهم البعض، يقوم القائد (المُنسِّق) بإخبار كل موسيقي بمتى يجب عليه أداء دوره.

Why Use an Orchestrator?

يوفر التنسيق (Orchestration) العديد من المزايا، خاصةً لتدفقات الأعمال المعقدة:

  • المنطق المركزي: يكمن كل منطق الـ (Saga) في مكان واحد، مما يسهل فهمه وإدارته.
  • تسهيل التغييرات: يعد تعديل خطوات الـ (Saga) أو إضافة خطوات جديدة أمراً أبسط، حيث يتم احتواء التغييرات داخل المُنسّق (Orchestrator).
  • وضوح أكبر في تصحيح الأخطاء: من الأسهل تتبع تدفق المعاملة وتحديد مكان حدوث الفشل بدقة.

Core Responsibilities

A saga orchestrator has crucial responsibilities to ensure the transaction completes successfully or is properly compensated:

  • Initiates Saga: Starts the transaction by sending the first command.
  • Tracks State: Maintains the current progress and state of the saga.
  • Coordinates Steps: Sends commands to participant services based on the current state and responses.
  • Handles Compensation: Triggers rollback actions if any step fails.

Example: Order Placement Saga

Let's consider an 'Order Placement' saga involving multiple services:

  1. Order Service: Creates the order.
  2. Payment Service: Processes the payment.
  3. Inventory Service: Updates stock.
  4. Shipping Service: Arranges delivery.

The orchestrator will guide the order through these steps.

Orchestrator State Management

The orchestrator must keep track of where the saga is in its lifecycle. This is its state. It typically stores:

  • sagaId: A unique identifier for the current transaction.
  • currentStep: Which step is currently active or has been completed.
  • status: e.g., IN_PROGRESS, COMPLETED, FAILED, COMPENSATING.

This state must be persisted (saved) so the orchestrator can recover if it crashes.

Designing the Flow

The orchestrator's design centers around a state machine-like flow:

  1. Orchestrator sends a command to a participant service (e.g., 'ProcessPayment').
  2. Participant service performs its action and sends an event back (e.g., 'PaymentProcessed' or 'PaymentFailed').
  3. Orchestrator receives the event, updates its state, and decides the next command to send, or initiates compensation.

Orchestrator Structure (Code)

Here's a simplified Java example showing how an orchestrator might manage its state and react to responses. This code simulates the flow:

public class OrderSagaOrchestrator {
  private String sagaId;
  private String currentState; 

  public OrderSagaOrchestrator(String id) {
    this.sagaId = id;
    this.currentState = "INITIATED";
    System.out.println("Saga " + sagaId + " state: " + currentState);
  }

  public void startOrderSaga() {
    System.out.println("Sending 'Process Payment' command.");
    this.currentState = "PAYMENT_PROCESSING";
    System.out.println("Saga " + sagaId + " state: " + currentState);
  }

  public void handlePaymentResponse(boolean success) {
    if (success) {
      System.out.println("Payment successful. Sending 'Update Inventory' command.");
      this.currentState = "INVENTORY_UPDATING";
    } else {
      System.out.println("Payment failed. Initiating compensation.");
      this.currentState = "FAILED";
    }
    System.out.println("Saga " + sagaId + " state: " + currentState);
  }

  public String getCurrentState() {
    return currentState;
  }

  public static void main(String[] args) {
    OrderSagaOrchestrator orchestrator = new OrderSagaOrchestrator("ORD-123");
    orchestrator.startOrderSaga();
    orchestrator.handlePaymentResponse(true); // Simulate success
    // orchestrator.handlePaymentResponse(false); // Try simulating failure
  }
}

Orchestrator Communication

For reliable communication, orchestrators typically interact with participant services via a message broker (like Apache Kafka or RabbitMQ).

  • Orchestrator publishes commands to queues/topics for specific services.
  • Participant services publish events (success or failure) back to topics that the orchestrator subscribes to.

This asynchronous messaging ensures loose coupling and resilience.

Implementing Compensation

If a participant service reports a failure, the orchestrator must initiate compensation. This means reversing any successfully completed steps.

For example, if payment succeeded but inventory update failed, the orchestrator would send a 'RefundPayment' command to the Payment Service.

The orchestrator's persisted state is vital here, as it knows exactly which steps need to be undone.

Quick Check

Which of the following are key responsibilities of a Saga Orchestrator?

Recap: Designing Orchestrators

In this lesson, we learned about designing a saga orchestrator. It's a dedicated service that acts as a central coordinator for distributed transactions.

  • It initiates steps, tracks state, and coordinates participant services.
  • Key to its design are persistent state management and robust communication via message brokers.
  • Orchestrators simplify debugging and managing complex business flows, especially with their built-in compensation logic.

Next, we'll explore how to use state machines to build even more robust orchestrators!

البدء مجانًا

تعلم Microservices Communication Patterns (Saga, Circuit Breaker) مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
12
الدروس
48

الأسئلة الشائعة

هل درس «تصميم منسّقات Saga» مجاني؟

نعم — نص درس «تصميم منسّقات Saga» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Microservices Communication Patterns (Saga, Circuit Breaker)، انتقل إلى CoddyKit PRO. تتضمن دورة Microservices Communication Patterns (Saga, Circuit Breaker) 4 دروس في المجموع.

ماذا ستتعلم في «تصميم منسّقات Saga»؟

تعلّموا تصميم خدمة منسّق مخصصة مسؤولة عن إدارة حالة Saga وخطواتها. تتمرن على Microservices Communication Patterns (Saga, Circuit Breaker) مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Microservices Communication Patterns (Saga, Circuit Breaker)؟

لا تُشترط خبرة سابقة. Microservices Communication Patterns (Saga, Circuit Breaker) على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تصميم منسّقات Saga»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Microservices Communication Patterns (Saga, Circuit Breaker) هذا؟

نعم. كل درس في Microservices Communication Patterns (Saga, Circuit Breaker) يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تصميم منسّقات Saga
  2. آلات الحالات للتنسيق المركزي
  3. التنفيذ باستخدام محرّك سير العمل
  4. اختبار sagas المنسّقة
← العودة إلى Microservices Communication Patterns (Saga, Circuit Breaker)