클라우드컴퓨팅

시스템 디자인/확장

salmon16 2024. 3. 30. 23:46

개요 

기존 방식의 시스템 디자인 및 확장 과정을 공부하고, 이를 통해 클라우드 컴퓨팅 장점을 학습한다.

목표

간단한 SNS 시스템을 디자인 

  • 소규모 사업장을 위한 간단한 SNS 구현(직원 수 :100명)
  • 서비스 품질(Qos)이 우수해야 한다.

SNS 서비스를 제공하기 위해 필요한 서버 측 모듈/컴포넌트

  • 웹 서버 또는 WWW + WAS
    • 서비스 접속을 위한 웹 페이지
    • SNS 기능 사용
  • 데이터베이스 

디자인

  • 디자인1: 웹 서버와 데이터베이스를 한대의 서버 컴퓨터에 설치
    • 문제점 : 직원수가 늘어나면 정상적인 서비스가 가능?
      • 사용자 수가 늘어나면 응답시간이 증가하고 오류가 발생한다.
  • 디자인2: 한대의 서버를 두대로 분리 서버1에는 웹서버, 서버2에는 데이터베이스 설치
    • 기능/역할에 따른 분할
    • 디자인1에 비해 서비스 품질이 개선된 이유는?
      • 기존에는 한대의 컴퓨터가 웹서버와 데이터베이스 업무 처리를 모두 담당했는데 지금은 각 서버가 담당하는 일이 줄어듦 -> 시스템 부하 감소
      • 문제점 : 사용자 수가 더 증가하면 또 서비스 품질이 떨어진다. -> Scale Up방식으로 시스템을 개선하자!
  • 시스템을 확장하는 대표적인 두 가지 방법
    • 수직 확장 
      • 기존의 시스템 장비/부품을 고 사양으로 대체하는 방법
      • 예) CPU 업그레이드, 고성능 메모리 교체
    • 수평 확장
      • 더 많은 장비를 추가하여 성능 확장

 

  • 디자인3 : Vertical Scaling 
    • 각 부품의 성능 개선을 했다. 
    • 문제점 : 서비스 품질이 저하될 때마다, 지속적으로 부품의 성능 개선이 필요하지만 한계가 있다.
  • 디자인4 : 웹서버 늘리기
    • 웹 서버를 1대 더 추가
      • 각 웹 서버가 처리하는 부하를 반으로 줄이자!
      • 문제점
        • 부하(load)를 어떻게 분산시키나
        • 웹 서버가 2대로 늘어나면, 사용자는 어느 웹 서버에 접속해야 할까?
        • 두 웹 서버의 IP가 다르다 그래서 사용자가 서버에 접속할 때 DNS에서 어느 서버의 IP를 주어야 할지 문제가 생긴다.
        • 이를 해결하기 위해 LB(Load balancer, 부하 분산자)를 도입한다.
          • LB는 정해진 정책에 따라 부하를 분산시킴
            • ex) RR(round-robin) 단점 : 실제로 패킷별 사용량이 다르다.

  • 디자인5 : DB 늘리기
    • 사용자가 지속적으로 증가함에 따라 서비스 성능이 다시 저하된다.
    • 성능 분석 결과, DB에서 병목 현상이 발생
    • DB를 1대 더 추가하고 데이터 타입에 따라 역할을 분리하자
    • 위 시스템에서 문제는 LB가 단일 실패지점이라는 것이다 LB가 비정상 종료되면 전체 시스템이 종료된다.
    • 이를 해결하기 위해 LB를 1대 더 추가해서 하나가 고장 나면 다른 하나를 사용하는 방식으로 설계한다.
  • LB 늘리기
    • LB를 1대 더 추가하고, 하나가 고장 나면 다른 하나를 사용하는 방식으로 시스템 안전성을 높이자
      • high availability 고 가용성
        • 여분의 장비를 추가로 사용하면 고 가용성을 높일 수 있다. (하나는 대기, 고장 나면 교체)
      • Active-actvie
        • 두 대의 장비가 모두 활성화 ㅚ어 서비스를 제공하고, 한대의 장비에 문제가 생기면 해당 장비는 사용하지 않음
      • Active-standby
        • 한대는 active, 다른 한대는 standby 모드로 설정하고, active 상태인 장비만 사용 active 장비가 고장 나면 즉시 standby 장비가 active 상태로 전환하여 서비스를 제공한다.
  • stateful 이면 동기화가 필요하다.
    • 예) 같은 역할을 하는 DB가 다수일 때 동기화가 필요하다.
    • HA 클러스터로 묶인 장비들 간에는 주기적으로 heartbeat 체크 및 데이터 동기화 필요하다.

HS 방식을 사용하는 경우 서비스에 장애 없이 성능을 높이거나 줄일 수 있지만, 이 과정에서 서버 재배치, OS/SW 설치 등에 시간+노력이 필요하다. 또 갑자기 많은 사용자가 탈퇴한다면 비용 낭비가 발생한다. 

그렇다면 적은 비용으로 신속하게 시스템 성능을 높였다가 낮출 수 있을까?

클라우드 컴퓨팅 기술을 이용하면 가능하다.!