8장 분산 이메일 서비스

1단계: 문제 이해 및 설계 범위 지정

  • 주요 기능
    • 이메일 발송/수신
    • 모든 이메일 가져오기
    • 읽음 여부에 따른 필터링
    • 제목, 발신인, 메일 내용에 따른 검색 기능
    • 스팸 및 바이러스 방지 기능
    • HTTP 사용
    • 첨부파일 지원

비기능 요구사항

  • 안정성: 메일이 소실되어서는 안된다.
  • 가용성: 이메일과 사용자 데이터를 여러 노드에 복제하여 부분 장애에도 서비스는 계속 사용 가능해야 한다.
  • 확장성: 사용자 수가 늘어도 감당 할 수 있어야 한다.
  • 새 컴포넌트를 더하기 쉽게 추가하고, 성능을 개선할 수 있어야 한다.

개략적 규모 추정

  • 10억명의 사용자
  • 한사람이 하루에 발송하는 메일의 수는 10통
    • QPS = 10만 건
  • 한사람이 하루에 수신하는 메일의 수는 40통
  • 메일의 크기는 평균 50KB
    • 1년간 저장해야 할 데이터는 10억(명) 40통/일 50KB/통 * 365일 = 730TB
  • 첨부파일을 포함하는 비율은 20%이며, 대략 500KB/통이라고 가능
    • 1년간 저장해야 할 데이터는 10억(명) 40통/일 500KB/통 365일 20% = 1460TB
  • 따라서 총 데이터는 2200TB

2단계: 개략적 설계안 제시

개략적 설계안

이메일 101

이메일 프로토콜의 종류
  • SMTP(Simple Mail Transfer Protocol)
    • 이메일을 다른 서버로 전송하는 표준 프로토콜
  • POP(Post Office Protocol)
    • 이메일을 다른 서버에서 수신하고 다운로드하는데에 사용하는 표준 프로토콜
    • 다운로드와 동시에 서버에서 삭제된다.
      • 즉, 한번만 읽을 수 있다.
  • IMAP(Internet Message Access Protocol)
    • 이메일을 다른 서버에서 수신하고 다운로드하는데에 사용하는 표준 프로토콜
    • POP과 달리 메시지를 바로 다운받지 않으며, 서버에서 삭제되지도 않는다.
    • 헤더만 우선 다운받아 성능이 좋다.
  • HTTPS(Hyper Text Transfer Protocol Secure)
    • 메일만을 위한 프로토콜은 아님
도메인 이름 서비스(DNS)
 우선순위와 메일 서버 목록
dig gmail.com MX +short
5 gmail-smtp-in.l.google.com.
40 alt4.gmail-smtp-in.l.google.com.
30 alt3.gmail-smtp-in.l.google.com.
10 alt1.gmail-smtp-in.l.google.com.
20 alt2.gmail-smtp-in.l.google.com.
첨부 파일
  • 메시지와 함께 전송되며, 일반적으로 Base64로 인코딩됨.

전통적 메일 서버

  • 전통적 메일 서버 아키텍처

    • 8-1-1
  • 전통적 메일 서버는 파일 시스템(maildir)를 사용하여 이메일을 저장한다.

    • 그러나 이는 사용자가 많아지면 문제가 발생한다.
profile
안녕하세요!

0개의 댓글

Powered by GraphCDN, the GraphQL CDN