요즘 페북이, 트위터, 유튜브에 많이 떠돌아다니는 책이며, 지인 + 개발바닥(유투브)에서 추천받은 책이라 꼭 읽어 봐야겠다고 생각이 들었습니다. 아직 서비스 기업을 다니고 있지 않아 대규모 트래픽을 받아 본 경험이 없는 신입 개발자, 구직자들에게 읽기 좋은 책이라고 들었습니다. 책의 목차를 보면 실제 사례를 통해 어떻게 시스템을 설계하며 어떻게 문제를 해결했는지 상세하게 설명하는 것 같습니다. (뉴스피드 시스템 설계, 유튜브 설계, 구글 드라이브 설계.. 이런 제목들 보면)
특히 1장에 나오는 규모의 확장성에 대한 아키텍처는 손으로 직접 그려보는 것이 좋을 것 같아 무작정 노트패드 열어서 따라 그렸습니다. 책 내용을 정리하려다가 내용이 갈수록 복잡+심오 해지는 부분이 있어 이후의 내용은 직접 구매 후 읽어보시는 것을 추천합니다.
1장 사용자 수에 따른 규모 확장성
- 웹 계층은 무상태 계층으로 : 상태 정보(세션과 같은)를 웹계층에서 제거 해야한다.
- 모든 계층에는 다중화 도입
- 가능한 한 많은 데이터를 캐시할 것
- 여러 데이터 센터를 지원할 것
- 정적 콘텐츠는 CDN을 통해 서비스할 것
- 데이터 계층은 샤딩을 통해 그 규모를 확장할 것
- 각 계층은 독립적 서비스로 분할할 것
- 시스템을 지속적으로 모니터링하고, 자동화 도구들을 활용할 것
2장 개략적인 규모 추정
- 메모리는 빠르지만 디스크는 아직도 느리다.
- 디스크 탐색은 가능한 한 피하라
- 단순한 압축 알고리즘은 빠르다.
- 데이터를 인터넷으로 전송하기 전에 가능하면 압축하라
- 데이터 센터는 보통 여러 지역에 분산되어 있고, 센터들 간에 데이터를 주고받는 데는 시간이 걸린다.
3장 시스템 설계 면접 공략법
4장 처리율 제한 장치의 설계
처리율 제한 장치란?
사용자는 초당 2회 이상 새 글을 올릴 수 없다.
트위터는 3시간 동안 300개의 트윗만 올릴 수 있다.
구글 docs API는 사용자당 분당 300회의 read요청만 허용한다.
처리율 제한 장치를 서버에 vs API 게이트웨이에
처리율 제한 알고리즘
- 토큰 버킷(token bucket)
- 누출 버킷(leaky bucket)
- 고정 윈도 카운터(fixed window counter)
- 이동 윈도 로그(sliding window log)
- 이동 윈도 카운터(sliding window counter)
5장 안정 해시 설계
- 서버와 키를 균등 분포 해시 함수를 사용해 해시 링에 배치한다.
- 키의 위치에서 링을 시계 방향으로 탐색하다 만나는 최초의 서버가 키가 저장될 서버이다.
두가지 문제 발생
1. 키의 균등 분포를 달성하기 어려움
2. 파티션의 크기를 균등하게 유지하는게 불가능하다.
이를 해결하기 위해 가상 노드 or 복제(replica)라 불리는 기법이 등장했다.
안정 해시의 이점
1. 서버가 추가되거나 삭제될 때 재배치되는 키의 수가 최소화된다.
2. 데이터가 보다 균등하게 분포하게 되므로 수평적 규모 확장성을 달성하기 쉽다.
3. 핫스팟 키 문제를 줄인다.
이후의 내용은 책을 보는 것이 더 좋을것 같아 여기까지만 정리하려고 합니다.
자세한 내용은 아래 도서를 읽어 보시길 추천드립니다.
"가상 면접 사례로 배우는 대규모 시스템 설계 기초", 인사이트, 알렉스 쉬 지음
'서평' 카테고리의 다른 글
[서평] 쏙쏙 들어오는 함수형 코딩 (1) | 2022.05.02 |
---|---|
[서평] 프로그래머의 뇌 (The Programmer's Brain) (0) | 2022.04.03 |
나는 LINE 개발자입니다. (0) | 2021.03.28 |
행복한 프로그래밍 (0) | 2020.04.19 |
[DB] SQL 첫걸음 (0) | 2020.04.19 |