λ°μν
https://medium.com/@aditimishra_541/system-design-message-deduplication-system-afb4679c3c00
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
- Message Arrival: νλ‘λμλ‘λΆν° λ©μμ§κ° λμ°©ν©λλ€.
- Queueing: λ©μμ§λ λ©μμ§ νμ λ°°μΉλ©λλ€.
- Processing:
- λ©μμ§ μ²λ¦¬ μλΉμ€λ λ©μμ§λ₯Ό μλΉ(dequeue)ν©λλ€.
- μ΄ λ©μμ§κ° μΈμ λ§μ§λ§μΌλ‘ μ²λ¦¬λμλμ§ μ€λ³΅ μ μ₯μμμ νμΈν©λλ€.
- λ©μμ§κ° 10μ΄ μ΄λ΄μ μ²λ¦¬λμλ€λ©΄, νκΈ°ν©λλ€.
- λ©μμ§κ° μ λ©μμ§μ΄κ±°λ 10μ΄ μ΄ν μ²λ¦¬λμλ€λ©΄, μ΄ λ©μμ§λ μ²λ¦¬νκ³ μ μ₯μμ νμμ€ν¬νλ₯Ό μ λ°μ΄νΈν©λλ€.
- Logging: λ©μμ§λ μ²λ¦¬λκ±°λ κΈ°λ‘λ©λλ€.
6. Performance Considerations
- Throughput: μμ€ν μ΄ νΉν νΌν¬ μκ°λμ λλμ λ©μμ§λ₯Ό μ²λ¦¬ν μ μλμ§ νμΈν©λλ€.
- Latency: μμ€ν μ΄ κ° λ©μμ§λ₯Ό μμ νκ³ μ²λ¦¬νλ λ° κ±Έλ¦¬λ μ§μ°μ μ΅μνν΄μΌ ν©λλ€.
- Scalability: μμ€ν μ λ λ§μ μμ μ λ Έλλ₯Ό μΆκ°νκ³ , λ©μμ§ νμ μ€λ³΅ μ μ₯μλ₯Ό λΆν (partitioning)νμ¬ μνμΌλ‘ νμ₯ν μ μμ΄μΌ ν©λλ€.
- Fault Tolerance: μμ€ν μ μ΄λ ν λ©μμ§λ μμ€λκ±°λ μλͺ» μ²λ¦¬λμ§ μλλ‘ λ³΄μ₯νμ¬ μ₯μ λ‘λΆν° μ°μνκ² λ³΅κ΅¬ν΄μΌ ν©λλ€.
7. Example Implementation
μλλ μ€λ³΅ μ μ₯μλ‘ λ λμ€λ₯Ό νμ©νμ¬ λ©μμ§ μ²λ¦¬ λ‘μ§μ΄ ꡬνλ κ°λ¨ν μμμ λλ€.
λ°μν
λκΈ