ㅇ 확장 가능한 아키텍처
- 시스템의 수평적 확장으로 인해 더 많은 사용자 요청 바등ㄹ 수 있음
- 확장된 서버로 시스템 부하 분산, 가용성 보장
- 스케일 업 (하드웨어 사양 높이는 것)
- 스케일 아웃 (인스턴스 늘림)
- 모니터링 확인
ㅇ 탄련적 아키텍처
- 분리된 서비스로 개발
- CI / CD 활용
- 개발, 테스트 , 운영환경
- 종속성을 최소화 시켜야한다. (분리)
- 상태를 갖지 않아야한다(무상태 프로토콜)
- 서비스가 어디에 있는지 등록해야함 (디스커버리 서비스에 등록되고 삭제되는 작업을 거침)
ㅇ 장애 격리
- 장애 복구에 띄어나다
- 특정서비스에 오류가 나더라도 다른 서비스에 영향을 주지 않음
ㅇ Microserivces 형태로 개발된다.
ㅇ CI / CD
ㅇ DevOps (장애가 났을 경우 바로바로 수정해서 재배포 가능)
ㅇ Containers (컨테이너 가상화)
ㅇ 지속적인 통합 CI
- 통합서버, 소스관리(SCM),빌드 도구, 테스트 도구
- EX) Jenkins,Team CI, Travis CI
ㅇ 지속적인 배포 CD
- Continuous Deployment
- Pipe line
ㅇ 카나리 배포와 블루그린배포
- 카나리 배포 : 95% 사용자 - 이전 버전 사용
5% 사용자 - 새 버전 사용
- 블루그린 배포 : 100% 사용자 - 이전 버전, 새 버전 사용
ㅇ dev + op (개발 + 운영)
- 서비스와 고객의 요구사항에 맞게 지속적으로 테스트하고 고객의 요구사항을 빠르게 도입시킬 수 있게 자주 통합 & 배포 & 테스트하는 구조
ㅇ 클라우드 네이티브 아키텍처의 핵심
ㅇ 적은 비용으로 탄력성 있는 환경
ㅇ 적은 리소스를 활용하여 서버 구축 가능
ㅇ 하드웨어 가상화 기반
- OS 위에 Hypervisor를 활용하여 가상화
- 하나의 가상머신은 독립적은 OS를 가지고 있음
- Host 운영체제에 많은 부하를 주고
- 시스템 확장에 많은 제약
ㅇ 컨테이너 가상화 기반
- OS 위에 컨테이너 가상화(Container Runtime)을 활용하여 가상화
- 공통적인 라이브러리나 리소스 공유
- 각자 필요한 영역을 고유
- 기존의 하드웨어 가상화보다 더 적은 리소스
- 가볍고 빠르다