MSA이론2. Microservice Architecturure

Microservices Architecture

  • 비즈니스 로직을 나누었다.
  • 큰 프로그램 대신 몇몇의 작은 어플리케이션이다.
  • 잘 정의된 API로 소통한다.(HTTP, AMQP 활용)
  • 하나의 서비스가 정지될경우 다른것에 영향을 미치지 않는다

What is Microservice Architecture?

  • 각각의 컴포넌트를 시스템에 집어넣는것이며 각각 빌드되고 배포될수 있다.
  • Microservice 는 vertical 하며 layered하다. 또한 Process driven 형태이다.
  • Microservice를 잘 정의하면 TDD가 가능하다.
  • 엔터프라이즈 아키텍처가 아니다. Microservice Architecture는 SOA와 유사하다.
  • 단일 비즈니스 기능을 구현한다.
  • 자신만의 데이터베이스를 갖는것이 일반적이나 데이터베이스를 갖지않는경우도 있다.
  • HTTP, AMQP 로 통신한다.
  • 독립적으로 배포가 가능하다.
  • 각각의 레파지토리를 갖는다.
  • 마이크로 서비스 팀은 몇명이 적당할까? 피자 두판을 먹을 수 있을만한 인원수! 6명 ? 좋다!

Microservice의 구성

  • Data Store
  • Application/Logic
  • Public API(POST, GET )

Microservices application의 전형적인 생태계

원칙1. Microservices들은 각 public API에 서로 의존한다.

  • 백엔드의 마이크로 서비스는 노출되면 안된다. 오직 프론트 마이크로 서비스만 노출되어야 한다.

원칙2. 작업에 적합한 tool(ex. 프레임워크)을 사용하라.

원칙3. 서비스 보안에 신경써라

원칙4. 생태계에서 좋은 시민이 되어라!

  • 모니터링, 로깅, 추적을 분산하라

원칙5. 기술 변화 이상의 것이다.

  • 조직 변화를 수용하라

원칙6. 모든것을 자동화하라(DevOps!)

Micro Service를 위해서…

  • 비즈니스 도메인을 이해하자
  • 일관성 유지하자
  • 서비스 발견해보자
  • 불필요한 상호통신이 많다면 조정해보자

Microservice 계획하기

  • 정말 옳은 선택인가?(트레이드 오프 고려)
  • 시스템의 주요기능을 식별하자
  • 서비스 컴포넌트의 스코프를 세부적으로 결정하라(Function의 크기, 타입, 복잡성)
  • API들을 디자인하라
  • 커뮤니케이션의 메커니즘을 결정하라
  • 데이터 모델을 결정하라(중앙 데이터베이스 vs 여러 데이터 저장소)

Benefits of microservices

  • 각각의 microservices를 쉽개 확장할 수 있다
  • 빠른 빌드, 테스트, 릴리즈의 싸이클
  • agility의 증가
  • 빠른혁신이 가능하다.
  • 명확한 소유권 그리고 책임의 분배.

Microservice Architecture

  • 각 microservice는 컨테이너에 할당된다. 컨테이너는 microservice 기반 어플리케이션을 개별적으로 개발, 배포하기 좋은 방법이다.
  • microservice 간 stateless server 형태로 소통한다.
  • 클라이언트는 서비스를 바로 호출할수 없고 API 게이트웨이가 클라이언트의 요청을 적절한 microservice로 전달한다.
    (API 게이트웨이는microservice로인가요? 하드웨어나 소프트웨어로 볼 수 있다. microservice로 일수도 있지만 아닐수도 있다.)
  • 각 서비스는 상호 독립적이다.
  • Single-responsibility 원칙을 따름
  • 아무것도 공유하지 않는다.
  • 비동기가 가능하다.
  • configuration의 외부화
  • 결합도가 느슨하다.
  • 하나의 서비스가 문제를 일으켜도 나머지는 상관없다.

Microservices - Disadvantages

Complex networking으로 인해 데이터베이스, 서버의 오버헤드 발생

Monolithic Architecture vs Microservice Architecture

Monolithic Architecture : 모든 기능이 단일 코드베이스에 위치하고 하나의 DB를 사용한다. 또한 한 기능이 마비되면 전체가 마비되며 크고 복잡한 어플리케이션형태

Microservices vs SOA

SOA 컨센은 centrallize이다.
MS는 not centrallize이다.
즉 SOA는 오케스트라와 같다. (한 지위자가 전체를 통솔한다) Microservices는 발레와 같다. (각 댄서가 각자 율동한다)

Monolithic Architecture vs SOA vs Microservices

coarse-grained : 특정 프로세스(서비스)를 큰 덩어리로 나누는것
fine-grained : 특정 프로세스(서비스)를 잘게 쪼개는 것

Microservices를 구현해야 하는 9가지 이유

  • Easy To Build & Maintain
  • Continuous Delivery
  • Hybrid Technologies
  • Cross Team Coordination
  • Higher Quality Code
  • Smarter Scaling
  • Risk Reduction
  • Promote Big Data Best Practices
  • Improved ROI with reduced TCO

Illustration of Monolithic Module Refactoring

Microservice Architecture는 3계층이다.Container/ Orchestration /Application

The twelve Factors

I. Codebase: One codebase that is tracked in revision control, with many deployments
II. Dependencies: Explicitly declare and isolate dependencies
III.Configuration: Store Configuration in the environment
IV.Backing services: Treat backing services as attached resources
V. Build, release, run: Strictly separate build and run stages
VI.Processes: Execute the app as one or more stateless processes
VII.Port binding: Export services with port binding
VIII.Concurrency: Scale out using the process model
IX.Disposability: 빠른 시작 및 효율적인 종료가 가능하다.
X. Development and production parity: Keep development, staging, and production as similar as possible
XI.Logs: Treat logs as event streams
XII.Admin processes: Run administrative and management tasks as one-off processes

Share