티스토리 뷰
책 [가상 면접 사례로 배우는 대규모 시스템 설계 기초]에 대해 요약한 글입니다.
단일서버
웹 - 앱 - 데이터베이스 - 캐시 등이 한 서버에서 동작
데이터베이스
웹/모바일 트래픽 처리용도의 서버(웹 계층)와 데이터베이스용 서버(데이터 계층)를 분리
- 독립적 확장 추구
비-관계형(NoSQL) 데이터베이스가 좋은 선택일 수 있는 경우
- 아주 낮은 응답 지연시간 필요
- 다루는 데이터가 비정형 데이터인 경우
- 데이터를 직렬화/역직렬화 할 수만 있으면 되는 경우
- 아주 많은 양의 데이터를 저장할 필요가 있는 경우
수직적 규모 확장 / 수평적 규모 확장
스케일 업 / 스케일 아웃
- 수직적 규모 확장(스케일 업)은 장애에 대한 자동복구 방안이나 다중화 방안을 제시하지 않음. 즉, 장애 발생 시 서비스 중단.
로드 밸런서
- 부하 분산 집합에 속한 웹서버에게 트래픽 부하 고르게 분산
- 로드밸런서를 public ip로 두고 내부에선 private ip로 이용 → 보안 위함.
- 자동복구 문제 해결 및 웹 계층 가용성 향상
데이터베이스 다중화
- 서버 사이에 주 - 부 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장하는 방식
- 부 데이터베이스는 읽기 연산만을 지원 → 일반적으로 읽기 연산이 트래픽이 대다수이므로 주 데이터베이스보다 수가 많아야 함.
- 주/부 데이터베이스 둘 다 정상인 경우 역할이 나뉘어져 있지만, 한 측의 데이터베이스가 사용 불가능하다면 다른 측의 데이터베이스가 다 커버하도록 설계됨.
캐시
캐시 계층은 데이터가 잠시 보관 되는 곳 → 메모리를 사용
- 좋은 성능 (빠름)
- 휘발성 → 영속성 보관 데이터가 의존해서는 안됨
- 만료 및 일관성 유지, 장애 등을 생각해서 사용되어야 함
- 캐시 메모리 크기, Evition 정책 등도 설정 필요
캐싱 전략
- Cache-Aside
- Read-Through Cache
- Write-Through Cache
- Write-Around
- Write-Back
- ...
Caching Strategies and How to Choose the Right One
콘텐츠 전송 네트워크 (CDN)
정적 콘텐츠 저장 → 지리적 분산 서버 네트워크
CDN 사용 시, 고려 사항
- 비용: 제3 자에 의해 운영 → CDN 들어가고 나가는 데이터 전송 양에 따라 요금 지불
- 적절한 만료시간 설정: 만료기간이 중요한 콘텐츠의 경우, 만료시점 설정이 중요함
- CDN 장애 대처방안: CDN 죽었을 때, 어떻게 동작하는가에 대한 대책 필요
- 콘텐츠 무효화: 만료되지 않은 콘텐츠라도 무효화 할 수 있는 방안 필요
- CDN 사업자가 제공하는 API, Object versioning (버저닝 ex] image.png?v=2) 등
무상태 웹 계층
웹 계층으로 수평적으로 확장 → 상태 정보(ex] 사용자 세션)를 웹 계층에서 제거
- 세션은 같은 클라이언트로부터의 요청이 항상 같은 서버로 전송되어야 함
상태 정보가 필요한 경우, 공유 저장소(shared storage)를 사용
- 웹 서버로부터 물리적으로 분리
데이터 센터
2개의 데이터 센터 사용 → 장애 없으면 사용자는 가장 가까운 데이터 센터로 안내됨
- 지리적 라우팅 (geoDNS-routing/geo-routing) 사용
- 만약 장애나면, 장애가 나지 않은 데이터 센터로 연결
이런 것처럼 다중 데이터 센터를 고려하는 경우, 몇 가지 고려해야하는 사항이 있음.
- 트래픽 우회: 올바른 데이터 센터로 트래픽을 보내는 법. GeoDNS 같이.
- 데이터 동기화: 센터마다 별도의 데이터베이스면, 동기화를 어떻게 할 것인가. 보편적으로 다중화함.
메시지 큐
메시지 큐에 일단 보관된 메세지는 소비자가 꺼낼 때까지 안전히 보관되는 특성
- 메시지의 무손실 및 비동기 통신 지원
메시지 큐를 사용하면 서버간 ‘느슨한 결합’을 이룰 수 있음
- 규모확장성 향상, 안정적 애플리케이션 구성 가능
물론, 메시지 큐를 사용하게되면 관리자가 관리해야할 컴포넌트가 늘어나는 것.
로그, 메트릭 그리고 자동화
로그
- 에러로그 모니터링 → 시스템/어플리케이션의 오류 및 문제 찾기 위함
- 검색 및 조회 기능 지원해야 편하다.
메트릭
- 시스템의 현재 상황 파악 , 사업 현황에 관한 유용한 정보
- 호스트 단위 메트릭: CPU, 메모리, 디스크 I/O 등
- 종합 메트릭: 데이터베이스 계층 성능, 캐시 계층 성능
- 핵심 비즈니스 메트릭: 일별 능동 사용자(DAU), 수익 등
자동화
- CI/CD
- 빌드/테스트/배포 절차 자동화 → 개발 생산성 향상
데이터베이스 규모 확장
수직적 확장 → 고성능 자원 증설
- 한계 존재
- 여전히 단일이기에 SPOF 무시할 수 없음
- 비용 비쌈
수평적 확장 → 샤딩
- 한계 없음
- 데이터를 어떻게 분산시키는가가 가장 중요함.
- 데이터 분산을 고려하다보니 시스템 자체가 복잡해지고, 여러 문제가 발생함.
- 이전에 정리했던 consistent hashing도 이러한 문제로 고안되었음
1장 마무리
결국 위 모든 것들을 고려하면 다음과 같은 아키텍처가 될 것
320x100
반응형
'Book' 카테고리의 다른 글
[실용주의 프로그래머] Topic 1 ~ 5 (1) | 2022.03.29 |
---|---|
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 10장 - 알림 시스템 설계 (0) | 2022.03.16 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 7장 - 분산 시스템을 위한 유일 ID 생성기 설계 (2) | 2022.02.18 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 4장 - 처리율 제한 장치의 설계 (0) | 2022.02.01 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3장 - 시스템 설계 면접 공략법 (0) | 2022.01.30 |
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- c++
- 일상
- java
- 비동기
- jasync
- tag
- boj
- python
- Clean Architecture
- Istio
- HTTP
- 쿠버네티스
- MySQL
- hexagonal architecture
- gradle
- Spring
- docker
- Intellij
- Algorithm
- 클린 아키텍처
- container
- 로그
- Spring boot
- 백준
- Kubernetes
- 알고리즘
- k8s
- WebFlux
- 하루
- Log
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함