가상 면접 사례로 배우는 대규모 시스템 설계 기초 - System Design Interview
1장 사용자 수에 따른 규모 확장성 : 어떻게 수백만 사용자를 지원하는 시스템을 설계할 것인가.
1장 사용자 수에 따른 규모 확장성 (1) - 웹서버, 데이터베이스, 로드밸런스
에서 이어지는 글입니다.
수직적 규모 확장 vs 수평적 규모 확장
데이터베이스
많은 데이터베이스 관리 시스템이 다중화를 지원한다.
보통은 서버 사이에 주(master)-부(slave) 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장하는 방식을 사용한다.
쓰기 연산(write operation)은 마스터에서만 지원한다.
부 데이터베이스는 주 데이터베이스로부터 그 사본을 전달받으며, 읽기 연산(read operation)만을 지원한다.
대부분의 애플리케이션은 읽기 연산의 비중이 쓰기 연산보다 훨씬 높다. 따라서 일반적으로 부 데이터베이스의 수가 주 데이터베이스의 수보다 많다.
데이터베이스 다중화의 이점
- 더 나은 성능
모든 데이터 변경 연산은 주 데이터베이스로만 전달되는 반면
읽기 연산은 부 데이터베이스 서버들로 분산된다. 병렬로 처리될 수 있는 질의(query)의 수가 늘어나므로 성능이 좋아진다.
- 안정성
데이터베이스 서버 가운데 일부가 파괴되어도 데이터는 보존될 수 있다.
- 가용성
데이터를 여러 지역에 복제해 둠으로써, 하나의 데이터베이스 서버에 장애가 발생하더라도 다른 서버에 있는 데이터를 가져와 계속 서비스할 수 있게 된다.
데이터 베이스 서버 가운데 하나가 다운되면 무슨일이 벌어지는가?
부 서버가 다운되었을 경우
- 부 서버가 한 대 뿐인 경우 : 읽기 연산은 한시적으로 모두 주 데이터베이스로 전달되고 새로운 부 데이터베이스 서버가 장애 서버를 대체
- 부 서버가 여러대인 경우 : 읽기 연산은 나머지 부 데이터베이스 서버들로 분산됨 새로운 부 데이터베이스 서버가 장애 서버를 대체
주 서버가 다운되었을 경우
- 부 서버가 한 대 뿐인 경우 : 부 데이터베이스 서버가 새로운 주 서버가 될 것이며, 모든 연산은 일시적으로 새로운 주 서버상에서 수행된다. 그리고 새로운 부 서버가 추가될 것이다.
- 부 서버가 여러대일 경우 : 부 데이터 서버중 하나가 새로운 주 데이터 서버가 될 것이며, 나머지 부 데이터베이스 서버들은 새로운 주 데이터베이스 서버에서 데이터를 복제하여 적용한다. 그리고 새로운 부 서버가 추가될 것이다.
* production 환경에서는 부 서버에 보관된 데이터가 최신 상태가 아닐 경우도 고려해야 한다. 없는 데이터는 복구 스크립트를 돌려서 추가해야 한다
* 다중 마스터나 원형 다중화 방식을 도입하면 이런 상황에 대처하는데 도움이 된다고 한다. (하지만 복잡도가 올라감. 책에서도 언급만 나와있음)
여기까지의 시스템 구성도
* 웹 서버와 DB 사이에도 로드밸런서가 있어야 할 것 같은데 그 부분은 생략된 것 같다.
'스터디-공부 > 시스템 디자인' 카테고리의 다른 글
2장 개략적인 규모 추정(back-of-the-envelope estimation) (0) | 2023.05.05 |
---|---|
1장 사용자 수에 따른 규모 확장성 (5) - 메시지큐, 로그, 메트릭, 자동화, 데이터베이스의 규모 확장 (1) | 2023.05.04 |
1장 사용자 수에 따른 규모 확장성 (4) - 무상태 웹 계층, 데이터 센터 (0) | 2023.05.03 |
1장 사용자 수에 따른 규모 확장성 (3) - 캐시, CDN (0) | 2023.05.02 |
1장 사용자 수에 따른 규모 확장성 (1) - 웹서버, 데이터베이스, 로드밸런스 (0) | 2023.05.02 |
댓글