클라우드 네이티브 아키텍처
클라우드 환경을 최대한 활용하여 애플리케이션을 개발, 배포 및 운영하는 접근 방식. 주요 목표는 확장성, 탄력성, 장애 대응력을 강화하는 것
- 확장 가능한 아키텍처: 자동 확장(auto scaling) 기능을 통해 서버의 수를 수요에 따라 자동으로 조절
- 탄력적 아키텍처: 서비스 생성, 통합, 배포의 속도를 높여 비지니스 요구사항 변화에 신속하게 대응.
- 장애 격리: 서비스 중 하나에 문제가 생겨도 시스템 전체에 영향을 미치지 않도록 설계
클라우드 네이티브 애플리케이션의 특징
CI/CD, Devops, MicroService, Container
- 지속적인 통합 및 배포: 자동화된 테스트와 배포 파이프라인을 통해 코드 변경사항을 신속하게 프로덕션 환경으로 전달
- Continuous Delivery: 패키지화 되어있는 결과물을 수동 반영
- Continuous Deployment: 관리자의 개입 없이 자동화되어있는 배포
- 배포 전략: 카나리 배포(사용자의 일부만 새로운 버전의 서비스 사용), 블루 그린 배포(점진적 새 버전으로의 이동)
- DevOps 문화: 개발과 운영 팀의 긴밀한 협업을 통해 소프트웨어의 품질과 배포 속도를 높인다
서비스의 구조를 더 작게 분할함으로써 더 자주 통합, 배포가 가능
- 컨테이너 가상화: 도커와 같은 컨테이너 기술을 사용하여 애플리케이션과 그 환경을 패키징하고, 클라우드 환경에서 일관된 운영을 보장.
- 마이크로 서비스
마이크로 서비스 아키텍처 (MSA)
전체 애플리케이션을 작은 서비스 단위로 분할하여 각각 독립적으로 개발, 배포 및 운영할 수 있게 하는 방식. 유지보수에 유리. 지속적 배포 및 빠른 시장 출시 가능
- 독립적 배포 기능: 독립적으로 배포 할 수 있으며 서비스 간의 결합도는 낮고 응집도는 높다
- 기술 다양성: 서로 다른 서비스에서 다양한 프로그래밍 언어 및 데이터 스토리지 사용 가능
- 지속적 통합 및 지속적 배포 (CI/CD): 개별 서비스의 변경 사항을 자주, 안정적으로 배포
- 클라이언트와 서로 다른 마이크로 서비스들이 API Gateway를 통해 필요한 서비스의 요청
- 라우터가 받은 요청들의 도착지를 정해줌
- 필요한 마이크로 서비스가 어디에 저장되어 있는지 Service Discovery의 등록 서비스에서 위치 검색
- 로드 밸런서가 어느 서비스로 요청 보낼 지 결정
- 마이크로 서비스의 config 정보는 마이크로 서비스 외부에 저장 (Config. Store)
- Service Mesh: 마이크로 서비스를 적용한 시스템의 내부 통신. 마이크로 서비스의 운영 지원
- 완성된 애플리케이션의 배포를 위해 CI/CD Automation 기술을 사용
- Backing Service: 마이크로 서비스에 저장된 다양한 스토리지들을 모아서 사용, 메세징 처리 시스템(MOM)을 사용하여 데이터 동기화
- Telementary: 마이크로 서비스의 모니터링, 진단
Monolithic VS MSA
Monolithic
- 모든 업무 로직이 하나의 애플리케이션 형태로 패키지 되어 서비스.
- DB 관련 로직, 비지니스 로직 뿐만 아니라 프론트엔드까지 하나의 어플리케이션 내에서 동작
- 문제점: 시스템의 일부만 수정해도 전체 애플리케이션을 다시 빌드, 테스트, 패키징 해야 한다
마이크로 서비스
- 애플리케이션을 구성하는 각각의 구성 요소 및 서비스의 내용을 분리하여 개발하고 운영. 유지보수나 변경 사항 적용에 유리하다
- HTTP 통신을 이용해서 리소스 API에 통신할 수 있는 작은 규모의 여러 서비스들의 묶음이 모여 하나의 어플리케이션을 구성
- 각각의 서비스들은 서로 다른 프로그래밍 언어와 서로 다른 저장 기술 사용 가능
- 서비스들은 Restful API를 통해 서로의 데이터를 제공해서 사용
- 클라우드 네이티브 기술을 활용하여 서비스를 제공
- CI/CD
SOA(Service Oriented Architecture) VS MSA
SOA | MSA |
---|
서비스의 재사용을 통한 비용 절감 | 서비스 간의 결합도를 낮추어 변화에 능동적 대응 |
공통의 서비스를 ESB(Enterprise Service Bus)에 모아 공통 서비스 형식으로 서비스 제공 | 각각의 독립된 서비스가 노출된 REST API를 사용, 이벤트 스트림(메세징 시스템)을 사용하여 서비스 간 필요한 데이터 동기화. 특정 서비스 데이터 변경 시, 데이터 구독 중인 다른 서비스들한테 변경된 데이터 정보 전달 |
CNCF
cloud native computing foundation
- 클라우드 네이티브 기술의 채택을 촉진하는 오픈 소스 소프트웨어 재단
Spring cloud란?
마이크로서비스 아키텍처를 지원하기 위한 프레임워크
- Spring boot와 버전을 맞춰주어야 한다
- config, security, gateway 등의 다양한 서비스를 제공
예시
- Spring Cloud Config Server : 외부에 한번에 설정 정보를 저장
- Naming Server(Eureka) : 서비스의 등록과 위치 정보 확인, 검색
- Ribbon(client side), Spring cloud gateway: 요청 정보 분산, 게이트웨이, 로드밸런싱
- FeignClient: 서비스간 Rest 통신
- Zipkin Distributed Tracing, Netflix API gateway: 시각화와 모니터링, 로그 추적
- Hystrix: 장애 복구
REF