싱글 서버 도커의 한계 -> 쿠버네티스

왱구·2024년 4월 12일

스터디

목록 보기
12/21

쿠버네티스란?

  • 물리적으로 서버 한대에 도커가 설치가 됨. 사용자가 늘어나서 서버를 늘려야한다면?
  • 사용자 수가 늘어날 때 서버를 늘리는 것은 일반적으로 필요한 조치.

1. 성능 유지

  • 서버는 동시에 처리할 수 있는 요청의 수에 한계가 있음
  • 사용자 수가 증가하면, 동시 요청의 수가 늘어나고 이는 서버의 처리 능력을 초과할 수 있음
  • 서버를 늘려서 이러한 요청을 효과적으로 분산시키면, 시스템의 응답 시간을 개선하고 사용자 경험을 유지할 수 있음

2. 가용성 향상

  • 단일 서버에 문제가 발생하면 전체 서비스에 영향을 미칠 수 있음
  • 서버를 여러 대 운영하면 하나의 서버에 문제가 생겨도 다른 서버가 처리를 계속 수행할 수 있어 서비스의 중단 시간을 줄일 수 있음. 이는 고가용성을 보장하는 데 중요

1) 가용성의 중요 요소

  • 연속성과 신뢰성
    • 시스템이 예상치 못한 중단 없이 지속적으로 작동하고, 예정된 유지 관리 외에 다운타임이 최소화되어야 함
  • 복구력
    • 시스템이 장애 발생 후 얼마나 빠르게 정상 상태로 복구될 수 있는지도 가용성에 중요. 장애 복구 계획과 백업 시스템이 이를 지원
  • 확장성
    • 사용자 수나 데이터량의 증가 등, 시스템에 대한 요구가 변화할 때 시스템이 이를 수용하고 성능을 유지할 수 있는 능력.

2) 가용성을 높이는 방법

  • 하드웨어 중복
    • 중요한 서버 및 네트워크 구성요소를 복제하여 하나가 실패해도 다른 하나가 기능을 지속할 수 있게 함
  • 로드 밸런싱
    • 여러 서버에 걸쳐 트래픽을 분산시키는 방법으로, 하나의 서버에 문제가 발생하더라도 전체 시스템이 계속 작동하도록 함
  • 장애 조치(failover) 시스템
    • 주 서버가 실패할 경우 자동으로 백업 시스템으로 전환하여 운영을 지속할 수 있게 하는 시스템
  • 정기적인 백업 및 복구 테스트
    • 데이터를 정기적으로 백업하고, 장애 발생 시 복구 프로세스가 효과적으로 작동하는지 주기적으로 테스트함
  • 분산 아키텍처
    • 지리적으로 분산된 데이터 센터를 사용하여 자연 재해나 지역적 장애의 영향을 최소화함

3) 가용성의 측정

  • 가용성은 주로 퍼센테이지(%)로 표현되며, "업타임"이라고도 불림
    • 예를 들어, "99.9% 가용성"이라고 하면, 시스템이 한 해 동안 0.1%의 시간만큼만 작동하지 않는다는 것을 의미
    • 이는 연간 대략 8.76시간의 다운타임에 해당함
    • 가용성이 높을수록 시스템이 더욱 신뢰성 있고 지속적으로 서비스를 제공할 수 있다는 것을 의미
  • https://docs.aws.amazon.com/ko_kr/wellarchitected/latest/reliability-pillar/availability.html
  • 가용성은 비즈니스 연속성과 직결되며, 고객 만족도 및 기업의 신뢰성을 결정하는 중요한 요소
  • 따라서 높은 가용성을 유지하는 것은 모든 IT 운영의 핵심 목표 중 하나

내 애플리케이션의 가용성을 테스트로 측정할 수 있을까?

  • 이 중 '부하테스트'는 꼭 해보세요!
  • 애플리케이션의 가용성을 테스트하고 측정하기 위한 몇 가지 방법 이러한 테스트는 애플리케이션의 신뢰성과 장애 대응 능력을 평가하는 데 중요.

1) 모니터링 도구 사용

  • 실시간 모니터링: 애플리케이션과 인프라의 실시간 모니터링을 통해 성능 지표를 지속적으로 추적할 수 있음. 예를 들어, Datadog, New Relic, Prometheus 같은 도구들은 시스템의 중요한 메트릭을 수집하고, 문제가 발생할 때 알림을 제공함.
  • Uptime 모니터링 서비스: Uptime Robot, Pingdom 등의 서비스를 사용하여 애플리케이션의 가용성을 주기적으로 체크하고, 다운타임이 발생했을 때 즉시 알림을 받을 수 있음.

2) 부하 테스트

  • 부하 테스트 도구 사용: Apache JMeter, Gatling, LoadRunner와 같은 도구를 사용하여 애플리케이션에 고객 예상 트래픽 이상의 트래픽을 생성하고, 애플리케이션의 성능을 측정함. 이를 통해 트래픽 증가 시 애플리케이션의 반응을 확인하고 최적화할 수 있음.

3) 장애 조치(Failover) 테스트

  • 재난 복구 시나리오 실행: 정기적으로 장애 조치 테스트를 실행하여, 주요 시스템 구성요소가 실패했을 때의 대응을 평가함. 예를 들어, 데이터베이스 서버가 다운되는 경우, 자동 장애 조치가 얼마나 잘 작동하는지를 확인할 수 있음.

4) 카오스 엔지니어링

  • 카오스 몽키 도구 활용: Netflix의 Chaos Monkey와 같은 도구를 사용하여 의도적으로 인프라 내에 장애를 일으켜 보고 시스템이 이를 어떻게 처리하는지 관찰함. 이는 시스템의 복원력을 강화하고 잠재적인 취약점을 발견하는 데 유용함.

5) 벤치마킹

  • 성능 벤치마킹: 다른 유사 애플리케이션 또는 이전 버전의 애플리케이션과의 성능을 비교 분석함. 이를 통해 현재 애플리케이션의 성능 지표가 업계 표준이나 기대치를 충족하는지 평가할 수 있음.
  • 이러한 방법을 통해 애플리케이션의 가용성을 정기적으로 검토하고 평가함으로써, 시스템의 안정성을 유지하고 사용자 만족도를 높일 수 있음. 이는 또한 미래의 확장성 및 유지 관리 계획에 중요한 데이터를 제공함.

3. 부하 분산

  • 서버를 추가하면 네트워크 트래픽과 데이터 처리 부하를 여러 서버에 분산시켜 각 서버의 부하를 줄일 수 있습니다. 이로 인해 각 서버가 더 안정적으로 운영될 수 있고, 전체 시스템의 효율성이 증가합니다.
  • 부하
    • 서버에서 "부하"는 일반적으로 서버나 네트워크 시스템이 처리해야 하는 데이터 양, 요청 수, 또는 동시 사용자 수 등으로 인해 발생하는 작업량이나 스트레스를 의미함. 서버 부하가 증가하면, 서버의 성능에 직접적인 영향을 미칠 수 있음.
    • 부하의 주요 유형
      • CPU 부하: 서버의 중앙 처리 장치(CPU)가 처리해야 하는 작업의 양임. 많은 계산이 필요한 작업이나 애플리케이션은 CPU 부하를 증가시킬 수 있음.
      • 메모리 부하: 서버에서 사용 가능한 물리적 또는 가상 메모리가 충분하지 않을 때 발생함. 메모리가 포화 상태에 이르면 시스템의 성능이 저하될 수 있음.
      • 디스크 I/O 부하: 디스크 읽기/쓰기 작업의 양이 많을 때 발생함. 데이터베이스 서버나 파일 서버는 디스크 I/O 부하가 높을 수 있음.
      • 네트워크 부하: 네트워크를 통해 전송되는 데이터의 양이 많을 때 네트워크 부하가 발생할 수 있음. 이는 네트워크 속도를 저하시키고, 데이터 전송 시간을 증가시킬 수 있음.
    • 부하가 서버에 미치는 영향
      • 응답 시간 증가: 서버에 부하가 많을 경우, 처리 시간이 길어지고 사용자의 요청에 대한 응답이 늦어질 수 있음.
      • 시스템 다운: 부하가 지나치게 높아져서 서버가 더 이상 요청을 처리할 수 없는 경우, 시스템이 다운될 수 있음.
      • 리소스 경합: 여러 프로세스나 애플리케이션이 동시에 리소스를 요구할 때 발생함. 이로 인해 성능 저하가 나타날 수 있음.
    • 부하 관리 방법
      • 부하 분산 (Load Balancing): 부하 분산기를 사용하여 여러 서버에 요청을 균등하게 분배함으로써 각 서버의 부하를 줄일 수 있음.
      • 스케일링: 사용자의 요구와 트래픽에 따라 서버의 리소스를 증가시키거나 감소시키는 스케일 아웃(수평 확장) 또는 스케일 업(수직 확장)을 실행함.
      • 캐싱: 자주 요청되는 데이터를 캐시에 저장하여, 동일한 요청에 대해 서버가 반복적으로 같은 계산을 수행하는 것을 방지할 수 있음.
    • 부하 관리는 서버의 안정적인 운영과 최적의 성능을 유지하기 위해 필수적인 작업임. 서버 부하를 효과적으로 관리하면 시스템의 가용성을 향상시키고 사용자 만족도를 높일 수 있음.

4. 재난 복구

  • 여러 지역에 서버를 분산시켜 두면 자연재해나 기타 예상치 못한 상황에서도 서비스의 연속성을 보장할 수 있음.
  • 한 지역의 서버가 다운되더라도 다른 지역의 서버가 서비스를 지속할 수 있음.

5. 데이터 처리 능력 증가

  • 사용자가 늘어남에 따라 데이터 처리 요구도 증가.
  • 데이터베이스 서버, 애플리케이션 서버 등을 추가함으로써 처리 능력을 높일 수 있음.

6. 확장성

  • 사용자 수가 예상보다 빠르게 증가하는 경우, 시스템을 쉽게 확장할 수 있어야 함.
  • 서버를 추가하는 것은 이러한 확장성을 제공함.
  • 특히 클라우드 환경에서는 수요에 따라 자원을 신속하게 확장하고 축소하는 것이 가능.

이러한 이유로

  • 사용자가 늘어남에 따라 서버를 적절하게 늘려 시스템의 안정성, 성능, 가용성을 유지하는 것이 중요.
  • 서버를 확장하는 것은 비용 증가로 이어질 수 있지만, 이는 사용자 만족도와 직결되므로 투자할 가치가 있음.
profile
늦깎이 애아빠 개발지망생

0개의 댓글