Microservices Communication Patterns (Saga, Circuit Breaker) · Pelajaran

Kunci Semantik dan Saga Konkuren

Tangani konkurensi dalam saga menggunakan tindakan pencegahan seperti kunci semantik, pembaruan komutatif, dan tampilan pesimistis untuk mencegah pembacaan kotor serta pembaruan yang hilang di antara transaksi yang saling tumpang tindih.

Pelajaran 4 dari 413 langkah

Kunci Semantik dan Saga Konkuren adalah pelajaran Microservices Communication Patterns (Saga, Circuit Breaker) gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Microservices Communication Patterns (Saga, Circuit Breaker), dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Microservices Communication Patterns (Saga, Circuit Breaker) mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

The Concurrency Problem

Sagas relax isolation: intermediate states are visible to other transactions. When two sagas touch the same data concurrently, you risk dirty reads, lost updates, and fuzzy reads.

This lesson covers countermeasures that restore safety without full ACID isolation.

Anomaly: Lost Update

A lost update happens when one saga overwrites a change made by another that it did not see.

  • Saga A reads balance 100.
  • Saga B reads balance 100, subtracts 30, writes 70.
  • Saga A subtracts 50 from its stale 100, writes 50.

B's deduction is lost.

Countermeasure: Semantic Lock

A semantic lock marks a record as in-progress using an application-level flag, not a database lock.

For example, set an order's status to PENDING. Other sagas see the flag and refuse to act until the saga commits or compensates.

order = {'id': 1, 'status': 'PENDING'}

def can_modify(order):
    return order['status'] != 'PENDING'

print('Can modify:', can_modify(order))

Releasing the Lock

The semantic lock is released by the final saga step or by the compensating transaction. The status moves to APPROVED or back to AVAILABLE.

def finalize(order, success):
    order['status'] = 'APPROVED' if success else 'CANCELLED'
    return order['status']

order = {'status': 'PENDING'}
print(finalize(order, True))

Countermeasure: Commutative Updates

Design updates that can be applied in any order and produce the same result. Addition and subtraction on a balance are commutative; setting an absolute value is not.

Prefer balance += delta over balance = newValue.

balance = 100
# two sagas apply deltas in any order
for delta in [-30, -50]:
    balance += delta
print('Final balance:', balance)

Countermeasure: Pessimistic View

Reorder saga steps so that the steps most likely to fail run first, minimizing the window during which dirty data is exposed.

If a risky step succeeds early, later steps are far less likely to need compensation.

Countermeasure: Reread Value

Before writing, reread the record and verify it has not changed since you read it. If it changed, abort and retry. This is optimistic concurrency control.

def safe_write(current_version, expected_version):
    if current_version != expected_version:
        return 'ABORT: data changed'
    return 'WRITE OK'

print(safe_write(5, 5))
print(safe_write(6, 5))

Version Numbers and Optimistic Locking

Store a version column with each record. Each update increments the version and includes the expected version in the WHERE clause.

  • If zero rows update, someone else changed it first.
  • The saga retries with fresh data.

Countermeasure: By Value

Choose your concurrency strategy by the business risk of the data. High-value records (large payments) get strict semantic locks; low-risk records use looser, more available approaches.

Combining Countermeasures

Real systems mix several techniques: a semantic lock to mark in-progress orders, commutative updates for counters, and version checks for critical writes. The goal is to keep sagas correct while preserving availability.

Trade-offs

Every countermeasure adds complexity. Semantic locks can cause contention; rereads add round-trips. Choose the lightest mechanism that prevents the anomalies your domain actually cares about.

Quick Check

Which countermeasure marks a record as in-progress using an application-level status so other sagas refuse to act on it?

Recap

You learned countermeasures for concurrent sagas:

  • Semantic locks flag in-progress records.
  • Commutative updates make order-of-application irrelevant.
  • Pessimistic view reorders risky steps first.
  • Reread/version checks catch concurrent changes.

Together these restore safety without full ACID isolation.

Gratis untuk memulai

Belajar Microservices Communication Patterns (Saga, Circuit Breaker) dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
12
Pelajaran
48

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kunci Semantik dan Saga Konkuren” gratis?

Ya — teks lengkap “Kunci Semantik dan Saga Konkuren” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Microservices Communication Patterns (Saga, Circuit Breaker), upgrade ke CoddyKit PRO. Kursus Microservices Communication Patterns (Saga, Circuit Breaker) mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kunci Semantik dan Saga Konkuren”?

Tangani konkurensi dalam saga menggunakan tindakan pencegahan seperti kunci semantik, pembaruan komutatif, dan tampilan pesimistis untuk mencegah pembacaan kotor serta pembaruan yang hilang di antara… Kamu berlatih Microservices Communication Patterns (Saga, Circuit Breaker) dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Microservices Communication Patterns (Saga, Circuit Breaker)?

Tidak diperlukan pengalaman sebelumnya. Microservices Communication Patterns (Saga, Circuit Breaker) di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Kunci Semantik dan Saga Konkuren” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Microservices Communication Patterns (Saga, Circuit Breaker) ini?

Ya. Setiap pelajaran Microservices Communication Patterns (Saga, Circuit Breaker) menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Memastikan Idempoten dalam Saga
  2. Strategi Percobaan Ulang untuk Saga
  3. Logika Kompensasi Lanjutan
  4. Kunci Semantik dan Saga Konkuren
← Kembali ke Microservices Communication Patterns (Saga, Circuit Breaker)