"내 프로그램을 실행해줄 하드웨어를 주세요 " ==> 조직의 발전과 성장에 발맞추어 확장되어 나가는 시스템
- CaaS의 핵심 개념
- 관리형 컴퓨트 솔루션이 엔지니어의 소프트웨어 제작에 어떠한 영향을 주는가
- 자신의 조직에서 사용할 컴퓨트 서비스를 선택하는 방법
컨테이너 기반 추상화를 사용해 애플리케이션을 관리하고 배포할 수 있도록 지원하는 클라우드 서비스
- 자동화
- 간단한 자동화
- 배포, 시작 : 하나의 머신에 바이너리를 배포하고 시작시키는 과정을 셸 스크립트로 자동화
- 모니터링 : 제품의 생존 여부, 처리한 문서수와 같은 작업을 모니터링 하는것을 자동화 -> 이상 감지할경우 프로세스 재시작을 통해 문제 해결
- 머신의 사용량을 제한하거나, 새 머신으로의 작업 이전은 어려움 -> 단순히 하나의 머신에서의 자동화 작업이기 때문
- 스케줄링 자동화
- (서비스의 탄생) 머신 할당의 자동화 : 사용 가능한 머신의 전체 종류를 알고 요청이 있을경우 사용 가능한 머신을 선택하여 제품 바이너리를 자동으로 배포
- 머신 모니터링 자동화 : 머신이 장애를 일으켰을때 담당자에게 수리가 필요함을 알리고 간단한 조치를 취함
- 간단한 자동화
- 컨테이너화
-
머신의 종류 <<< 작업의 종류
-
하나의 머신에서 여러가지의 작업을 실행해야 하며 이때 머신은 가장 까다로운 작업을 기준으로 준비해야 함.
-
미리 준비하기에는 많은 자원의 낭비가 예상됨.
-
가장 간단한 해답
- 프로그램(작업)별로 필요한 자원 요구사항(CPU, RAM)을 준비한 다음 스케줄러가 여유 있는 머신을 선택하여 프로그램을 넣는 방식
- 해당 작업이 필요한 자원 요구사항보다 더 많은 자원을 사용한다면?
- 함께 구동중인 작업이 같은 라이브러리의 서로 다른 버전의 의존성을 가지고 있다면?
- 전역 자원을 동시에 사용한다면?
- 민감한 데이터를 다루는 프로그램을 다른 프로그램이 접근 한다면?
- 프로그램(작업)별로 필요한 자원 요구사항(CPU, RAM)을 준비한 다음 스케줄러가 여유 있는 머신을 선택하여 프로그램을 넣는 방식
-
해결책
- 컨테이너를 사용하는 시스템(Google - Borg, Docker, LMCTFY)
- 적정 규모화(매개변수 자동화)를 통한 자원 요구사항 자동화
- 독립적인 환경으로 하나의 라이브러리 단독 사용
- 자원 단독 사용
- 컨테이너를 사용하는 시스템(Google - Borg, Docker, LMCTFY)
-
-
장애를 감안한 아키텍처 설계
서버를 반려동물이 아닌 가축처럼 취급하라
- 하나의 머신에서 장애가 발생하면 다른 머신으로 변경하여 실행
- 하나의 작업을 여러개의 머신에서 실행해야 할때 장애 상황을 고려하여 머신에 할당하는 작업의 양을 동적으로 설정
- 하나의 머신에서 장애가 발생하면 다른 머신으로 변경하여 실행
-
배치 VS 서빙
- 배치 작업 : 데이터 처리 같은 정해진 태스크를 완료해야 하는 끝이 있는 프로그램(로그 분석, 머신러닝 모델 학습)
- 처리량에 중점을 두어 작업
- 수명이 짧음
- 서빙 작업 : 끝없이 계속 실행되면서 들어오는 요청을 바로 처리해줌(웹 검색 서비스)
- 지연시간에 중점을 두어 작업
- 긴 수명
- 장애에 강함(작은 프로세스, 동적 할당)
- 배치 작업 : 데이터 처리 같은 정해진 태스크를 완료해야 하는 끝이 있는 프로그램(로그 분석, 머신러닝 모델 학습)
-
상태 관리
- 서버를 교체할때마다 처리 중인 모든 상태를 손실함
- 외부 스토리지 시스템을 이용하여 처리 범위를 넘어 존재해야하는 모든 데이터는 외부 영구 스토리지에 저장 해야함.
- 견고한 영구 스토리지 구현 방법 : 가축
- RAID 시스템과 같이 여러 디스크에 데이터를 복제하여 안전하게 보관
-
서비스에 연결하기
- 하드코딩된 애플리케이션의 복제본을 이용할경우 더 이상 가축 취급을 할 수 없음.
- 간접 참조 계층을 추가하여 다른 시스템에서 가축 취급이 가능하도록 함.
- 하드코딩된 애플리케이션의 복제본을 이용할경우 더 이상 가축 취급을 할 수 없음.
Kubernetes, Docker, Mesos, OpenWhisk, Knative, ...
- 중앙 관리 VS 사용자화
- 특별한 사용자를 위해 API를 확장할 수 있는가?
- 이 사용자에게는 불편함을 줄 수 있지만 시스템의 일관성을 지킬것인가?
- 공용 VS 사설 (임대 vs 직접 구매)
- 공용
- 인프라 확장이 쉬움
- 인프라 관리에 많은 공부를 할 필요가 사라짐
- 해당 클라우드 업체에 종속됨
- 사설
- 인프라 확장에 많은 비용 소모
- 인프라 전문 인력 필요
- 하이브리드(같이 사용)
- 트래픽이 갑자기 치솟을때 공용 클라우드의 힘을 빌림
- 공용
