Code States/TIL

[0308] 개발 프로세스와 DevOps 업무 개요 - 규모에 따른 운영

ki1111m2 2023. 3. 8. 14:51

학습 목표

  • 수직 확장과 수평 확장의 차이를 설명할 수 있다.
  • 분산 시스템의 장점과 단점을 설명할 수 있다.
  • 자동화와 모니터링의 필요성을 설명할 수 있다.

한 대의 서버


  • 서버는 어떻게 작동하고, 우리는 어떻게 그 서비스에 접속할 수 있는가?
  • 사용자 관점
    • URL 입력으로 서비스 접근 가능
    • URL 입력 시 DNS 서버가 주소 변환하여 IP 주소로 서비스 접속
  • 서버 관점
    • 경로 처리 후 자원 제공
  • 자원이 여러 곳에 나뉘어 있어서 한 대가 아닌 여러 대의 컴퓨터로부터 자원을 수집한 후 이를 한 페이지로 정리해서 보여줘야 할 경우
    • 목적에 따라 자원을 분리하면, 단일 서버에서 생기는 복잡한 문제가 보다 단순해짐
  • 동시에 수천명이 한대의 서버에 접속해서 HTML 페이지를 요구할 경우
    • 사용자 규모에 따른 트래픽 증가로, 규모 확장을 통해 해결
  • 서비스를 제공하는 단일 서버가 인프라 문제(하드웨어 고장, 네트워크 유실, 천재지변 등)로 갑작스럽게 서비스를 제공할 수 없는 경우
    • 동일 기능을 제공하는 다른 서버 등 규모 확장을 통해 해결
  • 머신러닝, 빅데이터 처리와 같이 여러 대의 컴퓨팅 자원을 이용하여 만들어진 결과를 한 페이지로 정리해서 보여줘야 할 경우
    • 데이터 처리용 컴퓨터는 규모 확장을 도입하고, 요청/응답을 처리하는 컴퓨터를 별도로 구성 즉 분산 시스템

수직 확장 vs 수평 확장


  • 수직 확장
    • 서버의 성능(CPU, RAM, 스토리지, 네트워크 I/O)을 높이는 방법
    • 트래픽의 양이 적은 경우 사용
    • 성능을 올릴 수록 동시에 많은 작업을 처리할 수 있지만 한계가 존재
    • 단일 서버로 수직 확장만 진행할 시 하드웨어 고장 등 장애 발생 시 대처 어려움
  • 수평 확장
    • 더 많은 서버를 도입하는 방법

분산 시스템


  • 네트워크로 연결된 서로 다른 컴퓨터에 있는 시스템
  • 메시지를 서로 전달/통신하고 작업을 조정함
  • 성능 (Performnce): 높은 처리량(throughput) 뿐 아니라 낮은 대기 시간(latency)과 같은 지표 등을 포함하는 개념
  • 확장성( Scalability): 증가하는 작업량을 처리할 수 있는가, 이로 인한 시스템 확장이 가능한가를 따져보는 기준
  • 가용성 (Availablity): 시스템이 정상적으로 사용 가능한 정도
    • Availability = Uptime / (Uptime + Downtime)
    • Uptime: 작동중인 시간
    • Downtime: 작동중이지 않은 시간
  • 장점
    • 성능: 여러 대의 (비교적 낮은) 성능의 컴퓨터가 한 대의 고성능 컴퓨터의 성능을 내는 것이 가능하며, 비용적 측면에서도 유리함
    • 확장성: 분산 시스템 구축 시 데이터를 여러 대의 컴퓨터에 분할하여 저장하고 처리 작업을 각 컴퓨터에 맡기는 것이 가능함
    • 가용성: 장애 발생 시 효율적으로 다른 컴퓨터로 전환 가능

자동화


  • 프로비저닝 (Provisioning)
    • 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해두고 필요에 따라 즉시 사용할 수 있는 상태로 준비시켜두는 것

  • IT 인프라의 자동화를 돕는 툴로는 어떤 것들이 있는가?
    • IaC: 코딩 작업을 통해 인프라를 생성, 배치, 관리할 수 있는 기술
    • 셰프(CHEF), 퍼펫(puppet), 솔트스택(SALTSTACK), 클라우드포메이션(Cloudformation), 앤서블(Ansible), 테라폼(Terraform) 등
    • 선언형 접근 방식(Declarative)
      • 최종 결과물을 구성
      • 필요한 리소스와 리소스 속성을 포함해 ‘원하는 시스템 상태’ 정의 후, IaC 툴이 사용자가 지정한 인프라 환경을 자동으로 구현
      • 선언형 접근 방식으로 인프라를 할당받은 시스템은 현재 상태 목록을 유지하기 때문에 인프라가 중단되더라도 다시 그 상황으로 쉽게 복구할 수 있음
    • 명령형 접근 방식(Imperative)
      • 순차적인 명령 전달
      • 설정에 필요한 특정 명령을 정확한 순서로 정의해야 함
      • 사양, 순서, 코드 작성까지 모든 부분을 수동으로 해야 하기 때문에 난이도가 높음
  • 프로비저닝의 종류에는 어떤 것들이 있는가?
    • 서버 프로비저닝
      • 필요한 리소스를 기반으로 네트워크에서 사용될 서버를 설정하는 프로세스
      • 새로운 시스템을 생성한 후 가동 상태로 만드는데 필요한 모든 작업과 해당 시스템에 대해 원하는 상태를 정의하는 작업도 포함
    • 네트워크 프로비저닝
      • 사용자, 서버, 컨테이너, IoT 기기가 액세스할 네트워크를 설정하는 작업 포함
    • 사용자 프로비저닝
      • 액세스 권한과 인증 권한을 모니터링하는 아이덴티티 관리 유형에 속함
      • 사용자 오브젝트와 사용자 속성을 통해 정의됨
      • 제공되는 서비스에는 이메일, 데이터베이스 액세스, 네트워크 액세스가 포함될 수 있음

모니터링과 로그


  • 메트릭
    • 시간에 따라 측정한 결과값, 비즈니스 개념을 나타내는 수치 측정
    • 시간당 CPU 사용률, 연간 순매출과 같이 시간이라는 차원이 함께 적용되며, 시간이 아닌 다른 차원을 기준으로 삼을 수도 있음
  • 모니터링의 목표
    • 시간을 기준으로 측정되는 주요 메트릭을 최소화하여 고가용성을 달성
    • 사용량을 추적하여, 배포에 앞서 세운 가설을 검증하고 개선
  • 사례 - 구글
    • 장기적인 트렌드 분석 (Analyzing long-term trends)
      • 데이터베이스가 얼마만큼의 용량을 차지하며, 얼마나 빨리 용량이 증가하는가?
      • DAU(일간 활성 사용자수)는 얼마나 빨리 증가하는가?
    • 시간의 경과 및 실험 그룹 간의 비교 (Conparing over time or experiment groups)
      • 어떤 데이터베이스를 썼을 때 쿼리가 빠른가?
      • 지난 주보다 사이트가 얼마나 느려졌는가?
    • 경고 (Alerting)
      • 인프라의 어떤 부분이 고장났는가? 혹은 고장날 수 있는가?
  • 사례 - 마이크로소프트
    • CPU, Memory
    • 인스턴스의 갯수
    • 연결 유지
  • 주요 벤더들의 예시와 같이 주요 메트릭은 (1)한 대의 서버일 경우 리눅스를 통해 측정할 수 있고, (2)클러스터 형태의 노드로 구성되어 있는 경우 모니터링 전문 도구를 통해 수집할 수 있음

출처