Scale From Zero to Millions of Users
사용자 수에 따른 규모 확장성
Single Server Architecture (단일 서버 구조)
- DNS Server에 질의하여 Domain Name(api.mysite.com)을 IP 주소(15.125.23.214)로 변환한다.
- DNS는 보통 Third Party가 제공하는 유료 서비스를 이용하게 되므로, 우리 시스템의 일부는 아니다.
- IP 주소를 반환받는다.
- 해당 IP 주소로 HTTP Request가 전달된다.
- 요청을 받은 Web Server는 DB와 상호작용하며 데이터를 가공한다.
- Web Server는 HTML 페이지나 JSON 형태의 HTTP Response를 User에게 반환한다.
* DHCP (동적 호스트 구성 프로토콜) (URL)
[Computer Network] DHCP | 동적 호스트 구성 프로토콜
DHCP Dynamic Host Configuration Protocol 동적 호스트 구성 프로토콜 - 처음으로 부팅했거나, 디스크가 없는 컴퓨터에게 Communication에 필요한 4가지 요소를 제공하기 위한 Client-Server Protocol(Client-Server Program)
dad-rock.tistory.com
Which Databases to Use? (어떤 데이터베이스를 사용할 것인가?)
RDBMS (Relational Database Management System)
- 데이터를 테이블과 칼럼으로 표현하며, 시장에서 오랫동안 살아남아 잘 사용되어 온 시스템이다.
- Oracle Database
- MySQL
- PostgreSQL
NoSQL
- 비 관계형 데이터베이스로, NoSQL은 다시 아래와 같이 분류된다:
- Key-Value Store
- Graph Store
- Column Store
- Document Store
- 대표적인 상용 NoSQL DB는 아래와 같다:
- CouchDB
- Neo4j
- Cassandra
- HBase
- Amazon DynamoDB
아래와 같은 경우, NoSQL DB가 바람직한 선택지일 수 있다:
- 아주 낮은 Latency(응답 지연시간)가 요구된다.
- 다루는 데이터가 Unstructured(비정형)이다. (관계형이 아니다.)
- 데이터를 Serialize 하거나 Deserialize 할 수 있기만 하면 된다.
- 아주 많은 양의 데이터를 저장해야 한다.
Vertical Scaling (Scale Up; 수직적 규모 확장)
- 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM 등)을 추가하는 행위를 의미한다.
- 서버로 유입되는 트래픽 양이 적을 경우 적합한 방법이며, 비교적 간단하게 성능을 제고할 수 있는 방법이다.
- Scale Up을 통한 성능 제고는 아래와 같은 단점이 있다:
- Scale Up은 한계가 있다. (하나의 서버에 CPU 또는 메모리를 무한정 증설할 수 없다.)
- 장애에 대한 Failover(자동복구) 방안이나 Redundancy(다중화) 방안을 제시하지 못한다.
Horizontal Scaling (Scale Out; 수평적 규모 확장)
- 더 많은 서버를 추가하여 성능을 개선하는 행위를 의미한다.
- 대규모 애플리케이션을 지원하는 경우 알맞은 성능 제고 방법이다.
- No Failover(장애를 자동복구하지 못하는 문제)가 없다.
- 웹 계층의 Availability가 향상된다.
Load Balancer (로드밸런서)
- 로드밸런서는 Load Balancing Set에 속한 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할을 한다.
- 로드밸런서는 Public IP로 접근하는 요청을 받아 Private IP로 연결된 Server에 부하를 분산함으로써
Server가 클라이언트의 접속을 직접 처리하지 않게 하여 보안성을 향상시킨다.
Reference: System Design Interview - An Insider's Guide 2nd Edition
(Alex Xu 저, Independently Published, 2020)