Bird
Raised Fist0
Microservicessystem_design~20 mins

Saga pattern for distributed transactions in Microservices - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
Saga Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
2:00remaining
What is the primary purpose of the Saga pattern in microservices?

Consider a system where multiple microservices need to update their data as part of a single business transaction. What is the main goal of using the Saga pattern in this context?

ATo coordinate a sequence of local transactions with compensating actions to maintain data consistency without distributed locks.
BTo ensure all microservices update their data atomically using distributed locks.
CTo replicate data synchronously across all microservices to avoid inconsistencies.
DTo use a centralized database to handle all transactions for microservices.
Attempts:
2 left
💡 Hint

Think about how Saga handles failures without locking resources across services.

Architecture
intermediate
2:00remaining
Which architecture best represents the Saga pattern with event-based choreography?

In the Saga pattern, event-based choreography means services react to events to continue the transaction. Which diagram best shows this flow?

AAll services update a shared database table to track transaction progress.
BA central orchestrator sends commands to each service to perform transactions in order.
CEach service publishes events after completing its local transaction, triggering the next service to act without a central coordinator.
DServices use distributed locks to coordinate transaction steps.
Attempts:
2 left
💡 Hint

Think about how services communicate without a central controller in event-based choreography.

scaling
advanced
2:00remaining
How does the Saga pattern help scale distributed transactions in microservices?

Imagine a high-traffic system with many distributed transactions. How does using the Saga pattern improve scalability compared to traditional two-phase commit?

ABy locking all resources globally during the transaction to prevent conflicts.
BBy requiring all services to complete their transactions before any service commits.
CBy using a single database instance to handle all transaction coordination.
DBy breaking transactions into smaller local steps that can run independently and asynchronously, reducing blocking and contention.
Attempts:
2 left
💡 Hint

Consider how asynchronous local transactions affect system throughput and resource usage.

tradeoff
advanced
2:00remaining
What is a key tradeoff when using the Saga pattern for distributed transactions?

While the Saga pattern improves scalability and availability, what is a common tradeoff developers must handle?

AIt guarantees strong consistency across all services at all times.
BIt requires complex compensating transactions and eventual consistency, which can complicate error handling.
CIt eliminates the need for any transaction coordination or monitoring.
DIt forces all services to use the same database technology.
Attempts:
2 left
💡 Hint

Think about what happens if a step in the Saga fails after some steps have succeeded.

estimation
expert
3:00remaining
Estimate the maximum throughput impact of Saga pattern compensations in a system with 1000 transactions per second and 5% failure rate at step 3.

A Saga consists of 5 steps. Step 3 fails in 5% of transactions, triggering compensations for steps 1 and 2. Each compensation takes 10ms. What is the approximate additional processing time per second due to compensations?

A1000 transactions * 5% failures * 2 compensations * 10ms = 1000ms (1 second) extra processing per second.
B1000 transactions * 5% failures * 5 steps * 10ms = 2500ms (2.5 seconds) extra processing per second.
C1000 transactions * 10ms = 10,000ms (10 seconds) extra processing per second.
D1000 transactions * 5% failures * 10ms = 500ms (0.5 seconds) extra processing per second.
Attempts:
2 left
💡 Hint

Calculate how many compensations run per second and multiply by their duration.

Practice

(1/5)
1. What is the main purpose of the Saga pattern in microservices?
easy
A. To replicate data across multiple databases synchronously
B. To manage distributed transactions by breaking them into smaller steps with compensations
C. To speed up database queries by caching results
D. To lock all resources until the transaction completes

Solution

  1. Step 1: Understand distributed transactions challenges

    Distributed transactions across microservices are hard because locking resources is inefficient and can cause delays.
  2. Step 2: Identify Saga pattern role

    The Saga pattern breaks a big transaction into smaller steps, each with a compensating action to undo if needed, avoiding locks.
  3. Final Answer:

    To manage distributed transactions by breaking them into smaller steps with compensations -> Option B
  4. Quick Check:

    Saga pattern = distributed transaction management [OK]
Hint: Saga means small steps with undo actions for transactions [OK]
Common Mistakes:
  • Thinking Saga locks resources like traditional transactions
  • Confusing Saga with caching or replication
  • Assuming Saga runs all steps in parallel
2. Which of the following is the correct sequence in a Saga pattern transaction?
easy
A. Execute steps and compensations simultaneously
B. Run compensations first, then execute all steps
C. Execute only compensations without any steps
D. Execute steps sequentially, then run compensations if any step fails

Solution

  1. Step 1: Understand Saga execution flow

    Saga executes each step in order. If a step fails, compensations undo previous steps.
  2. Step 2: Confirm correct sequence

    Compensations run only after a failure, never before or simultaneously with steps.
  3. Final Answer:

    Execute steps sequentially, then run compensations if any step fails -> Option D
  4. Quick Check:

    Steps then compensations = correct Saga flow [OK]
Hint: Steps run first; compensations only if failure occurs [OK]
Common Mistakes:
  • Running compensations before any step
  • Running steps and compensations at the same time
  • Skipping compensations on failure
3. Consider a Saga with three steps: A, B, and C. Step B fails after A succeeds. What happens next?
medium
A. Saga retries step B indefinitely without compensation
B. Step C runs regardless of failure
C. Compensation for step A runs, then Saga aborts
D. No compensation runs; Saga commits partial results

Solution

  1. Step 1: Analyze failure impact in Saga

    When step B fails, Saga must undo previous successful steps to keep data consistent.
  2. Step 2: Identify compensation actions

    Compensation for step A runs to rollback its changes, then Saga aborts without running step C.
  3. Final Answer:

    Compensation for step A runs, then Saga aborts -> Option C
  4. Quick Check:

    Failure triggers compensation rollback [OK]
Hint: Failure in middle triggers compensations backward [OK]
Common Mistakes:
  • Assuming later steps run after failure
  • Thinking Saga retries endlessly without rollback
  • Ignoring compensation steps
4. A developer implemented a Saga but noticed data inconsistencies after failures. What is the most likely cause?
medium
A. Compensation actions are missing or incomplete
B. All steps are executed synchronously
C. Steps are too small and independent
D. Saga pattern locks all resources during execution

Solution

  1. Step 1: Identify cause of inconsistencies

    Data inconsistencies after failure usually mean rollback (compensation) did not happen properly.
  2. Step 2: Check compensation implementation

    If compensation actions are missing or incomplete, previous steps cannot be undone, causing inconsistency.
  3. Final Answer:

    Compensation actions are missing or incomplete -> Option A
  4. Quick Check:

    Missing compensation = inconsistency [OK]
Hint: Always implement full compensations for each step [OK]
Common Mistakes:
  • Assuming synchronous execution causes inconsistency
  • Believing small steps cause inconsistency
  • Thinking Saga locks resources like traditional transactions
5. You design a payment system using Saga pattern with steps: debit account, reserve inventory, and confirm order. If inventory reservation fails, what should happen?
hard
A. Run compensation to credit back the debited amount and abort order confirmation
B. Ignore failure and proceed to confirm order
C. Retry inventory reservation indefinitely without compensation
D. Lock all services until inventory is reserved

Solution

  1. Step 1: Understand Saga compensation in payment flow

    If inventory reservation fails, previous successful steps (debit account) must be undone to avoid inconsistent state.
  2. Step 2: Apply compensation and abort

    Compensation credits back the debited amount, and order confirmation is aborted to maintain consistency.
  3. Final Answer:

    Run compensation to credit back the debited amount and abort order confirmation -> Option A
  4. Quick Check:

    Failure triggers compensation rollback and abort [OK]
Hint: Failure in middle step triggers rollback of prior steps [OK]
Common Mistakes:
  • Proceeding despite failure causing inconsistent state
  • Retrying endlessly without rollback
  • Locking services defeats Saga benefits