Bird
Raised Fist0
LLDsystem_design~12 mins

Payment handling in LLD - Architecture Diagram

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
System Overview - Payment handling

This system securely processes user payments for online purchases. It handles payment requests, validates them, communicates with external payment gateways, and updates order status. Key requirements include security, reliability, and fast response times.

Architecture Diagram
User
  |
  v
Load Balancer
  |
  v
API Gateway
  |
  v
Payment Service <--> Cache
  |
  v
Database
  |
  v
External Payment Gateway
Components
User
client
Initiates payment requests
Load Balancer
load_balancer
Distributes incoming requests evenly to API Gateway instances
API Gateway
api_gateway
Handles authentication, routing, and request validation
Payment Service
service
Processes payment logic, communicates with database and external gateway
Cache
cache
Stores recent payment status and reduces database load
Database
database
Stores payment records and order status
External Payment Gateway
external_service
Processes actual payment transactions with banks or card networks
Request Flow - 12 Hops
UserLoad Balancer
Load BalancerAPI Gateway
API GatewayPayment Service
Payment ServiceCache
CachePayment Service
Payment ServiceDatabase
Payment ServiceExternal Payment Gateway
External Payment GatewayPayment Service
Payment ServiceCache
Payment ServiceAPI Gateway
API GatewayLoad Balancer
Load BalancerUser
Failure Scenario
Component Fails:Database
Impact:New payment records cannot be saved; payment status updates fail. Cached payment status can still be served for recent queries.
Mitigation:Use database replication and failover to a standby database. Cache serves read requests temporarily. Alert system triggers for manual intervention.
Architecture Quiz - 3 Questions
Test your understanding
Which component first handles user payment requests after they pass through the Load Balancer?
AAPI Gateway
BPayment Service
CCache
DDatabase
Design Principle
This architecture uses layered components to separate concerns: Load Balancer for traffic distribution, API Gateway for security and routing, Payment Service for business logic, Cache for performance, Database for persistence, and External Gateway for actual payment processing. This separation improves scalability, reliability, and maintainability.

Practice

(1/5)
1. What is the primary purpose of a payment handling system in software design?
easy
A. To store user profile pictures
B. To securely process and record financial transactions
C. To manage user login and authentication
D. To display product information to users

Solution

  1. Step 1: Understand the role of payment handling

    Payment handling systems focus on managing money transfers safely and reliably.
  2. Step 2: Identify the core function

    The core function is to process payments securely and keep records of transactions.
  3. Final Answer:

    To securely process and record financial transactions -> Option B
  4. Quick Check:

    Payment handling = Secure transaction processing [OK]
Hint: Payment handling means safe money transfer and record keeping [OK]
Common Mistakes:
  • Confusing payment handling with user authentication
  • Thinking it manages product display
  • Assuming it stores user media files
2. Which of the following is the correct sequence of steps in a typical payment processing flow?
easy
A. Notify user -> Record transaction -> Process payment -> Validate payment details
B. Record transaction -> Validate payment details -> Notify user -> Process payment
C. Validate payment details -> Process payment -> Record transaction -> Notify user
D. Process payment -> Notify user -> Validate payment details -> Record transaction

Solution

  1. Step 1: Identify logical payment flow order

    First, payment details must be validated to ensure correctness.
  2. Step 2: Follow with processing, recording, and notifying

    After validation, payment is processed, transaction recorded, then user notified.
  3. Final Answer:

    Validate payment details -> Process payment -> Record transaction -> Notify user -> Option C
  4. Quick Check:

    Payment flow = Validate -> Process -> Record -> Notify [OK]
Hint: Payment flows from validation to processing, then record and notify [OK]
Common Mistakes:
  • Not validating before processing
  • Not recording transaction before notifying
  • Mixing notification before processing
3. Consider this simplified payment processing pseudocode:
def process_payment(amount, card_info):
    if not validate_card(card_info):
        return "Invalid card"
    if amount <= 0:
        return "Invalid amount"
    if not charge_card(card_info, amount):
        return "Charge failed"
    record_transaction(card_info, amount)
    return "Payment successful"

What will be the output of process_payment(100, 'expired_card') if validate_card returns False for expired cards?
medium
A. "Invalid card"
B. "Charge failed"
C. "Payment successful"
D. "Invalid amount"

Solution

  1. Step 1: Check card validation result

    Since validate_card returns False for expired cards, the first if condition triggers.
  2. Step 2: Return error message immediately

    The function returns "Invalid card" without further processing.
  3. Final Answer:

    "Invalid card" -> Option A
  4. Quick Check:

    Expired card -> validate_card = False -> "Invalid card" [OK]
Hint: If validation fails, function returns error immediately [OK]
Common Mistakes:
  • Assuming charge_card runs despite invalid card
  • Confusing invalid amount with invalid card
  • Expecting success despite validation failure
4. A payment system logs duplicate transactions when retrying failed payments. Which design fix will best prevent this issue?
medium
A. Use unique transaction IDs and check before recording
B. Increase payment timeout duration
C. Remove transaction logging entirely
D. Allow multiple retries without checks

Solution

  1. Step 1: Identify cause of duplicate logs

    Retries cause repeated transaction records without uniqueness checks.
  2. Step 2: Implement unique transaction IDs and check

    Assign unique IDs and verify before logging to avoid duplicates.
  3. Final Answer:

    Use unique transaction IDs and check before recording -> Option A
  4. Quick Check:

    Unique IDs prevent duplicate transaction logs [OK]
Hint: Unique IDs stop duplicate transaction records [OK]
Common Mistakes:
  • Ignoring duplicate checks on retries
  • Removing logging which loses audit trail
  • Increasing timeout doesn't fix duplicates
5. You are designing a payment system that must handle 10,000 transactions per second with minimal latency and high reliability. Which architectural approach best supports this requirement?
hard
A. Store all payment requests in a single database table and process sequentially
B. Process all payments synchronously on a single server to ensure order
C. Use client-side scripts to process payments directly without server validation
D. Use a distributed message queue to process payments asynchronously with multiple worker nodes

Solution

  1. Step 1: Analyze scalability and latency needs

    Handling 10,000 TPS requires distributing load and minimizing blocking.
  2. Step 2: Choose asynchronous distributed processing

    Using a message queue with multiple workers allows parallel processing and reliability.
  3. Step 3: Eliminate options causing bottlenecks or insecurity

    Single server or sequential DB processing causes bottlenecks; client-side processing lacks security.
  4. Final Answer:

    Use a distributed message queue to process payments asynchronously with multiple worker nodes -> Option D
  5. Quick Check:

    High TPS + low latency = distributed async processing [OK]
Hint: Distribute load with async workers for high TPS [OK]
Common Mistakes:
  • Using single server causing bottlenecks
  • Sequential DB processing slowing throughput
  • Relying on client-side payment processing