출처: 가상 면접 사례로 배우는 대규모 시스템 설계 기초 System Design Interview 1장
기록용으로 몇가지 키워드만 남긴다.
추후 하나씩 블로그를 통해 다뤄보면 유익할 것 같다.
일반적인 웹 서비스 구조를 가정하면
Client (Mobile or Web) -> LB -> Web Server -> Database로 큰 관점에서의 Layered Architecture가 되는데, 이를 확장성있게 설계하기 위한 체크리스트이자 요약이다.
- 핵심은 모든 계층을 다중화 하자. "모든 계층에 Scale Out 전략이 세워졌나?"
- Stateless 웹 계층. "Client <-> Server간 REST API 설계가 제대로 됐나?"
- 가능한 한 많은 데이터를 캐시해야 한다. "캐시 전략은 세웠나?, 어떤 데이터를 캐시할지, 어떤 캐시 전략을 쓸지, 어떤 캐시 Eviction 전략을 쓸지"
- Global 서비스를 염두에 두고 있다면 여러 리전에 배포해야 한다. "GeoRouting 설정은 했나? Failover Scenario는 점검했나?"
- CDN을 사용한다. "정적 컨텐츠는 CDN을 사용했나?"
- 샤딩을 통해 DB를 확장한다. "샤딩을 고려하여 데이터 모델링이 되었나? 샤딩된 데이터에 대해 JOIN이 필요한 경우를 대비한 역정규화를 고려했나?"
- JOIN이 필요하지 않은 대규모 데이터는 NoSQL을 사용한다. "NoSQL을 고려했나?"
- Asynchronous Messaging을 적극적으로 활용한다. "오래 걸리는 작업은 Message Queue로 설계가 되었나? 시스템 간 통신 시 응답이 불필요한 경우 Message Queue로 설계가 되었나?"
- 대규모 서비스 개발 및 배포에 대한 자동화를 적용한다. "CICD가 준비되었나?"
- 시스템 상태에 대한 자동화를 적용한다. "Monitoring, Logging, Alerting, Metering 시스템이 연동되었나"
다음은 읽어볼 참고 문헌이다.
- Multi-master Replication, https://en.wikipedia.org/wiki/Multi-master_replication (RDB, Multi-master를 극혐..)
- NDB Cluster Replication: Multi-Master and Circular Replication, https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-replication-multi-source.htmlsdf
- Caching Strategies and How to Choose the Right One, https://codeahoy.com/2017/08/11/caching-strategies-and-how-to-choose-the-right-one/
- Netflix의 Data 다중화, https://netflixtechblog.com/active-active-for-multi-regional-resiliency-c47719f6685b
- Single DB로 천만명을? Stackoverflow, https://nickcraver.com/blog/2013/11/22/what-it-takes-to-run-stack-overflow/
'SW Architecture' 카테고리의 다른 글
ETL Pipeline 개발에도 필요했던 MSA (0) | 2022.11.18 |
---|---|
REST API 설계 (0) | 2021.03.16 |