LostCatBox

(리뷰)(강추)가상 면접 사례로 배우는 대규모 시스템 설계 기초

Word count: 599Reading time: 3 min
2023/02/25 Share

책 리뷰

대상: 가상 면접 사례로 배우는 대규모 시스템 설계 기초

결론: 아주 좋은책이다. 몇번이나 반복해서 읽고싶은 책이다.

반드시 구매하자: 구매링크

왜?

대규모 시스템 설계에서 왜?에 대한 답변이 많은 책이여서 반드시 읽고싶었다.

1장 - 사용자 수에 따른 규모 확장성

단일 서버

데이터 베이스

수직적 규모 확장 vs 수평적 규모 확장

  • Failover, 다중화 방안 -> 수평적 규모 확장 유리

로드밸런서

데이터베이스 다중화

캐시

캐시 계층

캐시가 한대라면 SPOF(단일 장애 지점)이 될수도있다. -> 여러지역에 걸쳐 캐시 서버를 분산시켜야한다.

콘텐츠 전송 네트워크(CDN)

무상태(stateless) 웹 계층

상태 정보 의존적인 아키텍처

무상태 아키텍처

데이터 센터

메시지 큐

서비스간 , 서버 간 결합이 느슨해져, 규모 확장성이 보장된다!

Pub -> MessageQ ->Sub

로그, 메트릭 그리고 자동화

데이터베이스의 규모 확장

수직적 확장

수평적 확장

백만 사용자, 그리고 그 이상(정리)

2장 - 개략적인 규모 추정

2의 제곱수

모든 프로그래머가 알아야 하는 응답지연 값

가용성에 관계된 수치들

예제: 트위터 QPS와 저장소 요구량 추정

3장 - 시스템 설계 면접 공략법

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

2단계: 개략적인 설계안 제시 및 동의 구하기

3단계: 상세 설계

4단계: 마무리

해야할것

하지말아야 할것

처리율 제한 장치의 설계

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

2단계: 개략적 설계안 제시 및 동의 구하기

처리율 제한 알고리즘

토큰 버킷

누출 버킷 알고리즘

고정 윈도 카운터 알고리즘

이동 윈도 로깅 알고리즘

이동 윈도 카운터 알고리즘

개략적인 아키텍처

3단계: 상세 설계

처리율 제한 규칙

처리율 한도 초과 트래픽의 처리

상세 설계

분산 환경에서의 처리율 제한 장치의 구현

성능 최적화

모니터링

4단계: 마무리

5장 - 안정 해시 설계

해시 키 재배치 문제

안정 해시

해시 공간과 해시 링

해시 서버

해시 키

서버 조회

서버 추가

서버 제거

기본 구현법의 두가지 문제점

가상 노드

재배치할 키 결정

마치며

6장 - 키-값 저장소 설계

문제 이해 및 설계 범위 확정

단일 서버 키-값 저장소

분산 키-값 저장소

CAP정리

CAP 조합 시스템 종류

실세계 실제 분산 시스템

시스템 컴포넌트

데이터 파티션

데이터 다중화

데이터 일관성

일관성 모델

비 일관성 해소 기법: 데이터 버저닝

충돌 감지 가능

장애 처리

장애 감지

일시적 장애 처리

영구 장애 처리

시스템 아키텍처 다이어그램

쓰기 경로

읽기 경로

요약

7장 - 분산 시스템을 위한 유일 ID 생성기 설계

1단계 - 문제 이해 및 설계 범위 확정

2단계 개략적 설계안 제시 및 동의 구하기

다중 마스터 복제

UUID

티켓 서버

트위터 스노플레이크 접근법

3단계: 상세 설계

4단계: 마무리

8장 - URL 단축기 설계

1단계 - 문제 이해 및 설계 범위 확정

2단계 - 개략적 설계안 제시 및 동의 구하기

API 엔드포인트

URL 단축

3단계: 상세 설계

데이터 모델

해시 함수

해시 값 길이(짧은url=해시값)

해시 후 충돌 해소

두접근법 비교

URL 단축기 상세 설계

URL 리다이렉션 상세 설계

4단계: 마무리

9장 - 웹 크롤러 설계

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

2단계: 개략적 설계안 제시 및 동의 구하기

웹 크롤러 작업 흐름

3단계: 상세 설계

미수집 URL 저장소

예의

우선순위

신선도

미수집 URL 저장소를 위한 지속성 저장장치

HTML다운로더

성능 최적화

분산 크롤링

도메인 이름 변환 결과 캐시

지역성

짧은 타임아웃

안정성

확장성

문제 있는 콘텐츠 감지 및 회피

4단계: 마무리

10장 - 알림 시스템 설계

중요한 정보 비동기적 제공

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

2단계: 개략적 설계안 제시 및 동의 구하기

알림 유형별 지원 방안

3단계: 상세 설계

4단계: 마무리

11장 - 뉴스피드 시스템 설계

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

2단계: 개략적 설계안 제시 및 동의 구하기

피드 발행 API

피드 읽기 API

피드 발행

뉴스 피드 생성

3단계: 상세 설계

피드 발행

피드 읽기 흐름 상세 설계

4단계: 마무리

12장 - 채팅 시스템 설계

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

2단계: 개략적 설계안 제시 및 동의 구하기

12장 - 채팅 시스템 설계

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

2단계: 개략적 설계안 제시 및 동의 구하기

폴링

롱 폴링

웹소켓

개략적 설계안

무상태 서비스

상태 유지 서비스

제 3자 서비스 연동

규모 확장성

저장소

데이터 모델

메시지 ID

3단계: 상세 설계

서비스 탐색

메시지 흐름

1:1 채팅 메시지 처리 흐름

여러 단말 사이의 메시지 동기화

소규모 그룹 채팅에서의 메시지 흐름

접속상태 표시

사용자 로그인

CATALOG
  1. 1. 책 리뷰
  2. 2. 왜?
  3. 3. 1장 - 사용자 수에 따른 규모 확장성
    1. 3.1. 단일 서버
    2. 3.2. 데이터 베이스
    3. 3.3. 수직적 규모 확장 vs 수평적 규모 확장
      1. 3.3.1. 로드밸런서
      2. 3.3.2. 데이터베이스 다중화
    4. 3.4. 캐시
      1. 3.4.1. 캐시 계층
    5. 3.5. 콘텐츠 전송 네트워크(CDN)
    6. 3.6. 무상태(stateless) 웹 계층
      1. 3.6.1. 상태 정보 의존적인 아키텍처
      2. 3.6.2. 무상태 아키텍처
    7. 3.7. 데이터 센터
    8. 3.8. 메시지 큐
    9. 3.9. 로그, 메트릭 그리고 자동화
    10. 3.10. 데이터베이스의 규모 확장
      1. 3.10.1. 수직적 확장
      2. 3.10.2. 수평적 확장
    11. 3.11. 백만 사용자, 그리고 그 이상(정리)
  4. 4. 2장 - 개략적인 규모 추정
    1. 4.1. 2의 제곱수
    2. 4.2. 모든 프로그래머가 알아야 하는 응답지연 값
    3. 4.3. 가용성에 관계된 수치들
    4. 4.4. 예제: 트위터 QPS와 저장소 요구량 추정
  5. 5. 3장 - 시스템 설계 면접 공략법
    1. 5.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 5.2. 2단계: 개략적인 설계안 제시 및 동의 구하기
    3. 5.3. 3단계: 상세 설계
    4. 5.4. 4단계: 마무리
    5. 5.5. 해야할것
    6. 5.6. 하지말아야 할것
  6. 6. 처리율 제한 장치의 설계
    1. 6.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 6.2. 2단계: 개략적 설계안 제시 및 동의 구하기
      1. 6.2.1. 처리율 제한 알고리즘
      2. 6.2.2. 토큰 버킷
      3. 6.2.3. 누출 버킷 알고리즘
      4. 6.2.4. 고정 윈도 카운터 알고리즘
      5. 6.2.5. 이동 윈도 로깅 알고리즘
      6. 6.2.6. 이동 윈도 카운터 알고리즘
      7. 6.2.7. 개략적인 아키텍처
    3. 6.3. 3단계: 상세 설계
      1. 6.3.1. 처리율 제한 규칙
      2. 6.3.2. 처리율 한도 초과 트래픽의 처리
      3. 6.3.3. 상세 설계
      4. 6.3.4. 분산 환경에서의 처리율 제한 장치의 구현
      5. 6.3.5. 성능 최적화
      6. 6.3.6. 모니터링
    4. 6.4. 4단계: 마무리
  7. 7. 5장 - 안정 해시 설계
    1. 7.1. 해시 키 재배치 문제
    2. 7.2. 안정 해시
      1. 7.2.1. 해시 공간과 해시 링
      2. 7.2.2. 해시 서버
      3. 7.2.3. 해시 키
      4. 7.2.4. 서버 조회
      5. 7.2.5. 서버 추가
      6. 7.2.6. 서버 제거
      7. 7.2.7. 기본 구현법의 두가지 문제점
      8. 7.2.8. 가상 노드
      9. 7.2.9. 재배치할 키 결정
    3. 7.3. 마치며
  8. 8. 6장 - 키-값 저장소 설계
    1. 8.1. 문제 이해 및 설계 범위 확정
      1. 8.1.1. 단일 서버 키-값 저장소
      2. 8.1.2. 분산 키-값 저장소
      3. 8.1.3. CAP정리
      4. 8.1.4. 실세계 실제 분산 시스템
      5. 8.1.5. 시스템 컴포넌트
      6. 8.1.6. 데이터 파티션
      7. 8.1.7. 데이터 다중화
      8. 8.1.8. 데이터 일관성
      9. 8.1.9. 일관성 모델
      10. 8.1.10. 장애 처리
      11. 8.1.11. 장애 감지
      12. 8.1.12. 일시적 장애 처리
      13. 8.1.13. 영구 장애 처리
      14. 8.1.14. 시스템 아키텍처 다이어그램
      15. 8.1.15. 쓰기 경로
      16. 8.1.16. 읽기 경로
    2. 8.2. 요약
  9. 9. 7장 - 분산 시스템을 위한 유일 ID 생성기 설계
    1. 9.1. 1단계 - 문제 이해 및 설계 범위 확정
    2. 9.2. 2단계 개략적 설계안 제시 및 동의 구하기
      1. 9.2.1. 다중 마스터 복제
      2. 9.2.2. UUID
      3. 9.2.3. 티켓 서버
      4. 9.2.4. 트위터 스노플레이크 접근법
    3. 9.3. 3단계: 상세 설계
    4. 9.4. 4단계: 마무리
  10. 10. 8장 - URL 단축기 설계
    1. 10.1. 1단계 - 문제 이해 및 설계 범위 확정
    2. 10.2. 2단계 - 개략적 설계안 제시 및 동의 구하기
      1. 10.2.1. API 엔드포인트
      2. 10.2.2. URL 단축
    3. 10.3. 3단계: 상세 설계
      1. 10.3.1. 데이터 모델
      2. 10.3.2. 해시 함수
      3. 10.3.3. 해시 값 길이(짧은url=해시값)
      4. 10.3.4. 해시 후 충돌 해소
      5. 10.3.5. 두접근법 비교
      6. 10.3.6. URL 단축기 상세 설계
      7. 10.3.7. URL 리다이렉션 상세 설계
    4. 10.4. 4단계: 마무리
  11. 11. 9장 - 웹 크롤러 설계
    1. 11.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 11.2. 2단계: 개략적 설계안 제시 및 동의 구하기
      1. 11.2.1. 웹 크롤러 작업 흐름
    3. 11.3. 3단계: 상세 설계
      1. 11.3.1. DFS(Depth-First Search) vs BFS(Breath-First Search)
      2. 11.3.2. 미수집 URL 저장소
      3. 11.3.3. 예의
      4. 11.3.4. 우선순위
      5. 11.3.5. 신선도
      6. 11.3.6. 미수집 URL 저장소를 위한 지속성 저장장치
      7. 11.3.7. HTML다운로더
      8. 11.3.8. 성능 최적화
      9. 11.3.9. 분산 크롤링
      10. 11.3.10. 도메인 이름 변환 결과 캐시
      11. 11.3.11. 지역성
      12. 11.3.12. 짧은 타임아웃
      13. 11.3.13. 안정성
      14. 11.3.14. 확장성
      15. 11.3.15. 문제 있는 콘텐츠 감지 및 회피
    4. 11.4. 4단계: 마무리
  12. 12. 10장 - 알림 시스템 설계
    1. 12.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 12.2. 2단계: 개략적 설계안 제시 및 동의 구하기
      1. 12.2.1. 알림 유형별 지원 방안
    3. 12.3. 3단계: 상세 설계
    4. 12.4. 4단계: 마무리
  13. 13. 11장 - 뉴스피드 시스템 설계
    1. 13.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 13.2. 2단계: 개략적 설계안 제시 및 동의 구하기
      1. 13.2.1. 피드 발행 API
      2. 13.2.2. 피드 읽기 API
      3. 13.2.3. 피드 발행
      4. 13.2.4. 뉴스 피드 생성
    3. 13.3. 3단계: 상세 설계
      1. 13.3.1. 피드 발행
      2. 13.3.2. 피드 읽기 흐름 상세 설계
    4. 13.4. 4단계: 마무리
  14. 14. 12장 - 채팅 시스템 설계
    1. 14.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 14.2. 2단계: 개략적 설계안 제시 및 동의 구하기
  15. 15. 12장 - 채팅 시스템 설계
    1. 15.1. 1단계: 문제 이해 및 설계 범위 확정
    2. 15.2. 2단계: 개략적 설계안 제시 및 동의 구하기
      1. 15.2.1. 폴링
      2. 15.2.2. 롱 폴링
      3. 15.2.3. 웹소켓
      4. 15.2.4. 개략적 설계안
      5. 15.2.5. 상태 유지 서비스
      6. 15.2.6. 제 3자 서비스 연동
      7. 15.2.7. 규모 확장성
      8. 15.2.8. 저장소
      9. 15.2.9. 데이터 모델
      10. 15.2.10. 메시지 ID
    3. 15.3. 3단계: 상세 설계
      1. 15.3.1. 서비스 탐색
      2. 15.3.2. 메시지 흐름
      3. 15.3.3. 접속상태 표시