시간나는대로 틈틈히 정리 합시다~~!!!

마이크로서비스 란? 본문

IT

마이크로서비스 란?

열심히 정리하자!! 2021. 3. 27. 01:18
반응형

1. 정의

- 일체형 애플리케이션을 서로 협력하는 독립 소프트웨어 컴포넌트로 나누는 것이며,
  애플리케이션을 쉽게 확장하고 빠르게 개발하기 위한 아키텍처이다.
- 아래 두가지 목표를 달성하고자 일체형 애플리케이션을 작은 독립컴포넌트로 나누는 것이다.
  > 빠르게 개발해 지속적으로 배포할 수 있어야 한다.
  > 수동 혹은 자동으로 쉽게 스케일링할 수 있어야 한다.
- 독립컴포넌트로 동작하려면 아래와 같은 기준을 충족해야 한다.
  > 아무것도 공유하지 않는 아키텍처를 유지해야 한다.
    (데이타베이스 공유X)
  > 명확한 인터페이스를 통해서만 통신해야 한다.
    (동기서비스 혹은 API를 이용한 메시징 방식을 사용할 수 있는데, 
     메시지 형식은 버전 관리 전략에 따라 안정적으로 문서화되고 개선되어야 한다.)
  > 개별적인 런타임 프로세스로 배포해야 한다.
    (각 마이크로서비스 인스턴스는 도커 컨테이너와 같이 독립된 런타임 프로세스로 실행해야 한다.)
  > 마이크로 인스턴스는 상태가 없다.
    (모든 마이크로서비스 인스턴스가 마이크로서비스로 들어오는 요청을 처리할 수 있다.)

 

2. 장점

- 하나의 대형 서버에 배포해야 하는 일체형 애플리케이션과 달리 여러개의 작은 서버에 배포할 수 있다.
- 가상 서버를 늘리는 등의 방법으로 일체형 애플리케이션을 확장하는 것에 비해 훨씬 쉽게 확장이 가능하다.
- 업그레이드나 교체에 대해 일체형 애플리케이션에 비해 쉽다.

 

3. 단점

- 동기식 통신을 사용하는 다수의 소형 컴포넌트는 연쇄장애를 일으킬 수 있다.
  (부하가 높은 상황에서 특히 심함)
- 다수의 소형 컴포넌트를 최신 상태로 유지하기 쉽지 않다.
- 많은 컴포넌트가 처리에 관여하는 요청은 추적하기 어렵다.
  예를 들어, 각 컴포넌트가 로컬에 로그 이벤트를 저장하는 경우 근본 원인 분석을 수행하기 어렵다.
- 컴포넌트 수준의 하드웨어 자원 사용량 분석도 어렵다.
- 다수의 소형 컴포넌트를 수동으로 구성하고 관리하는 건 비용이 많이 들고 오류가 발생하기 쉽다.
- 애플리케이션을 독립 컴포넌트 그룹으로 나누면 분산 시스템을 형성하게 된다.

 

4. 분산 애플리케이션을 처음 구축할 때 하는 여덟 가지 오류(가정)

아래 잘못된 가정을 기반으로 구축한 마이크로서비스는 일시적인 네트워크 결함이나 
다른 마이크로서비스 인스턴스에서 발생한 문제에 취약하게 된다.
- 네트워크는 안전하다.
- 네트워크 지연은 0이다.
- 대역폭은 무한하다.
- 네트워크는 안전하다.
- 토폴로지는 변하지 않는다.
- 관리자는 1명이다.
- 전송비용은 0이다.
- 네트워크는 균일하다.

 

5. 해결책

- 시스템 환경에 항상 문제가 있다는 가정을 기반으로 마이크로서비스 아키텍처를 설계한다.
- 문제를 감지해 고장난 컴포넌트를 다시 시작하고 
  클라이언트 측에서는 고장난 마이크로서비스 인스턴스에 요청을 보내지 않도록 설계한다.
- 문제가 해결되면 고장났던 마이크로서비스에 대한 요청을 다시 시작해야 한다.
- 운영자가 다수의 마이크로서비스를 수동으로 관리하는 건 어려우므로 모든 것은 완전히 자동화되어야 한다.

 

6. 마이크로서비스를 나누는 규모 기준

- 개발자가 다룰 수 있을 만한 크기
- 성능(대기시간)이나 데이터 일관성을 저해하지 않을 정도의 규모

 

 

반응형
Comments