1. 단일 서버

2. 데이터베이스

3. 수직적 규모 확장 vs 수평적 규모 확장

4. 데이터베이스 다중화

5. 로드밸런서와 데이터베이스 다중화

6. 응답시간(La-tency)

7. 콘텐츠 전송 네트워크(CDN)

1. 단일 서버

1-1) 모든 컴포넌트가 단 한 대의 서버에서 실행되는 간단한 시스템 설계하기

1-1)-1. 사용자 요청이 처리되는 과정

Untitled

1-1)-2. 사용자 요청 처리 흐름

  1. 사용자는 도메인 이름(api.mysite.com)을 이용해 웹사이트에 접속함. 접속을 하기 위해서는

도메인 이름을 도메인 이름 서비스(Domain Name Service, DNS)에 질의하여

IP 주소로 변환하는 과정이 필요함.

DNS는 보통 제3사업자가 제공하는 유료 서비스를 이용하므로 시스템의 일부는 아님.

  1. DNS 조회 결과로 IP주로가 반환 됨. 이 주소는 웹 서버의 주소임.

Untitled

  1. 해당 IP 주소로 HTTP 요청이 전달 됨.

  2. 요청을 받은 웹 서버는 HTML 페이지나 JSON 형태의 응답을 반환함.

1-1)-3. 두 가지 종류로 오는 요청

1-1)-4. 여러 대의 서버 두기

사용자가 늘면 서버 하나로는 충분하지 않아 여러 서버를 두어야 함.

Untitled

2. 데이터베이스

2-1) 관계형 데이터베이스 시스템(relational data-base management system, RDBMS)

RDBMS 가운데 가장 유명한 게 'MySQL', '오라클 데이터베이스', 'PostgreSQL' 등이 있음.

자료를 테이블과 열, 칼럼으로 표현하며 SQL을 사용하면 여러 테이블에 있는 데이터를

그 관계에 따라 조인하여 합칠 수 있음.

2-2) 비 관계형 데이터 베이스(NoSQL)

대표적인 것으로 CouchDB, Neo4j, Cassandra, HBase, Amazon DynamoDB 등이 있음.

NoSQL은 다시 네 부류로 나눌 수 있는데, 1) 키-값 저장소(key-value store), 2) 그래프 장소,

  1. 칼럼 저장소(column store), 4) 문서 저장소(document store)로 나뉨.

이런 비-관계형 데이터베이스는 일반적으로 조인 연산은 지원하지 않음.

2-3) 비-관계형 데이터베이스가 바람직할 경우

3. 수직적 규모 확장 vs 수평적 규모 확장

3-1) 수직적 규모 확장(Scale-up(Click))

서버에 고사양 자원을 추가하는 행위를 말함. 서버로 유입되는 양이 적을 때는 수직적 확장이 좋은 선택임.

가장 큰 장점은 단순함에 있음.

3-1)-1. 단점

3-2) 수평적 규모 확장(Scale-out)

더 많은 서버를 추가하여 성능을 개선하는 행위를 말함.

대규모 애플리케이션을 지원하는 데는 수평적 규모 확장법이 적절함.

3-3) 로드밸런서

서버가 한계 상황에 도달하게 되면 응답 속도가 느려지거나 서버 접속이 불가능해질 수도 있음.

이런 문제를 해결하는 데는 부하 분사기 또는 로드밸러서를 도입하는 것이 최선임.

Untitled

3-3)-1. 로드밸런서의 장점

부하 분산 집합에 또 하나의 웹 서버를 추가하고 나면 장애를 자동복구하지 못하는 문제는 해소되며

웹 계층의 가용성은 향상됨.

4. 데이터베이스 다중화

보통은 서버 사이에 주(master)와 부(slave) 관계를 설정하고

데이터 원본은 주 서버에 사본은 부 서버에 저장하는 방식임.

대부분의 애플리케이션은 읽기 연산의 비중이 쓰기 연산보다 훨씬 높음.

4-1) 주 서버(master)

4-2) 부 서버(slave)

4-3) 데이터베이스의 다중화의 이득

4-4) 데이터베이스 하나가 다운되면 무슨일이 벌어질까?(위의 처럼 설계할 경우)

5. 로드밸런서와 데이터베이스 다중화

6. 응답시간(La-tency)

7. 콘텐츠 전송 네트워크(CDN)