728x90
반응형
개략적인 규모 추정을 위해서는 규모 확장성 표현에 능숙해야 한다.
- 2의 제곱수
- 응답 지연(latency) 값
- 고가용성
2의 제곱수
- 데이터 최소 단위 : 1 byte = 8bit
- ASCII 문자 하나 메모리 크기 : 1 byte
모든 프로그래머가 알아야 하는 응답지연 값
- 메모리는 빠르지만 디스크는 아직 느리다.
- 디스크 탐색(seek) 가능한 피하기
- 단순한 압축 알고리즘은 속도가 빠르다.
- 데이터를 인터넷으로 전송하기 전에 가능하면 압축하기
- 데이터 센터는 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고 받는 시간은 꽤 걸린다.
가용성에 관계된 수치들
- 고가용성(high availability) : 시스템이 오랜 시간동안 지속적으로 중단 없이 운영될 수 있는 능력
- SLA(Service Level Agreement) : 서비스 사업자(service provider)와 고객 사이에 맺어진 합의
- 서비스 사업자가 제공하는 서비스의 가용시간(uptime)이 공식적으로 기술되어 있다.
예제 : 트위터 QPS와 저장소 요구량 추정
- 월간 능동 사용자 3억명
- 50% 사용자가 트위터를 매일 사용
- 평균적으로 각 사용자는 매일 2건의 트윗을 올린다.
- 미디어를 포함하는 트윗은 10%
- 데이터 5년 보관
미디어 저장을 위한 저장소 요구량
- 1.5억 X 2 X 10% X 1MB = 30TB
- 5년 미디어 보관을 위한 저장소 요구량 : 30TB X 365 X 5 = 약 55PB
3장 - 시스템 설계 면접 공략법
효과적 면접을 위한 4단계 접근법 (면접관과 인터렉티브하게 풀어나가라)
1단계 : 문제 이해 및 설계 범위 확정
- 생각 없이 바로 답을 내놓지 않는다.
- 요구사항을 정확히 이해하고, 생각하고 질문하여 답을 한다.
- 필요 질문 예시
- 구체적으로 어느 기능을 만드는지?
- 제품의 사용자 수는?
- 회사의 규모는 얼마나 빨리 커질 것으로 예상하는지? x 년 이후의 규모는?
- 회사의 기술 스택은 무엇인지?
- 예제
- 모바일 앱, 웹 앱 어느쪽 지원?
- 가장 중요한 기능은?
- 뉴스 피드는 시간 역순인지, 정렬기준이 있는지
- 한 사용자가 최대 몇명의 사용자와 친구를 맺을 수 있는지?
- 사이트로 오는 트래픽 규모는?
- 피드에 이미지, 비디오도 가능한지? 아니면 그저 텍스트인지?
2단계 : 개략적인 설계안 제시 및 동의 구하기
- 핵심 컴포넌트를 포함하는 다이어그램을 그린다.
- 클라이언트(모바일/웹), API, 웹, 서버, 데이터 저장소, 캐시, CDN, 메시지 큐 등등
- 최초 설계안이 시스템 규모에 관계된 제약사항을 만족하는지 개략적으로 계산하기
- 예제 - 뉴스 피드 시스템 설계
- 피드 발행 : 사용자가 포스트를 올리면 관련된 데이터가 캐시/데이터베이스에 기록되고, 해당 사용자의 친구 뉴스피드에 뜬다.
- 피드 생성 : 어떤 사용자의 뉴스 피드는 해당 사용자 친구들의 포스트를 시간 역순으로 정렬하여 만든다.
3단계 : 상세 설계
- 설계 대상 컴포넌트 사이의 우선순위 정하기
- 시스템 성능 특성에 대한 질문에는?
- 시스템의 병목 구간이나 자원 요구량 추정치에 초점 맞추기
- 단축 URL 생성기 설계 문제에는?
- 해시 함수 설계를 구체적으로 설명하기
- 채팅 시스템에 대한 문제는?
- 어떻게 하면 지연시간(latency)를 줄이고 사용자의 온/오프라인 상태를 표시할 것인지
- 예제 - 뉴스 피드 시스템
- 피드 발행
- 뉴스 피드 가져오기
4단계 : 마무리
- 오류가 발생하면 무슨 일이 생기는지(서버 오류, 네트워크 장애 등)
- 운영 이슈 논의 - 메트릭은 어떻게 수집하고 모니터링과 로그는 어떻게? 배포는 어떻게 할 것인지?
- 규모 확장을 어떻게 해나갈 것인지?
728x90
반응형
'책 > 대규모 트래픽 설계 기초' 카테고리의 다른 글
[대규모 시스템 설계 기초] 1장 - 사용자 수에 따른 규모 확장성 (0) | 2023.02.02 |
---|