0Pricing
Microservices Communication Patterns (Saga, Circuit Breaker) · 강의

사가 오케스트레이터 설계

사가의 상태와 단계를 관리하는 전담 오케스트레이터 서비스를 설계하는 방법을 학습합니다.

사가 오케스트레이터 설계은(는) CoddyKit의 무료 Microservices Communication Patterns (Saga, Circuit Breaker) 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Microservices Communication Patterns (Saga, Circuit Breaker) 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Microservices Communication Patterns (Saga, Circuit Breaker) 강의에는 총 4개의 강의가 포함되어 있습니다.

이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.

What is a Saga Orchestrator?

In an Orchestration Saga, a dedicated service, called the Orchestrator, takes charge of managing the entire distributed transaction.

Think of it as a conductor in an orchestra. Instead of individual musicians (services) reacting to each other, the conductor (orchestrator) tells each musician when to play their part.

Why Use an Orchestrator?

Orchestration offers several advantages, especially for complex business flows:

  • Centralized Logic: All saga logic resides in one place, making it easier to understand and manage.
  • Easier Changes: Modifying saga steps or adding new ones is simpler as changes are contained within the orchestrator.
  • Clearer Debugging: It's easier to trace the flow of a transaction and pinpoint exactly where a failure occurred.

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!

자주 묻는 질문

“사가 오케스트레이터 설계” 강의는 무료인가요?

네 — “사가 오케스트레이터 설계” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Microservices Communication Patterns (Saga, Circuit Breaker) 강의 전체를 잠금 해제할 수 있습니다. Microservices Communication Patterns (Saga, Circuit Breaker) 강의에는 총 4개의 강의가 포함되어 있습니다.

“사가 오케스트레이터 설계”에서 뭘 배우나요?

사가의 상태와 단계를 관리하는 전담 오케스트레이터 서비스를 설계하는 방법을 학습합니다. 브라우저에서 직접 실행하는 실습 코드로 Microservices Communication Patterns (Saga, Circuit Breaker)을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Microservices Communication Patterns (Saga, Circuit Breaker)을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Microservices Communication Patterns (Saga, Circuit Breaker)은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“사가 오케스트레이터 설계” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Microservices Communication Patterns (Saga, Circuit Breaker) 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Microservices Communication Patterns (Saga, Circuit Breaker) 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 사가 오케스트레이터 설계
  2. 오케스트레이션을 위한 상태 머신
  3. 워크플로 엔진을 사용한 구현
  4. 오케스트레이션 사가 검증
← Microservices Communication Patterns (Saga, Circuit Breaker)(으)로 돌아가기