8장 분산 이메일 서비스
1단계: 문제 이해 및 설계 범위 지정
- 주요 기능
- 이메일 발송/수신
- 모든 이메일 가져오기
- 읽음 여부에 따른 필터링
- 제목, 발신인, 메일 내용에 따른 검색 기능
- 스팸 및 바이러스 방지 기능
- HTTP 사용
- 첨부파일 지원
비기능 요구사항
- 안정성: 메일이 소실되어서는 안된다.
- 가용성: 이메일과 사용자 데이터를 여러 노드에 복제하여 부분 장애에도 서비스는 계속 사용 가능해야 한다.
- 확장성: 사용자 수가 늘어도 감당 할 수 있어야 한다.
- 새 컴포넌트를 더하기 쉽게 추가하고, 성능을 개선할 수 있어야 한다.
개략적 규모 추정
- 10억명의 사용자
- 한사람이 하루에 발송하는 메일의 수는 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
로 인코딩됨.
전통적 메일 서버