대규모 시스템 설계를 배우며 배운점 중 중요한 내용이나 기억해야할 사항들을 정리해 놓은 공간
- 인덱스 관련 메모
→ 성능 병목이 발생한 쿼리에 대해 인덱스 추가 및 EXPLAIN 분석 내용 - 무한 depth 댓글 설계
→ Path Enumeration 방식으로 무한 계층 댓글을 효율적으로 구현한 설계 - 좋아요 수 테이블 설계
→ MSA 환경에서 분산 트랜잭션을 피하기 위한 좋아요 수 테이블 분리, 샤딩 전략 및 동시성 이슈 고려 - Kafka Cluster 개념 정리
→ Kafka의 pub/sub 구조, partition 분산 처리, 복제 설정 및 Consumer Group에 따른 offset 처리 방식 등 대규모 시스템에서 Kafka를 안정적으로 운영하기 위한 핵심 개념 정리 - 인기글 설계
→ Kafka 기반 실시간 이벤트 스트림 + Redis Sorted Set을 활용한 고속 인기글 선정 시스템 설계 (대규모 트래픽 대응 최적화) - Outbox Message Relay 설계
→ 트랜잭션 메시징을 위한 Outbox 테이블과 Message Relay를 활용한 안정적인 이벤트 발행 및 샤딩된 데이터베이스 Polling 처리 방식 - CQRS 적용
→ 조회 성능을 높이되 마이크로서비스 간 결합도를 낮추고 장애 전파를 방지하며 자원을 효율적으로 사용하는 설계 - 캐시 최적화 전략
→ @Cacheable 사용 시 Thundering Herd 현상을 방지하기 위해 분산락과 Logical TTL vs Physical TTL 분리 전략을 적용.
- Long 타입으로 반환하게 되면 javascript에서도 깨질 수 있으므로 client에 반환할 경우는 String 타입으로 변환하면 안전함.
- 컨슈머는 쓰기 트래픽에 대해서 작업, API는 조회 트래픽에 대해서 작업하므로 분리하는 편이 좋음
- 애플리케이션이 20개, 파티션이 5개인 경우, 15개의 컨슈머는 파티션을 처리 안함.
- 카프카 설정에 대해 공부해보는 것이 좋음
- 샤드도 직접 만들어보면 좋음