Software Architecture
1960 ~ 1980s : Fragile, Cowboys
1990 ~ 2000s : Robust, Distributed
2010s ~ : Resilient / Anti-Fragile, Cloud Native
Antifragile
- Auto scaling: 자동 확장성. 사용량에 따라 자동으로 인스턴스를 증가, 감소
- Microservice: 기존의 서비스(거대한 형태로 구축되어 서비스됨)와 다르게 전체 서비스를 구축하고 있는 개별적인 모듈이나 기능을 독립적으로 개발하고 배포, 운영할 수 있도록 세분화된 서비스
- Chaos engineering: 시스템이 급격하고 예측하지 못한 상황이라도 견딜 수 있고 신뢰성을 쌓기 위해 운영중인 소프트웨어 시스템에 실험하는 방법 또는 규칙
- Continuous deployments: CI-CD와 같은 배포 파이프라인
Cloud Native Architecture
- 확장 가능한 아키텍처
- 시스템의 수평적 확정에 유연(Scale out)
- 확자오딘 서버로 시스템의 부하 분산, 가용성 보장
- 시스템 또는, 서비스 애플리케이션 단위의 패키지(컨테이너 기반 패키지)
- 모니터링
- 탄력적 아키텍처
- 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응, 시간 단축(CI-CD)
- 분활 된 서비스 구조
- 무상태 통신 프로토콜
- 서비스의 추가와 삭제 자동으로 감지
- 변경된 서비스 요청에 따라 사용자 요청 처리(동적 처리)
- 장애 격리(Fault isolation)
- 특정 서비스에 오류가 발생해도 다른 서비스에 영향 주지 않음(독립적)
cloud Native Application
클라우드 네이티브 아키텍처에 의해 설계되고 구현되는 어플리케이션
-
마이크로 서비스로 개발됨
-
CI-CD 시스템에 의해서 자동으로 통합되고 빌드, 테스트, 배포라는 과정 거침
-
마이크로 서비스에 문제가 발생하였을 경우에 바로바로 수정해서 다시 배포 하는 과정 반복(DevOps)
-
하나의 어플리케이션을 구성하는 마이크로 서비스들을 클라우드 환경에 배포하고 사용하기 위해 컨테이너 가상화 기술 사용
CI/CD