학습 목표
- 수직 확장과 수평 확장의 차이를 설명할 수 있다.
- 분산 시스템의 장점과 단점을 설명할 수 있다.
- 자동화와 모니터링의 필요성을 설명할 수 있다.
한 대의 서버
- 서버는 어떻게 작동하고, 우리는 어떻게 그 서비스에 접속할 수 있는가?
- 사용자 관점
- 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)
- 인프라의 어떤 부분이 고장났는가? 혹은 고장날 수 있는가?
- 장기적인 트렌드 분석 (Analyzing long-term trends)
- 사례 - 마이크로소프트
- CPU, Memory
- 인스턴스의 갯수
- 연결 유지
- 주요 벤더들의 예시와 같이 주요 메트릭은 (1)한 대의 서버일 경우 리눅스를 통해 측정할 수 있고, (2)클러스터 형태의 노드로 구성되어 있는 경우 모니터링 전문 도구를 통해 수집할 수 있음
출처
'Code States > TIL' 카테고리의 다른 글
[0310] 리눅스 운영체제 - 출력 관련 명령어 (1) | 2023.03.10 |
---|---|
[0309] 리눅스 운영체제 - 패키지와 패키지 매니저 (0) | 2023.03.09 |
[0309] 리눅스 운영체제 - CLI 기본 명령어 (0) | 2023.03.09 |
[0309] 리눅스 운영체제 - 왜 리눅스인가? (0) | 2023.03.09 |
[0307] 개발 프로세스와 DevOps 업무 개요 - 개발 프로세스 (0) | 2023.03.08 |