Design Distributed Mail Service
μꡬμ¬ν
κΈ°λ₯
μ΄λ©μΌ λ°μ‘/μμ
λͺ¨λ μ΄λ©μΌ μ‘°ν
μ½μ μ¬λΆ νν°λ§
κ²μ κΈ°λ₯
μ€νΈ λ° λ°μ΄λ¬μ€ λ°©μ§ κΈ°λ₯
μ²¨λΆ νμΌ μ§μ
SMTP / POP / IMAP λ± νλ‘ν μ½ μ§μ
κ·λͺ¨
μ¬μ©μ μ: 10μ΅ λͺ
ν루 νκ· μ μ‘ μ΄λ©μΌ 건μ: 10건
ν루 νκ· μμ μ΄λ©μΌ 건μ: 40건
μ΄λ©μΌ νλμ νκ· λ©νλ°μ΄ν° ν¬κΈ°: 50KB
μ²¨λΆ νμΌ νκ· ν¬κΈ°: 500KB
μ²¨λΆ νμΌ ν¬ν¨ λΉμ¨: 20%
μΆμ
μ΄λ©μΌ μ μ‘ QPS = 10μ΅ λͺ * νκ· 10건 / 24μκ° / 3600μ΄ = 115,740
1λ λ©νλ°μ΄ν° μ©λ = 10μ΅ λͺ * νκ· 40건 * 365μΌ * 50KB = 730TB
1λ μ²¨λΆ νμΌ μ©λ = 10μ΅ λͺ * νκ· 40건 * 365μΌ * 500KB * 20% = 1,460PB
λ°°κ²½ μ§μ
μ΄λ©μΌ νλ‘ν μ½
μ΄λ©μΌμ μ£Όκ³ λ°λ νλ‘ν μ½μλ μ¬λ¬ κ°μ§κ° μ‘΄μ¬νλ€.
SMTP(Simple Mail Transfer Protocol): μ΄λ©μΌμ ν μλ²μμ λ€λ₯Έ μλ²λ‘ 보λ΄λ νμ€ νλ‘ν μ½
POP(Post Office Protocol): μ΄λ©μΌ ν΄λΌμ΄μΈνΈκ° μ격 λ©μΌ μλ²μμ μ΄λ©μΌμ μμ νκ³ λ€μ΄λ‘λνκΈ° μν΄ μ¬μ©λλ νμ€ νλ‘ν μ½
λ¨λ§λ‘ λ€μ΄λ‘λ λ μ΄λ©μΌμ μλ²μμ μμ λμ΄, ν λ λ¨λ§μμλ§ μμ κ°λ₯
μ΄λ©μΌμ μΌλΆλ§ μ½μ μ μμ΄, μ©λμ΄ ν° μ²¨λΆ νμΌμ΄ μ²¨λΆ λ κ²½μ° λ§μ μκ°μ΄ μμλ¨
IMAP(Internet Message Access Protocol): μ΄λ©μΌ ν΄λΌμ΄μΈνΈκ° μ격 λ©μΌ μλ²μμ μ΄λ©μΌμ μμ νκ³ λ€μ΄λ‘λνκΈ° μν΄ μ¬μ©λλ νμ€ νλ‘ν μ½
POPμ λ¬λ¦¬ λ©μΌ μλ²μμ μ§μμ§μ§ μμ μ¬λ¬ λμ λ¨λ§μμ λ©μΌμ μ½μ μ μμ
λ©μμ§λ₯Ό μ΄κΈ° μ μ ν€λλ§ λ€μ΄ λ°κ³ , μ 체 λ©μμ§λ₯Ό μ½μ λλ§ λ€μ΄λ‘λ
κ°μΈ μ΄λ©μΌ κ³μ μμ κ°μ₯ λ§μ΄ μ¬μ©λλ νλ‘ν μ½
HTTPS(HyperText Transfer Protocol Secure): λ©μΌ μ μ‘ νλ‘ν μ½μ μλλ©°, μΉ κΈ°λ° λ©μΌ μμ€ν μ μμ μ¬μ©λλ νλ‘ν μ½
μ ν΅μ λ©μΌ μλ² λμ
μ ν΅μ λ©μΌ μλ²μ μν€ν μ²λ κ°λ¨νμΌλ©°, λ©μΌμ μ μ‘νλ κ³Όμ μ λ€μκ³Ό κ°μ΄ μμ½ν μ μλ€.
Aκ° μμ룩 ν΄λΌμ΄μΈνΈμ λ‘κ·ΈμΈ ν Bμκ² μ μ‘
ν΄λΉ μ΄λ©μΌμ μμ룩 SMTP λ©μΌ μλ²λ‘ μ μ‘(SMTP νλ‘ν μ½ μ¬μ©)
μμ룩 μλ²λ DNS μ§μλ₯Ό ν΅ν΄ μμ μ¬ SMTP μλ² μ£Όμ μ‘°ν
μμλΈ μ£Όμμ ν΄λΉ SMTP λ©μΌ μλ²λ‘ μ΄λ©μΌ μ μ‘(SMTP νλ‘ν μ½ μ¬μ©)
μμ ν μ§λ©μΌ μλ²λ μ΄λ©μΌμ μ μ₯
Bκ° λ‘κ·ΈμΈν μ§λ©μΌ ν΄λΌμ΄μΈνΈμμ IMAP/POP μλ²μ μ΄λ©μΌ νμΈ μμ²
IMAP/POP μλ²λ μ μ₯λ μ΄λ©μΌμ μ‘°ν ν ν΄λΌμ΄μΈνΈλ‘ μ μ‘
μ΄λ©μΌ μ μ₯λ μμ€ν μ νμΌκ³Ό λλ ν°λ¦¬λ₯Ό νμ©νλ κ°λ¨ν λ°©μμΌλ‘ μ΄λ£¨μ΄μ‘λ€.
νμ§λ§ μ΄ κ΅¬μ‘°λ μ μμ΅ κ°μ μ΄λ©μΌμ κ²μνκ³ λ°±μ νλ λͺ©μ μΌλ‘ νμ©νκΈ°μ λμ€ν¬ I/Oκ° λ³λͺ©μ΄ λμ΄ λΆμ μ νλ€. λλ¬Έμ λ§μ μ¬μ©μμ λ§μ λ°μ΄ν°λ₯Ό μ²λ¦¬νκΈ° μν΄ νμ¬λ λΆμ° λ©μΌ μλ² μν€ν μ²λ₯Ό μ¬μ©νκ³ μλ€.
μ΄λ©μΌ API
μΉ λ©μΌ ν΅μ μλ μΌλ°μ μΌλ‘ HTTP νλ‘ν μ½μ΄ μ¬μ©λλ©°, ν΅μ¬ APIλ λ€μκ³Ό κ°λ€.
POST /message
: To, Tc, Bcc ν€λμ λͺ μλ μμ μμκ² λ©μμ§ μ μ‘GET /folders
: μ£Όμ΄μ§ μ΄λ©μΌ κ³μ μ μ‘΄μ¬νλ λͺ¨λ ν΄λ λͺ©λ‘ λ°νGET /folders/{:folder_id}/message
: μ£Όμ΄μ§ ν΄λ μλ λͺ¨λ λ©μμ§ λ°νGET /message/{:message_id}
: μ£Όμ΄μ§ νΉμ λ©μμ§μ λν λͺ¨λ μ 보 λ°ν
λΆμ° λ©μΌ μλ² μν€ν
μ²
μ»΄ν¬λνΈ
μ¬λ¬ μλ² μ¬μ΄μ λ°μ΄ν° λκΈ°νμ, μμ μ λ©μΌ μλ²μ μ΄λ©μΌ μ€νΈ κ΅¬λΆ λ± λ§μ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ¬λ¬ μ»΄ν¬λνΈλ‘ ꡬμ±λ λΆμ° λ©μΌ μλ² μν€ν μ²λ₯Ό μ¬μ©νλ€.
μΉλ©μΌ: μ¬μ©μκ° λ©μΌμ λ°κ³ 보λ΄λ μΈν°νμ΄μ€
μΉ μλ²: μ¬μ©μκ° μ΄μ©νλ μμ²/μλ΅ μλΉμ€λ‘, μ¬μ©μ μΈμ¦, λ©μΌ μ μ‘, λ©μΌ μμ λ±μ λͺ¨λ μ΄λ©μΌ APIλ₯Ό μ²λ¦¬
μ€μκ° μλ²: μλ‘μ΄ μ΄λ©μΌ λ΄μμ ν΄λΌμ΄μΈνΈμ μ€μκ°μΌλ‘ μ λ¬
μ μ₯μ κ³μΈ΅
λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€: μ΄λ©μΌ μ λͺ© / λ³Έλ¬Έ / λ°μ μΈ / μμ μΈ λ± λ©νλ°μ΄ν° μ μ₯
μ²¨λΆ νμΌ μ μ₯μ: λμ©λ νμΌμ μ μ₯νλ λ° μ ν©ν λ°μ΄ν°λ² μ΄μ€ μ¬μ©(μλ§μ‘΄ S3)
λΆμ° μΊμ: μ΅κ·Ό μμ μ΄λ©μΌμ μμ£Ό μ½μ κ°λ₯μ±μ΄ λμ λ©λͺ¨λ¦¬μ μΊμ±(λ λμ€)
κ²μ μ μ₯μ: κ³ μ ν μ€νΈ κ²μμ μ§μνλ μ μΈλ±μ€λ₯Ό μλ£κ΅¬μ‘°λ‘ ν μ μ₯μ μ¬μ©
μ΄λ©μΌ μ μ‘ μ μ°¨
μ¬μ©μκ° μΉ λ©μΌ νκ²½μμ λ©μΌ μμ± ν μ μ‘
μΉ μλ²μ μ λ¬ λ°κΈ° μ λ‘λλ°Έλ°μμμ μ²λ¦¬μ¨ μ νμ λ°λΌ μμ²μ μΉ μλ²μ μ λ¬
μ λ¬ λ°μ λ©μΌμ λν΄ μλ λμ μν
ν¬κΈ° λ° νλ κ°μ κΈ°λ³Έμ μΈ μ΄λ©μΌ κ²μ¦
μ€νΈ μ¬λΆμ λ°μ΄λ¬μ€ κ°μΌ μ¬λΆ κ²μ¬
λ©μΌμ μΈλΆ μ μ‘ νλ‘ μ λ¬
첨λΆνμΌμ΄ ν° κ²½μ°μ κ°μ²΄ μ μ₯μμ λ°λ‘ μ μ₯ ν μ°Έμ‘° μ λ³΄λ§ νμ μ λ¬
λ©μμ§ νμμ μΈλΆ μ μ‘ SMTP μλ²λ‘ μ λ¬
μΈλΆ μ μ‘ SMTP μλ²μμλ μ΄λ©μΌ κ²μ¦
μμ μμ λ©μΌ μλ²λ‘ λ©μΌ μ μ‘
μ€ν¨ μ μ§μμ λ°±μ€νμ κ°μ μ λ΅μΌλ‘ λ©μΌ μ μ‘ μ¬μλ
μ΄λ©μΌ μμ μ μ°¨
μ μ‘λ μ΄λ©μΌμ΄ λ‘λλ°Έλ°μμ λμ°©
μ¬λ¬ SMTP μλ²λ‘ μ΄λ©μΌ μ λ¬
μμ μ΄λ©μΌ νλ‘ μ λ¬
첨λΆνμΌμ΄ ν° κ²½μ°μ κ°μ²΄ μ μ₯μμ λ°λ‘ μ μ₯ ν μ°Έμ‘° μ λ³΄λ§ νμ μ λ¬
λ©μΌ μ²λ¦¬ μλ²λ‘ λ³΄λΈ ν λ©μΌ κ²μ¦
κ²μ¦λ μ΄λ©μΌμ λ©μΌ μ μ₯μ / μΊμ / κ°μ²΄ μ μ₯μ λ±μ 보κ΄
μμ μκ° μ¨λΌμΈ μνμΈ κ²½μ° μ΄λ©μΌμ μ€μκ° μλ²μΈ μΉ μμΌ μλ²λ‘ μ λ¬
μμ μκ° μ€νλΌμΈ μνμΈ κ²½μ° μ΄λ©μΌμ μ μ₯μ κ³μΈ΅μ μ μ₯
μμΈ μ€κ³
λ©νλ°μ΄ν° λ°μ΄ν°λ² μ΄μ€
μ΄λ©μΌ λ©νλ°μ΄ν°λ λ€μκ³Ό κ°μ νΉμ±μ κ°μ§λ€.
μ΄λ©μΌ ν€λλ μΌλ°μ μΌλ‘ μκ³ λΉλ²νκ² μ΄μ©
λ³Έλ¬Έμ ν¬κΈ°λ μμ κ² λΆν° ν° κ²κΉμ§ λ€μ
λ³Έλ¬Έμ μ½κΈ°λ μΌλ°μ μΌλ‘ ν λ²λ§ μ΄λ£¨μ΄μ§
μ΄λ©μΌμ λν κΆν μ²λ¦¬ νμ(νΉμ μ¬μ©μλ§ μ½μ μ μλλ‘)
λ³΄ν΅ μ΅κ·Όμ μ΄λ©μΌλ§ μμ£Ό μ½μ
λ°μ΄ν° μμ€μ΄ λ°μνλ©΄ μ λ¨
μ΄λ¬ν λ°μ΄ν° νΉμ±μ λ€μκ³Ό κ°μ μꡬ μ¬νμΌλ‘ μ 리ν μ μλ€.
λ¨μΌ 컬λΌμ ν¬κΈ°κ° ν΄ μ μμ
λμ€ν¬ I/O μ΅μνλλλ‘ μ€κ³
κ°μ©μ±μ΄ λκ³ μ₯μ κ°λ΄κ° κ°λ₯ν΄μΌ ν¨
μ¦λΆ λ°±μ μ΄ κ°λ₯ν΄μΌ ν¨
κ°λ ₯ν λ°μ΄ν° μΌκ΄μ± 보μ₯
μ΄λ¬ν νΉμ±μ κ³ λ €νμ¬ λ°μ΄ν°λ² μ΄μ€μ μ₯λ¨μ μ λΉκ΅ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
RDBMS
ν€λμ λ³Έλ¬Έμ λν μΈλ±μ€λ₯Ό λ§λ€μ΄ κ°λ¨ν μ§μλ₯Ό λΉ λ₯΄κ² μ²λ¦¬ κ°λ₯
ν° μ΄λ©μΌμ BLOBμΌλ‘ μ μ₯νκ² λλλ°, κ·Έ κ²½μ° μ²λ¦¬ μκ°μ΄ κΈΈμ΄μ§
λΆμ° κ°μ²΄ μ μ₯μ
μ΄λ©μΌμ μμ λ°μ΄ν° κ·Έλλ‘ κ°μ²΄ μ μ₯μμ 보κ΄νμ¬ λ°μ΄ν° λ°±μ μ μ©μ΄
μ½μ νμ / ν€μλ κ²μ λ± κΈ°λ₯ ꡬνμ΄ μ΄λ €μ
NoSQL
μ§λ©μΌμ΄ ν΄λΉ λ°©λ²μ μ¬μ©νκ³ μμΌλ, ꡬν λ°©λ² μ μ μμ(μ€ν μμ€ X)
κΈ°λ₯μ μλ²½νκ² μ§μνλ λ°μ΄ν°λ² μ΄μ€λ μλ€κ³ λ³Ό μ μκ³ , μ€μ λ‘ λν μ΄λ©μΌ μλΉμ€ μ 체λ λ μμ μΈ λ°μ΄ν°λ² μ΄μ€ μμ€ν μ ꡬμΆνκ³ μλ€.
κ²μ
μ΄λ©μΌ κ²μ κΈ°λ₯μ λ€μκ³Ό κ°μ νΉμ±μ κ°μ§λ€.
κ²μ κΈ°λ₯ μ 곡μ μν΄ μ΄λ©μΌμ΄ μ μ‘/μμ /μμ λ λ λ§λ€ μΈλ±μ± μμ μν νμ
λ°λ©΄μ κ²μμ μ¬μ©μκ° κ²μμ ν λλ§ μ€νλλλ°, μ΄λ λΉλ²νμ§ μμ
μ°κΈ° μ°μ°μ΄ μ½κΈ° μ°μ°λ³΄λ€ λ λ§μ΄ λ°μνκ² λ¨
κ²μ κΈ°λ₯μ μ 곡νκΈ° μν΄ λ§μΆ€ν κ²μ μ루μ κ³Ό μλΌμ€ν±μμΉλ₯Ό μ΄μ©νλ λ°©μμ΄ μ‘΄μ¬νλ€.
μλΌμ€ν±μμΉ
μ²λ¦¬ λ°©λ²
κ²μμ μλΌμ€ν±μμΉλ₯Ό μ΄μ©νμ¬ λκΈ°μ μΌλ‘ μν
μ μ‘/μμ /μμ λ λΉλκΈ°μ νΈμΆνμ¬ μλΌμ€ν± ν΄λ¬μ€ν°μ λ°μ
νΉμ§
μλΌμ€ν±μ κ²μμ μ΅μ νλμ΄ μμ΄, κ²μ μλκ° λΉ λ¦
λΉλκΈ°μ μΌλ‘ μ²λ¦¬λλ μλΌμ€ν± ν΄λ¬μ€ν°μ μ£Ό μ΄λ©μΌμ μ₯μμ λ°μ΄ν° λκΈ°νκ° κΉλ€λ‘μ
λ§μΆ€ν κ²μ μ루μ
νΉμ§
μΈλ±μ±μ μ¬μ©νλ κ²½μ° λ€λμ μ°κΈ° μ°μ°μ λν ν΄κ²°μ± νμ
μ°Έκ³ μλ£
Last updated
Was this helpful?