λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
System Design

System Design: Message Deduplication System

by 주발2 2024. 10. 27.
λ°˜μ‘ν˜•

https://medium.com/@aditimishra_541/system-design-message-deduplication-system-afb4679c3c00

 

System Design: Message Deduplication System

1. Overview

medium.com

 

 

1. Overview

이 아티클은 μˆ˜μ‹  λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ³  10초 이내에 λ„μ°©ν•œ λ°˜λ³΅λ˜λŠ” λ©”μ‹œμ§€λ₯Ό ν•„ν„°λ§ν•˜λŠ” μ‹œμŠ€ν…œ λ””μžμΈμ— λŒ€ν•΄ μ„€λͺ…ν•©λ‹ˆλ‹€.

μ£Όμš” λͺ©ν‘œλŠ” μ§€λ‚œ 10μ΄ˆκ°„ 고유 λ©”μ‹œμ§€κ°€ μ²˜λ¦¬λ˜μ§€ μ•Šμ€ κ²½μš°μ—λ§Œ μ²˜λ¦¬λ˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 λ””μžμΈμ€ 쀑볡 μ²˜λ¦¬λ‚˜ 둜그λ₯Ό λ°©μ§€ν•˜κΈ° μœ„ν•΄ λ©”μ‹œμ§€ 쀑볡 μ œκ±°κ°€ μ€‘μš”ν•œ μ‹€μ‹œκ°„ μ‹œμŠ€ν…œμ— μ ν•©ν•©λ‹ˆλ‹€.

 

2. Requirements

κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­

  • μ‹œμŠ€ν…œμ€ λ„μ°©ν•œ μˆœμ„œλŒ€λ‘œ μˆ˜μ‹  λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • λ©”μ‹œμ§€κ°€ 10초 이내에 λ°˜λ³΅λ˜λŠ” 경우, μ²˜λ¦¬λ˜μ–΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.
  • 10초 ν›„ λ„μ°©ν•˜λŠ” λ©”μ‹œμ§€λŠ” μƒˆλ‘œμš΄ λ©”μ‹œμ§€λ‘œ μ·¨κΈ‰λ˜μ–΄ μ²˜λ¦¬λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

λΉ„κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­

  • ν™•μž₯μ„±: μ‹œμŠ€ν…œμ€ μ—¬λŸ¬ ν”„λ₯˜λ„μ„œμ˜ λŒ€λŸ‰ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 짧은 μ§€μ—°μ‹œκ°„: μ‹œμŠ€ν…œμ€ λ©”μ‹œμ§€ μˆ˜μ‹ κ³Ό 처리 사이에 μ΅œμ†Œν•œμ˜ 지연을 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • 내결함성: μ‹œμŠ€ν…œμ€ μž₯애에 탄λ ₯적으둜 λŒ€μ‘ν•˜μ—¬ λ©”μ‹œμ§€κ°€ μ†μ‹€λ˜κ±°λ‚˜ 잘λͺ» μ²˜λ¦¬λ˜μ§€ μ•Šλ„λ‘ ν•΄μ•Όν•©λ‹ˆλ‹€.
  • λ™μ‹œμ„±: μ‹œμŠ€ν…œμ€ 경쟁 쑰건 없이 λ™μ‹œμ„±μ˜ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

3. High-Level Architecture

 μ»΄ν¬λ„ŒνŠΈ:

  • Message Producers: μ‹œμŠ€ν…œμ— λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜κ³  μ „μ†‘ν•©λ‹ˆλ‹€.
  • Message Queue: μˆ˜μ‹  λ©”μ‹œμ§€λ₯Ό λ²„νΌλ§ν•˜μ—¬ 순차 μ²˜λ¦¬κ°€ λ˜λ„λ‘ 보μž₯ν•©λ‹ˆλ‹€.
  • Message Processing Service: λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ³ , 쀑볡 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ³ , μ²˜λ¦¬ν•  지 κ²°μ •ν•©λ‹ˆλ‹€.
  • Deduplication Store (In-Memory Cache): 각 λ©”μ‹œμ§€μ˜ λ§ˆμ§€λ§‰μ— λ°œμƒν•œ νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
  • Logging/Printing Service: 쀑볡 제거 검사λ₯Ό ν†΅κ³Όν•œ λ©”μ‹œμ§€μ˜ 좜λ ₯을 μ²˜λ¦¬ν•©λ‹ˆλ‹€.

 

4. Detailed Design

4.1 Message Producers

  • Role: λ©”μ‹œμ§€ 큐에 λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜κ³  μ „μ†‘ν•©λ‹ˆλ‹€.
  • Considerations: λ©”μ‹œμ§€μ— νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό 톡해 순차 처리λ₯Ό μœ μ§€ν•©λ‹ˆλ‹€. ProducersλŠ” λ©”μ‹œμ§€ 큐λ₯Ό μΌμ‹œμ μœΌλ‘œ μ‚¬μš©ν•  수 μ—†λŠ” 경우, λ„€νŠΈμ›Œν¬ μž₯μ• λ‚˜ μž¬μ‹œλ„ 처리λ₯Ό ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

4.2 Message Queue

  • Role: λ©”μ‹œμ§€κ°€ λ„μ°©ν•œ μˆœμ„œλŒ€λ‘œ μ²˜λ¦¬λ˜λ„λ‘ 보μž₯ν•˜κ³ , 처리 μ„œλΉ„μŠ€κ°€ 느린 경우 λ²„νΌλ§ν•©λ‹ˆλ‹€.

Technology Choices:

  • Apache Kafka: λΆ„μ‚°ν˜• κ³ μ²˜λ¦¬λŸ‰ λ©”μ‹œμ§€ 처리용
  • RabbitMQ: λ‹€μ–‘ν•œ λΌμš°νŒ… μ˜΅μ…˜μ„ μ§€μ›ν•˜μ—¬ μ•ˆμ •μ μΈ λ©”μ‹œμ§€ 전달을 제곡
  • AWS SQS: ν™•μž₯성을 μ œκ³΅ν•˜λŠ” μ™„μ „ κ΄€λ¦¬ν˜• 큐 μ„œλΉ„μŠ€
  • Considerations: FIFO μ²˜λ¦¬λŠ” λ©”μ‹œμ§€μ˜ μˆœμ„œλ₯Ό μœ μ§€ν•˜λŠ” 데 맀우 μ€‘μš”

4.3 Message Processing Service

  • Role: 각 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ³ , 쀑볡 제거 μ €μž₯μ†Œλ₯Ό μ‚¬μš©ν•˜μ—¬ 쀑볡 μ—¬λΆ€λ₯Ό ν™•μΈν•˜κ³ , λ©”μ‹œμ§€ 처리
  • Worker Pool: λ©”μ‹œμ§€λ₯Ό λ™μ‹œμ— μ²˜λ¦¬ν•  μž‘μ—…μž λ…Έλ“œ 집합
  • Deduplication Logic:
    • 각 λ©”μ‹œμ§€μ— λŒ€ν•΄ 쀑볡 μ €μž₯μ†Œμ—μ„œ λ§ˆμ§€λ§‰μ— λ°œμƒν•œ λ‚΄μš©μ„ 확인
    • λ©”μ‹œμ§€κ°€ 10초 이내에 처리 λ˜μ—ˆλ‹€λ©΄ 폐기
    • λ©”μ‹œμ§€κ°€ μƒˆ λ©”μ‹œμ§€μ΄κ±°λ‚˜ 10μ΄ˆκ°€ μ§€λ‚œ 경우 μ²˜λ¦¬ν•˜κ³  μ €μž₯μ†Œ μ—…λ°μ΄νŠΈ
  • Concurrency Control: 경쟁 쑰건을 ν”Όν•˜κΈ° μœ„ν•΄ μΊμ‹œμ˜ λΆ„μ‚° λ½μ΄λ‚˜ μ›μž(Atomic) μ—°μ‚° μ‚¬μš©
  • Fault Tolerance: λ©”μ‹œμ§€ 처리 μ‹€νŒ¨λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μž¬μ‹œλ„ λ‘œμ§μ„ κ΅¬ν˜„

4.4 Deduplication Store (In-Memory Cache)

  • Role: 각 λ©”μ‹œμ§€κ°€ λ§ˆμ§€λ§‰μœΌλ‘œ 처리된 μ‹œμ μ˜ νƒ€μž„μŠ€νƒ¬ν”„ μ €μž₯
  • Technology Choices:
    • Redis: λΉ λ₯Έ 쑰회 및 μžλ™ λ§Œλ£Œμ— 이상적인 TTL(Time-To-Live)을 μ§€μ›ν•˜λŠ” 인메λͺ¨λ¦¬μ˜ key-value μ €μž₯μ†Œ
    • Memcached: Redis보닀 κΈ°λŠ₯이 ν’λΆ€ν•˜μ§€λŠ” μ•Šμ§€λ§Œ 고속 캐싱을 μœ„ν•œ κ°„λ‹¨ν•œ λŒ€μ•ˆ
  • Workflow:
    • Key: λ©”μ‹œμ§€μ˜ λ‚΄μš© ν˜Ήμ€ ν•΄μ‹œ
    • Value: λ©”μ‹œμ§€κ°€ λ§ˆμ§€λ§‰μœΌλ‘œ 처리된 μ‹œμ μ˜ νƒ€μž„μŠ€νƒ¬ν”„
    • TTL: 이전 λ©”μ‹œμ§€μ˜ μžλ™ 만료λ₯Ό 보μž₯ν•˜κΈ° μœ„ν•΄ 10초둜 μ„€μ •
  • Considerations:
    • λ©”μ‹œμ§€ 처리 속도가 λŠλ €μ§€μ§€ μ•Šλ„λ‘ 지연 μ‹œκ°„μ΄ 짧은 μž‘μ—…μ„ 보μž₯
    • μΊμ‹œλŠ” λŒ€λŸ‰μ˜ 고유 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ„λ‘ λΆ„μ‚°λ˜κ±°λ‚˜ ν™•μž₯ κ°€λŠ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.

4.5 Logging / Printing Service

  • Role: 쀑볡 제거 검사λ₯Ό ν†΅κ³Όν•œ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κ±°λ‚˜ κΈ°λ‘ν•˜λŠ” 역할을 ν•©λ‹ˆλ‹€.
  • Idempotency: λ©”μ‹œμ§€κ°€ 쀑볡 μ²˜λ¦¬λ˜μ§€ μ•Šλ„λ‘ 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • Reliability: λ©”μ‹œμ§€λŠ” λ‚΄κ΅¬μ„±μžˆκ³  μ‹ λ’°ν•  수 μžˆλŠ” λ°©μ‹μœΌλ‘œ 기둝해야 ν•©λ‹ˆλ‹€.

 

5. Sequence Diagram

  1. Message Arrival: ν”„λ‘œλ“€μ„œλ‘œλΆ€ν„° λ©”μ‹œμ§€κ°€ λ„μ°©ν•©λ‹ˆλ‹€.
  2. Queueing: λ©”μ‹œμ§€λŠ” λ©”μ‹œμ§€ 큐에 λ°°μΉ˜λ©λ‹ˆλ‹€.
  3. Processing:
    • λ©”μ‹œμ§€ 처리 μ„œλΉ„μŠ€λŠ” λ©”μ‹œμ§€λ₯Ό μ†ŒλΉ„(dequeue)ν•©λ‹ˆλ‹€.
    • 이 λ©”μ‹œμ§€κ°€ μ–Έμ œ λ§ˆμ§€λ§‰μœΌλ‘œ μ²˜λ¦¬λ˜μ—ˆλŠ”μ§€ 쀑볡 μ €μž₯μ†Œμ—μ„œ ν™•μΈν•©λ‹ˆλ‹€.
    • λ©”μ‹œμ§€κ°€ 10초 이내에 μ²˜λ¦¬λ˜μ—ˆλ‹€λ©΄, νκΈ°ν•©λ‹ˆλ‹€.
    • λ©”μ‹œμ§€κ°€ μƒˆ λ©”μ‹œμ§€μ΄κ±°λ‚˜ 10초 이후 μ²˜λ¦¬λ˜μ—ˆλ‹€λ©΄, 이 λ©”μ‹œμ§€λŠ” μ²˜λ¦¬ν•˜κ³  μ €μž₯μ†Œμ˜ νƒ€μž„μŠ€νƒ¬ν”„λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€.
  4. Logging: λ©”μ‹œμ§€λŠ” μ²˜λ¦¬λ˜κ±°λ‚˜ κΈ°λ‘λ©λ‹ˆλ‹€.

 

6. Performance Considerations

  • Throughput: μ‹œμŠ€ν…œμ΄ 특히 피크 μ‹œκ°„λŒ€μ— λŒ€λŸ‰μ˜ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
  • Latency: μ‹œμŠ€ν…œμ΄ 각 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 데 κ±Έλ¦¬λŠ” 지연을 μ΅œμ†Œν™”ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • Scalability: μ‹œμŠ€ν…œμ€ 더 λ§Žμ€ μž‘μ—…μž λ…Έλ“œλ₯Ό μΆ”κ°€ν•˜κ³ , λ©”μ‹œμ§€ 큐와 쀑볡 μ €μž₯μ†Œλ₯Ό λΆ„ν• (partitioning)ν•˜μ—¬ μˆ˜ν‰μœΌλ‘œ ν™•μž₯ν•  수 μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.
  • Fault Tolerance: μ‹œμŠ€ν…œμ€ μ–΄λ– ν•œ λ©”μ‹œμ§€λ„ μ†μ‹€λ˜κ±°λ‚˜ 잘λͺ» μ²˜λ¦¬λ˜μ§€ μ•Šλ„λ‘ 보μž₯ν•˜μ—¬ μž₯μ• λ‘œλΆ€ν„° μš°μ•„ν•˜κ²Œ 볡ꡬ해야 ν•©λ‹ˆλ‹€.

 

7. Example Implementation

μ•„λž˜λŠ” 쀑볡 μ €μž₯μ†Œλ‘œ λ ˆλ””μŠ€λ₯Ό ν™œμš©ν•˜μ—¬ λ©”μ‹œμ§€ 처리 둜직이 κ΅¬ν˜„λœ κ°„λ‹¨ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.

 

 

 

 

λ°˜μ‘ν˜•

λŒ“κΈ€