개요
기존 방식의 시스템 디자인 및 확장 과정을 공부하고, 이를 통해 클라우드 컴퓨팅 장점을 학습한다.
목표
간단한 SNS 시스템을 디자인
- 소규모 사업장을 위한 간단한 SNS 구현(직원 수 :100명)
- 서비스 품질(Qos)이 우수해야 한다.
SNS 서비스를 제공하기 위해 필요한 서버 측 모듈/컴포넌트
- 웹 서버 또는 WWW + WAS
- 서비스 접속을 위한 웹 페이지
- SNS 기능 사용
- 데이터베이스
디자인
- 디자인1: 웹 서버와 데이터베이스를 한대의 서버 컴퓨터에 설치
- 문제점 : 직원수가 늘어나면 정상적인 서비스가 가능?
- 사용자 수가 늘어나면 응답시간이 증가하고 오류가 발생한다.
- 문제점 : 직원수가 늘어나면 정상적인 서비스가 가능?
- 디자인2: 한대의 서버를 두대로 분리 서버1에는 웹서버, 서버2에는 데이터베이스 설치
- 기능/역할에 따른 분할
- 디자인1에 비해 서비스 품질이 개선된 이유는?
- 기존에는 한대의 컴퓨터가 웹서버와 데이터베이스 업무 처리를 모두 담당했는데 지금은 각 서버가 담당하는 일이 줄어듦 -> 시스템 부하 감소
- 문제점 : 사용자 수가 더 증가하면 또 서비스 품질이 떨어진다. -> Scale Up방식으로 시스템을 개선하자!
- 시스템을 확장하는 대표적인 두 가지 방법
- 수직 확장
- 기존의 시스템 장비/부품을 고 사양으로 대체하는 방법
- 예) CPU 업그레이드, 고성능 메모리 교체
- 수평 확장
- 더 많은 장비를 추가하여 성능 확장
- 수직 확장
- 디자인3 : Vertical Scaling
- 각 부품의 성능 개선을 했다.
- 문제점 : 서비스 품질이 저하될 때마다, 지속적으로 부품의 성능 개선이 필요하지만 한계가 있다.
- 디자인4 : 웹서버 늘리기
- 웹 서버를 1대 더 추가
- 각 웹 서버가 처리하는 부하를 반으로 줄이자!
- 문제점
- 부하(load)를 어떻게 분산시키나
- 웹 서버가 2대로 늘어나면, 사용자는 어느 웹 서버에 접속해야 할까?
- 이를 해결하기 위해 LB(Load balancer, 부하 분산자)를 도입한다.
- LB는 정해진 정책에 따라 부하를 분산시킴
- ex) RR(round-robin) 단점 : 실제로 패킷별 사용량이 다르다.
- LB는 정해진 정책에 따라 부하를 분산시킴
- 웹 서버를 1대 더 추가
- 디자인5 : DB 늘리기
- 사용자가 지속적으로 증가함에 따라 서비스 성능이 다시 저하된다.
- 성능 분석 결과, DB에서 병목 현상이 발생
- DB를 1대 더 추가하고 데이터 타입에 따라 역할을 분리하자
- 위 시스템에서 문제는 LB가 단일 실패지점이라는 것이다 LB가 비정상 종료되면 전체 시스템이 종료된다.
- 이를 해결하기 위해 LB를 1대 더 추가해서 하나가 고장 나면 다른 하나를 사용하는 방식으로 설계한다.
- LB 늘리기
- LB를 1대 더 추가하고, 하나가 고장 나면 다른 하나를 사용하는 방식으로 시스템 안전성을 높이자
- high availability 고 가용성
- 여분의 장비를 추가로 사용하면 고 가용성을 높일 수 있다. (하나는 대기, 고장 나면 교체)
- Active-actvie
- 두 대의 장비가 모두 활성화 ㅚ어 서비스를 제공하고, 한대의 장비에 문제가 생기면 해당 장비는 사용하지 않음
- Active-standby
- 한대는 active, 다른 한대는 standby 모드로 설정하고, active 상태인 장비만 사용 active 장비가 고장 나면 즉시 standby 장비가 active 상태로 전환하여 서비스를 제공한다.
- high availability 고 가용성
- LB를 1대 더 추가하고, 하나가 고장 나면 다른 하나를 사용하는 방식으로 시스템 안전성을 높이자
- stateful 이면 동기화가 필요하다.
- 예) 같은 역할을 하는 DB가 다수일 때 동기화가 필요하다.
- HA 클러스터로 묶인 장비들 간에는 주기적으로 heartbeat 체크 및 데이터 동기화 필요하다.
HS 방식을 사용하는 경우 서비스에 장애 없이 성능을 높이거나 줄일 수 있지만, 이 과정에서 서버 재배치, OS/SW 설치 등에 시간+노력이 필요하다. 또 갑자기 많은 사용자가 탈퇴한다면 비용 낭비가 발생한다.
그렇다면 적은 비용으로 신속하게 시스템 성능을 높였다가 낮출 수 있을까?
클라우드 컴퓨팅 기술을 이용하면 가능하다.!
'클라우드컴퓨팅' 카테고리의 다른 글
클라우드 컴퓨팅 기본모델, 핵심기술 (1) | 2024.04.19 |
---|---|
도커 Container Layer의 내용을 장기적으로 저장하기 (0) | 2024.04.07 |
도커 리소스 사용량 제한하기 (0) | 2024.04.07 |
도커 기초 (0) | 2024.03.31 |
가상화기술(도커, 가상머신) (0) | 2024.03.31 |