사용자 처리 흐름
1. 사용자는 도메인 이름을 이용하여 웹사이트에 접속한다.
2. DNS 조회 결과로 IP 주소가 반환된다.
3. 해당 IP 주소로 HTTP요청이 전달된다.
4. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환한다.
사용자가 늘면 서버 하나로는 충부낳지 않아서 여러 서버를 두어야 한다. 하나는 웹/모바일 트래픽 용도고, 다른 하나는 데이터베이스 용이다. 이렇게 분리하면 각각을 독립적으로 확장해 나갈 수 있게 된다.
관계형 데이터베이스와 비-관게형 데이터베이스 사이에서 고를 수 있다.
대부분의 경우 관계형 데이터베이스가 최선일 것인데, 40년 이상 시장에서 살아남아 잘 사용되어 온 시스템이기 때문이다. 하지만 아래와 같은 경우에는 비-관계형 데이터베이스가 바람직한 선택일 수 있다.
서버로 유입되는 트래픽의 양이 적을 때는 수직적 확장이 좋은 선택이며, 이 방법의 가장 큰 장점은 단순함이다. 그러나 이 방법에는 몇가지 단점이 있다.
이러한 단점 때문에, 대규모 애플리케이션을 지원하는 데는 수평적 규모 확장법이 보다 적절하다.
로드밸런서는 부하 분산 집합에 속한 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할을 한다.
부하 분산 집합에 또 하나의 웹 서버를 추가하고 나면 장애를 자동복구하지 못하는 문제는 해소되며, 웹 계층의 가용성을 향상된다.
데이터베이스 다중화를 통해 데이터베이스 서버 장애시 대처를 할 수 있다.
보통 서버 사이에 주-부 관계를 설정하고 데이터 원본은 주 서버에, 사본은 부 서버에 저장하는 방식을 사용한다.
쓰기 연산은 마스터에서만 지원한다. 부 데이터베이스는 주 데이터베이스로부터 그 사본을 전달받으며, 읽기 연산만을 지원한다. 대부분의 애플리케이션은 읽기 연산의 비중이 쓰기 연산보다 훨씬 높다. 따라서 통상 부 데이터베이스의 수가 주 데이터베이스의 수보다 많다.
데이터베이스를 다중화하면 다음과 같은 이득이 있다.
그림1-6은 로드밸런서와 데이터베이스 다중화를 고려한 설계안이다.이 설계안은 다음과 같이 동작한다.
캐시는 값비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고, 뒤이은 요청이 보다 빨리 처리될 수 있도록 하는 저장소다. 애플리케이션의 성능은 데이터베이스를 얼마나 자주 호출하느냐에 좌우되는데, 캐시는 그런 문제를 완화할 수 있다.
캐시 계층은 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨씬 빠르다. 별도의 캐시 계층을 두면 성능이 개선될 뿐 아니라 데이터베이스의 부하를 줄일 수 있고, 캐시 계층의 규모를 독립적으로 확장시키는 것도 가능해진다.
CDN은 정적 콘텐츠를 전송하는 데 쓰이는, 지리적으로 분산된 서버의 네트워크이다. 이미지, 비디오, CSS, JavaScript 파일 등을 캐시할 수 있다.
그림 1-11은 CDN이 추가된 설계이다.
웹 계층을 수평적으로 확장하기 위해서는 상태 정보를 웹 계층에서 제거하여야 한다. 좋은 방법은 상태 정보를 관계형 데이터베이스나 NoSQL 같은 지속성 저장소에 보관하고, 필요할 때 가져오도록 하는 것이다.
그림 1-13과 같은 구조에서 웹 서버는 상태 정보가 필요할 경우 공유 저장소로부터 데이터를 가져온다. 따라서 상태 정보는 웹 서버로부터 물리적으로 분리되어 있다.
그림 1-14는 무상태 웹 계층을 갖도록 변경한 설계이다.
장애가 없는 상황에서 사용자는 가장 가까운 데이터 센터로 안내되는데, 이 절차를 지리적 라우팅(geoDNS-routing)이라고 부른다.
만약 데이터 센터 중 하나에 심각한 장애가 발생하면 모든 트래픽은 장애가 없는 데이터 센처로 전송된다.
메시지 큐는 메시지의 무손실을 보장하는, 비동기 통신을 지원하는 컴포넌트다.
메시지 큐를 이용하면 서비스 또는 서버 간 결합이 느슨해져서, 규모 확장성이 보장되어야 하는 안정적 애플리케이션을 구성하기 좋다.
[System Design Interview] 8장 URL 단축기 설계 (0) | 2023.07.23 |
---|---|
[System Design Interview] 7장 분산 시스템을 위한 유일 ID 생성기 설계 (1) | 2023.07.18 |
[System Design Interview] 5장 안정 해시 설계 (0) | 2023.07.04 |
[System Design Interview] 3장 시스템 설계 면접 공략법 (0) | 2023.06.12 |
[System Design Interview] 2장 개략적인 규모 추정 (0) | 2023.06.11 |
댓글 영역