Microservices Communication Patterns (Saga, Circuit Breaker) · レッスン

オーケストレーションのステートマシン

ステートマシンの概念を適用し、トランザクションの進行状況を追跡する堅牢で予測可能なSagaオーケストレーターを構築します。

レッスン 2/411 ステップ

「オーケストレーションのステートマシン」はCoddyKit上の無料Microservices Communication Patterns (Saga, Circuit Breaker)レッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはMicroservices Communication Patterns (Saga, Circuit Breaker)学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Microservices Communication Patterns (Saga, Circuit Breaker)コースには全4レッスンが含まれています。

このレッスンの一部はまだ翻訳されておらず、英語で表示されています。

State Machines for Sagas

Welcome to this lesson on using state machines to build robust saga orchestrators!

Orchestration sagas manage complex distributed transactions by keeping track of the overall process. State machines are a powerful tool for this.

Why State Machines?

A saga orchestrator needs to know the exact status of a business process at any given moment. This allows it to:

  • Decide the next action to take.
  • Handle failures and trigger compensation.
  • Ensure consistency across multiple services.

State machines provide a clear, structured way to model this complex logic.

State Machine Basics

At its core, a state machine consists of three main concepts:

  • States: Represent different phases or conditions of the saga (e.g., OrderCreated, PaymentPending).
  • Events: Occurrences that trigger changes in the saga (e.g., PaymentSuccessful, ShipmentFailed).
  • Transitions: Rules that define how an event causes the saga to move from one state to another.

Example: Order Processing Saga

Let's consider a common scenario: an online order processing saga.

This saga might involve several services:

  • Order Service
  • Payment Service
  • Shipping Service

The orchestrator needs to coordinate these steps.

Defining Saga States

For our order processing saga, we can define states like:

  • ORDER_CREATED: Initial state.
  • PAYMENT_PENDING: Waiting for payment confirmation.
  • PAID: Payment successful.
  • SHIPPING_PENDING: Waiting for shipment to be initiated.
  • SHIPPED: Item has been shipped.
  • CANCELLED: Order cancelled (due to failure or user action).

Defining Saga Events

And the events that can occur:

  • ORDER_PLACED: Customer places an order.
  • PAYMENT_SUCCESS: Payment service confirms payment.
  • PAYMENT_FAILED: Payment service reports failure.
  • SHIPMENT_SUCCESS: Shipping service confirms shipment.
  • SHIPMENT_FAILED: Shipping service reports an issue.
  • ORDER_CANCELLED_REQUEST: User requests cancellation.

State Transition Logic

The core of a state machine is its transition logic: Current State + Event = New State (and possibly an action).

For example:

  • If in ORDER_CREATED state and ORDER_PLACED event occurs, transition to PAYMENT_PENDING.
  • If in PAYMENT_PENDING state and PAYMENT_SUCCESS event occurs, transition to PAID.

This defines the predictable flow of your saga.

Code: Simple State Transition

Here's a simplified Java example demonstrating how states and events can drive transitions in an orchestrator.

Try running it to see the state changes!

public class SimpleSagaState {

    public enum SagaStepState {
        STARTED,
        PROCESSING_PAYMENT,
        PAYMENT_COMPLETE,
        FAILED
    }

    private SagaStepState currentState;

    public SimpleSagaState() {
        this.currentState = SagaStepState.STARTED;
    }

    public SagaStepState getCurrentState() {
        return currentState;
    }

    public void processEvent(String event) {
        System.out.println("Event: " + event);
        switch (currentState) {
            case STARTED:
                if ("OrderCreated".equals(event)) {
                    currentState = SagaStepState.PROCESSING_PAYMENT;
                }
                break;
            case PROCESSING_PAYMENT:
                if ("PaymentSuccess".equals(event)) {
                    currentState = SagaStepState.PAYMENT_COMPLETE;
                } else if ("PaymentFailed".equals(event)) {
                    currentState = SagaStepState.FAILED;
                }
                break;
            case PAYMENT_COMPLETE:
                // After payment, might go to shipping, etc.
                break;
            case FAILED:
                System.out.println("Saga already failed.");
                break;
        }
        System.out.println("New State: " + currentState);
    }

    public static void main(String[] args) {
        SimpleSagaState saga = new SimpleSagaState();
        System.out.println("Initial State: " + saga.getCurrentState());

        saga.processEvent("OrderCreated");
        saga.processEvent("PaymentSuccess");
        saga.processEvent("ShipmentInitiated"); // This event won't change state in this simplified example

        System.out.println("Final State: " + saga.getCurrentState());
    }
}

Compensation with States

One of the biggest advantages of using state machines for sagas is how they simplify compensation logic.

If a service fails, the orchestrator receives a 'failed' event. Based on the current state, the state machine can determine which compensation actions need to be triggered to reverse previous successful steps.

For example, if in PAID state and SHIPMENT_FAILED occurs, the state machine can transition to CANCELLED and trigger a refund.

State Transition Question

Consider an order saga using a state machine. The order is currently in the PAYMENT_PENDING state.

If the orchestrator receives a PAYMENT_FAILED event, what is the most appropriate next state for the saga, typically indicating compensation?

Recap: States for Orchestration

In this lesson, we explored how state machines are crucial for building robust saga orchestrators.

  • They provide a clear model for tracking saga progress.
  • States, Events, and Transitions define the saga's flow.
  • They simplify handling complex logic, especially for compensation.

By explicitly defining states and transitions, you create predictable and resilient distributed transactions.

無料で開始

AI チューターと学ぶ Microservices Communication Patterns (Saga, Circuit Breaker) — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
12
レッスン
48

よくある質問

「オーケストレーションのステートマシン」レッスンは無料ですか?

はい。「オーケストレーションのステートマシン」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Microservices Communication Patterns (Saga, Circuit Breaker)コースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Microservices Communication Patterns (Saga, Circuit Breaker)コースには全4レッスンが含まれています。

「オーケストレーションのステートマシン」で何を学びますか?

ステートマシンの概念を適用し、トランザクションの進行状況を追跡する堅牢で予測可能なSagaオーケストレーターを構築します。 ブラウザで直接実行するハンズオンコードでMicroservices Communication Patterns (Saga, Circuit Breaker)を演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Microservices Communication Patterns (Saga, Circuit Breaker)を始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのMicroservices Communication Patterns (Saga, Circuit Breaker)は初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「オーケストレーションのステートマシン」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このMicroservices Communication Patterns (Saga, Circuit Breaker)レッスンでコードを書いて実行できますか?

はい。すべてのMicroservices Communication Patterns (Saga, Circuit Breaker)レッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Sagaオーケストレーターの設計
  2. オーケストレーションのステートマシン
  3. ワークフローエンジンによる実装
  4. オーケストレーション型Sagaのテスト
← Microservices Communication Patterns (Saga, Circuit Breaker)に戻る