MicroService 와 Cloud

먹어보고·2023년 6월 27일
0

Antifragile
1. Auto scaling - 비수기, 수기 시즌에 맞춰 유동적
2. Microservices
3. Chaos engineering - 급격한 상황 변화에 대한 안정적인 서비스
4. contrinuous deployments - 서비스 작업 -> 배포 (자동화) 이를 pipeline으로 연결 (CI/CD)

Cloud Native Architecture
1. 확장 가능한 아키텍처 (컨테이너, 서버 가상화)

  • 시스템의 수평적 확정에 유연
  • 확장된 서버로 시스템의 부하 분산, 가용성 보장 (리소스 반납)
  • 시스템 또는, 서비스 애플리케이션 단위의 패키지(컨테이너 기반 패키지)
  • 모니터링
  1. 탄력적 아케텍처
  • 서비스 생성-통합-배포(CI/CD), 비지니스 환경 변화 대응 시간 단축
  • 분할된 서비스 구조
  • 무상태 통신 프로토콜
  • 서비스의 추가와 삭제 자동 감지
  • 변경된 서비스 요청에 따라 사용자 요청 처리 (동적 처리)
    서로 분리된 서비스로 종속되지 않도록 설계
    자신의 위치를 등록하고 다른 어플리케이션이 쓸 수 있도록 설정
  1. 장애 격리
  • 특정 서비스에 오류가 발생하더라도 다른 서비스에 영향을 주지 않음

Microservices -> CI/CD -> DevOps(기능 추가 -> 테스트 -> 배포의 무한반복을 의미) -> Container

CI/CD

  • 지속적인 통합 , 지속적 배포 (여러명의 코드를 통합(Git)하고 지속적으로 코드를 배포)
    CD
  • 지속적 전달 (Continuous Delivery)
  • 지속적 배포 (Continuous Deployment)
  • Pipe line

카나리 배포, 블루그린 배포
95% -> 이전 버전
5% -> 신규 버전

DevOps (Development + Operations + QA)
개발조직,운영조직과 퀄리티 보장 통합을 의미
끊임없이 계속 개발, 운영, 테스트

Container 가상화

  • 적은 비용으로 컨테이너를 구축 (가상화)
    운영체제 -> 가상머신 -> 가상머신의 OS + 라이브러리 + 어플리케이션
    운영체제 -> 컨테이너 가상화 -> 라이브러리 + 어플리케이션 (컨테이너 하나당)

12가지 항목
1. Base Code - 형상관리를 위한 코드 관리(Git과 같은 한곳에서 통일적 관리)
2. Dependency isolation - 전체 시스템의 영향을 주지 않고 변경되고 수정되어야 함
3. Configurations - 시스템 설정 외의 구성설정을 통한 MSA의 설정
4. Linkable backing Servcie - 응용프로그램 서비스를 제공 (상호작용)
5. Stages of Creation - 빌드 , 릴리즈의 상황을 분리 (CI/CD와 같이 롤백등 항상 이전/신규 상황유지)
6. Stateless processes - 독립적으로 작용하여 컨테이너당 다른 기능 수행
7. Port Binding
8. Concurrency - 많은 수의 서비스를 복사해서 이루어지므로 부하 분산이 가능하며 동시성 보장
9. Disposabilty
10. Development & production parity - 개발과 운영의 분리
11. Logs - 어플리케이션이 실행되지 않더라도 로그는 정상적으로 출력되어야함
12. Admin Processes for eventual processes - 적절한 관리 도구 필요 (레포트및 데이터 정제, 정리)

3가지 항목
1. API first
2. Telemetry - 모든 지표는 수치화하여야함
3. Authentication and authorization - API 사용시 인증 단계, 인가 허락이 필요

Monolith
한 소프트웨어 안에 모든걸 포함(DB, Front, back 등)
어플리케이션에서 사용하는 데이터가 한곳에 모여 참조되어 서비스되는 형태

일부분 수정 시 전체 프로젝트의 패키징과 배포가 필요함

MicroServices
각각의 기능을 분리하여 개발 (분리된 서비스가 다른 서비스에 영향을 최소화)
장치의 전체 멈춤이 발생할 상황이 없음

함께작동되는 작은 기능들
비지니스 로직이 분리되어야 하며, CI/CD가 무조건적으로 필수다.
굳이 통일된 언어를 사용할 필요가 없이 API 형태로 제공하면 각자 필요한 언어로 설정할 수 있다.

SOA

  • 공통의 서비스를 ESB(Enterprise Service Bus)에 모아 사업 측면에서 공통 서비스 형식으로 서비스 제공 (ESB를 통한 서비스송신)

MSA

  • 각 독립된 서비스가 노출된 REST API를 사용

RESTful Web Service
level 0. http://server/getPosts
http://server/deletePosts

level 1. http://server/accounts
http://server/accounts/10

level 2. level1 + http methods

level 3. level2 + HATEOAS(사용자의 목록이던 그 목록으로 무엇을하던 이런것들의 총합)

고려해야할 사항
1. Consumer first
2. Make best use of HTTP
3. Level2를 살려 개발 필요 (Get, Post, Put, Delete)
4. Response Status 를 사용하여 적절한 대응 필요 (200[정상], 404[클라이언트 오류], 400, 201, 401, 50*[서버오류])
5. Use plurals(복수형 사용)
6. Use nouns for resources (리소스는 명사를 통해 제공)
7. For excpeitons - define a consistent approach(목적지는 동일하도록)

0개의 댓글