Cloud Native Architecture에 의해 설계된 프로그램을 의미하며 구현 형태가 존재한다.
1. Microservice로 구현
- 서비스들이 작은 단위로 구성되어진다.
2. 자동화된 CI/CD
- CI(Continuous Integration 지속적인 통합)
- 통합 서버, 소스 관리, 빌드, 테스트
- Jenkins, Team CI, Travis CI
- CD(Continuous Delivery, Continuous Deployment 지속적인 전달, 배포)
- 자동화된 빌드,테스트,배포
3. DevOps
- 시스템의 서버가 켜져있는 동안 2번의 과정을 무한 반복해준다.
4. Container
- Cloud환경에 배포하며 컨테이너 가상화 기술(Dokcer)을 사용한다.
cloud native application을 구축함에 있어 고려해야할 12가지 항목
Heroku사에서 자신들의 Cloud 서비스 제공 경험을 바탕으로 cloud native application을 설계할 때 고려해야할 사항을 제시했다.
1. Code Base
- application은 1개의 코드 베이스(=git)를 통해 운영되고 개발되어야 한다.
2. Dependency
- 각 서비스들은 전체 시스템에 영향을 주지 않는 상태로 변경되어질 수 있어야한다.
3. Configuration
- 코드 외부에서 설정 정보를 제어한다.
- 각 서비스들은 설정정보를 공유할 수 있어야한다.
4. Linkable Backing Service
- 백엔드 서비스는 자유롭게 사용하거나 분리할 수 있고 코드의 수정없이 변경될 수 있어야 한다.
- 백엔드 서비스 : DB, Cache, SMTP 등
5. Stages of Creation(Build, Release, Run)
- 각각의 서비스는 빌드, 배포, 실행을 모두 분리해야한다.
6. Stateless Processes
- 각각의 서비스는 서로의 프로세스에 상태를 공유하지 않아야한다.
7. Port Binding
- 각각의 서비스는 바인딩된 포트로 다른 application에서도 접근할 수 있도록 서비스를 제공한다.
8. Concurrency
- 서비스는 수평으로 확장할 수 있어야하고 기능별로 분리된 서비스들은 동시에 실행될 수 있어야한다.
9. Disposability (일회성)
- 서비스는 쉽게 삭제되며 또한 쉽게 추가될 수 있어야한다.
- 서비스 상황에 따라 쉽게 Scale up/down이 가능해야한다.
10. Development & Production Parity
- 개발환경과 실제 서비스 환경의 차이를 작게 유지하여 지속적인 배포가 가능하도록 디자인되어야 한다.
11. Logs
- 로그는 로컬에 저장하지 않는다.
- 대신 별도의 로그 저장소를 사용하거나 모니터링 프로그램을 사용하여 관리한다.
12. Admin Processes For Eventual Processes
- 현재 운영되고 있는 서비스들을 관리하기 위한 관리 도구가 있어야한다.
Pivotal사에서 Cloud 서비스를 운영하면서 제시한 총 15가지 항목이며 기존 12 Factors에 3가지를 추가했다.
특징
그렇다면 모든 서비스를 Microservice로 변경하는 것이 좋을것인가에 대한 고려사항
공통점
MSA와 SOA(Service Oriented Architecture=서비스 지향 아키텍쳐)는 서비스를 지향한다는 점에서는 같다.
차이점
MSA는 Gartner에서 발표한 넷플릭스, 트위터, 나이키 등의 회사에서 선택한 아키텍쳐의 형태를 시각화한 그림이다.
각 회사별 아키텍쳐가 다르게 존재할 수도 있고 해당 아키텍쳐를 참고하여 프로젝트 상황에 맞게 변경할 수도 있지만 우선 우리는 해당 그림의 형태로 구성요소에 대해 이해해보려한다.
Service Mesh란
Service Mesh라는 것은 MSA를 적용한 시스템의 내부 통신을 말하고 각 서비스들에 대해 프록시 역할, 인증, 권한 부여, 암호화, 서비스 검색, 요청 라우팅, 로드 밸런싱 등 여러 기능을 제공해준다.
CNCF(Cloud Native Computing Foundation)
MSA를 구성하기 위해서는 다양한 제품들이 존재한다.
에 접속하여 클라우드 제품들을 카테고리별로 확인할 수 있고 개발자가 선택하여 application에 적용하여 사용할 수 있다.
Spring Cloud는 환경설정, 서비스 검색, 회복성 처리, 라우팅, 프록시 등의 서비스들을 모아놓은 하나의 프레임워크