Skip to content

Latest commit

 

History

History
80 lines (68 loc) · 4.91 KB

File metadata and controls

80 lines (68 loc) · 4.91 KB

Compute as a service

"내 프로그램을 실행해줄 하드웨어를 주세요 " ==> 조직의 발전과 성장에 발맞추어 확장되어 나가는 시스템

  1. CaaS의 핵심 개념
  2. 관리형 컴퓨트 솔루션이 엔지니어의 소프트웨어 제작에 어떠한 영향을 주는가
  3. 자신의 조직에서 사용할 컴퓨트 서비스를 선택하는 방법

CaaS(Compute as a Service)

컨테이너 기반 추상화를 사용해 애플리케이션을 관리하고 배포할 수 있도록 지원하는 클라우드 서비스

  1. 자동화
    • 간단한 자동화
      • 배포, 시작 : 하나의 머신에 바이너리를 배포하고 시작시키는 과정을 셸 스크립트로 자동화
      • 모니터링 : 제품의 생존 여부, 처리한 문서수와 같은 작업을 모니터링 하는것을 자동화 -> 이상 감지할경우 프로세스 재시작을 통해 문제 해결
      • 머신의 사용량을 제한하거나, 새 머신으로의 작업 이전은 어려움 -> 단순히 하나의 머신에서의 자동화 작업이기 때문
    • 스케줄링 자동화
      • (서비스의 탄생) 머신 할당의 자동화 : 사용 가능한 머신의 전체 종류를 알고 요청이 있을경우 사용 가능한 머신을 선택하여 제품 바이너리를 자동으로 배포
      • 머신 모니터링 자동화 : 머신이 장애를 일으켰을때 담당자에게 수리가 필요함을 알리고 간단한 조치를 취함
  2. 컨테이너화
    • 머신의 종류 <<< 작업의 종류

    • 하나의 머신에서 여러가지의 작업을 실행해야 하며 이때 머신은 가장 까다로운 작업을 기준으로 준비해야 함.

    • 미리 준비하기에는 많은 자원의 낭비가 예상됨.

    • 가장 간단한 해답

      • 프로그램(작업)별로 필요한 자원 요구사항(CPU, RAM)을 준비한 다음 스케줄러가 여유 있는 머신을 선택하여 프로그램을 넣는 방식
        • 해당 작업이 필요한 자원 요구사항보다 더 많은 자원을 사용한다면?
        • 함께 구동중인 작업이 같은 라이브러리의 서로 다른 버전의 의존성을 가지고 있다면?
        • 전역 자원을 동시에 사용한다면?
        • 민감한 데이터를 다루는 프로그램을 다른 프로그램이 접근 한다면?
    • 해결책

      • 컨테이너를 사용하는 시스템(Google - Borg, Docker, LMCTFY)
        • 적정 규모화(매개변수 자동화)를 통한 자원 요구사항 자동화
        • 독립적인 환경으로 하나의 라이브러리 단독 사용
        • 자원 단독 사용

관리형 컴퓨트에 적합한 소프트웨어 작성 방법

  1. 장애를 감안한 아키텍처 설계

    서버를 반려동물이 아닌 가축처럼 취급하라

    • 하나의 머신에서 장애가 발생하면 다른 머신으로 변경하여 실행
      • 하나의 작업을 여러개의 머신에서 실행해야 할때 장애 상황을 고려하여 머신에 할당하는 작업의 양을 동적으로 설정
  2. 배치 VS 서빙

    • 배치 작업 : 데이터 처리 같은 정해진 태스크를 완료해야 하는 끝이 있는 프로그램(로그 분석, 머신러닝 모델 학습)
      • 처리량에 중점을 두어 작업
      • 수명이 짧음
    • 서빙 작업 : 끝없이 계속 실행되면서 들어오는 요청을 바로 처리해줌(웹 검색 서비스)
      • 지연시간에 중점을 두어 작업
      • 긴 수명
      • 장애에 강함(작은 프로세스, 동적 할당)
  3. 상태 관리

    • 서버를 교체할때마다 처리 중인 모든 상태를 손실함
    • 외부 스토리지 시스템을 이용하여 처리 범위를 넘어 존재해야하는 모든 데이터는 외부 영구 스토리지에 저장 해야함.
    • 견고한 영구 스토리지 구현 방법 : 가축
      • RAID 시스템과 같이 여러 디스크에 데이터를 복제하여 안전하게 보관
  4. 서비스에 연결하기

    • 하드코딩된 애플리케이션의 복제본을 이용할경우 더 이상 가축 취급을 할 수 없음.
      • 간접 참조 계층을 추가하여 다른 시스템에서 가축 취급이 가능하도록 함.

컴퓨트 서비스 선택하기

Kubernetes, Docker, Mesos, OpenWhisk, Knative, ...

  1. 중앙 관리 VS 사용자화
    • 특별한 사용자를 위해 API를 확장할 수 있는가?
    • 이 사용자에게는 불편함을 줄 수 있지만 시스템의 일관성을 지킬것인가?
  2. 공용 VS 사설 (임대 vs 직접 구매)
    • 공용
      • 인프라 확장이 쉬움
      • 인프라 관리에 많은 공부를 할 필요가 사라짐
      • 해당 클라우드 업체에 종속됨
    • 사설
      • 인프라 확장에 많은 비용 소모
      • 인프라 전문 인력 필요
    • 하이브리드(같이 사용)
      • 트래픽이 갑자기 치솟을때 공용 클라우드의 힘을 빌림