사용자 수에 따른 규모 확장성
사용자 수에 따른 규모 확장성
- 요약
- 웹 계층은 무상태 계층으로
- 모든 계층에 다중화 도입
- 가능한 많은 데이터를 캐시할 것
- 여러 데이터 센터를 지원할 것
- 정적 콘텐츠는 CDN을 통해 서비스할 것
- 데이터 계층은 샤딩을 통에 그 규모를 확장할 것
- 각 계층은 독립적 서비스로 분할할 것
- 시스템을 지속적으로 모니터링 하고, 자동화 도구들을 활용할 것
단일서버
시스템이 단일 서버로 구현되어있다고 가정할 시 프로세스
- 사용자가 도메인(api.mysite.com)으로 접속한다.
- DNS에 질의하여 IP주소로 반환된다. (DNS는 제3사업자임)
- IP주소로 HTTP 요청
- HTML or Json으로 응답
데이터베이스
RDBMS vs NoSQL
- RDBMS
- 오라클, MySQL, PostegreSQL
- 열, 컬럼으로 표현
- Join으로 합침
- NoSQL
- MongoDB …
- Join 지원 안함
NoSQL 쓰는 경우
- 속도 중요할 시
- 비정형 데이터일 시
- 데이터 직렬화, 역직렬화 용
- 대량의 데이터
수직적 규모 확장 vs 수평적 규모 확장
Sacale-Up vs Sacale-Out
Scale-Up : 단일 서버 사양을 높임
Scale-Out : 서버 수를 추가
Sacale-Up 아닌 Sacale-Out이 유리한 이유
- 한 대의 서버 메모리를 무한대로 증설할 방법이 없음
- 장애에 대한 자동복구 방안이나 다중화 제시 X
로드밸런서(LB)
- 트래픽 분산의 역할
DB 다중화
- 이중화 시 master-slave로 나눔
- master는 write, slave는 read
- 보통 read연산 비중이 훨씬 높고 slave DB가 더 많음 → 성능
캐시
- 값비싼 연산 결과나 자주 참조되는 데이터를 저장하는 메모리
캐시 사용 시 고려해야 할 것
- 영속적인 데이터 X
- 만료(expire) 방식
- LRU → 가장 자주 씀
- LFU
- FIFO
- 데이터 일관성 유지 방식
콘텐츠 전송 네크워크(CDN)
- 정적 콘텐츠 캐싱
- CSS, JS, 이미지, 비디오
무상태(stateless) 웹 계층
- Scale-Out 시 중요
- 상태정보를 웹 계층에서 제거
상태 정보를 웹 말고 DB에 저장
- MSA시 공유저장소를 활용
- Redis, NoSQL 활용
데이터센터
- 통상적으로 지리적으로 가장 가까운 곳으로 라우팅(Geo-routing)
구축 시 신경써야 할 것
- 트래픽 우회
- 데이터 동기화
- 테스트와 배포
→ Message Queue는 시스템이 독립적으로 확장할 수 있는 핵심전략
메시지 큐
- 무손실, 비동기
- pub-sub 방식
데이터베이스의 규모 확장
샤딩(sharding)
- DB를 scale-out 하는 것
- 모든 샤드는 같은 스키마를 쓰지만 데이터 중복은 없음
- 샤딩 키를 정하는 것이 중요
This post is licensed under CC BY 4.0 by the author.