Microservice와 Spring Cloud

ERror.ASER·2023년 1월 17일
0

MSA

목록 보기
1/2

아직 미완!

소프트웨어 아키텍처

2010년도 이후부터는 Resilient/Anti-Fragile, Cloud Native의 키워드로 볼 수 있다. 시스템이 로컬에서 클라우드로 이전되었고 확장성과 안정성이 더 강화되었으며 지속적인 변경사항이 생겨도 시스템을 안정적 + 탄력적으로 운영이 가능해지게 되었다. Anti-Fragile환경으로 인해 DevOps라는 IT 문화가 생겨났고 IT 아키텍처로는 Cloud Native 아키텍처로 전환되었다.

Antifragile 4가지 핵심

  • Auto scaling
    • 자동 확장성을 가진다. 시스템을 구성하는 하나의 인스턴스를 오토 스케일링 그룹으로 묶은 다음, 유지되어야하는 최소 인스턴스를 지정할 수 있고, 사용량에 따라 자동으로 인스턴스를 증가할 수 있는 환경을 말한다. 온라인 휴양지 예약 시스템. 성수기에는 서버의 수를 늘리고 비수기에는 줄이는,, 이걸 사용자가 직접 하지 않고,, 수작업이 아닌 조건에 따라 자동으로 처리할 수 있다.
  • Microservices
    • 넷플릭스와 아마존이 클라우드 서비스를 아주 잘 활용하는 기업들이다. 클라우드 네이티브 어플리케이션의 핵심이다. 기존의 시스템의 하나의 거대한 형태로 구축되었다하면, Microservices는 전체 서비스를 구축하고 있는 모듈이나 기능을 독립적으로 개발/배포/운영할 수 있게 세분화된 서비스이다.
  • Chaos engineer
    • 시스템이 예상치 못한 상황/불확실성에도 안정적/신뢰적으로 실행할 수 있게 하는 방법이다.
  • Continuous deployments
    • 배포 파이프라인. 지속적인 통합/배포를 의미한다. 도메인이 수십개, 수백개로 나누어져 있다. 이것들을 모두 따로 개발하고 빌드하고 배포하는것이 작업로드의 큰 부분을 차지하게 된다. 자동화된 서비스를 구축 + 파이프라인으로 연결하여 생산성/효율성이 증가한다.

Cloud Native Arcitecture

특징

  • 확장 가능한 아키텍처
    • 시스템의 수평적 확정에 유연
    • 확정된 서버로 시스템의 부하 분산, 가용성 보장
      • 스케일 업 : 하드웨어의 사양을 높이는 방법
      • 스케일 아웃 : 같은 사양의 서버(인스턴스)를 여러개 배치하여 동시에 여러명의 사용자의 요청 처리 가능
    • 시스템 또는 서비스 애플리케이션 단위의 패키지(컨테이너 기반 패키지)
    • 모니터링
      • 현재 사용중인 리소스를 모니터링 가능하다.
  • 탄력적 아키텍처
    • 서비스 생성 - 통합 - 배포, 비즈니스 환경 변화에 대응 시간 단축
      • (CI/CD)
    • 분할된 서비스 구조
      • 작게 분리된 독립적인 서비스이므로 도메인의 특성에 따라 구분하고 개발해야한다. 원활한 통신을 위해 각각의 서비스는 종속성을 최소화해야한다.
    • 무상태 통신 프로토콜
    • 서비스의 추가와 삭제 자동으로 감지
      • 그래야 다른 서비스에서 해당 서비스를 검색/등록/사용이 가능하다.
    • 변경된 서비스 요청에 따라 사용자 요청 처리 (동적 처리)
  • 장애 격리(Fault isolation)
    • 특정 서비스에 오류가 발생해도 다른 서비스에 영향 주지 않음

Cloud Native Application

CI/CD 특징

  • 지속적인 통합 (CI, Continuous Integration)
    • 통합서버, 소스관리(scm), 빌드도구, 테스트도구
      • ex) Jenkins, Team CI, Travis CI
  • 지속적인 배포 (Cotinuous Delivery, Continuous Deployment, Pipeline)
    • 지속적인 전달과 배포
    • 패키지화 되어있는 결과물을 수동 반영 : continous delivery
    • 관리자의 개입없이 자동화되어있는 배포 : continous deployment
  • 카나리 배포와 블루그린 배포

DevOps

고객의 요구사항은 언제든지 변경될 수 있음.

필요할때마다 바로 수정/반영 될 수 있는 구조가 제일 좋다. 자주

Container 가상화

Cloud Native Application의 가장 큰 특징 중에 하나이다. 기존의 로컬환경에서 운영되고 있는 시스템을 클라우드로 이전해서 적은 비용으로 탄력적으로 운영 가능하게 만들어준 기능이다. 기존의 하드웨어 가상화, 서버 가상화보다 적은 리소스를 이용하여 가상화 서비스를 구축할 수 있다.

Cloud Native Application을 구현할때 고려해야하는 12 Factors

1. Base Code

단일 코드 베이스를 의미하며 형상관리를 위해 한곳에서 배포하는 것이 주 목적이다.

2. Dependecy Isolation

각 마이크로서비스는 시스템에 영향을 주지 않고 내용을 변경/수정이 가능해야한다.

profile
지우의 블로그

0개의 댓글