ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MSA(Micro Service Architecture)
    인프라 2021. 3. 7. 21:18
    반응형

    아직 공부중

    📌MSA란?

    Micro Service Architecture

    • 작고 독립적으로 배포 가능한 각각의 기능을 수행하는 서비스로 구성된 프레임워크
    • 완전히 독립적으로 배포가 가능하고, 각각 다른 기술 스택(개발 언어, 데이터베이스) 사용이 가능해짐.
    • small services , each running in its own process
    • independently deployable
    • 각 서비스는 개별 프로세스로 구동 되며, REST와 같은 가벼운 방식으로 통신되어야 함.
    • 즉, 단일 응용 프로그램을 나누어 작은 서비스의 조합으로 구축하는 방법(마치 레고 조립하듯이)

    📌 MSA의 등장 배경

    Monolithic Architecture의 한계

    • 부분 장애가 전체 서비스의 장애로 확대될 수 있다.
    • 부분적인 scale-out이 어렵다.
    • 서비스의 변경이 어렵고, 수정 시 장애의 영향도 파악이 힘들다
    • 배포 시간이 오래 걸린다.
    • 한 Framework와 언어에 종속적이다.

    📌 MSA의 특징

    MSA는 API를 통해서만 상호작용할 수 있다. 즉, 마이크로 서비스의 end-point(접근점)을 API 형태로 외부에 노출하고, 실직적인 세부 사항은 다 추상화한다.

    • 마치 하나의 어플리케이션을 출시하듯 한 서비스를 담당하는 사람은 자신의 서비스만 책임진다. 또한 이런 각각의 서비스를 여러 어플리케이션에서 재사용할 수 있어햐 한다.
    • 각각의 마이크로 서비스는 서로 다른 언어와 기술을 사용해도 무관하다. 예를들어, TPS(시간당 트랜잭션)이 높고 읽기 작업이 많은 서비스와 트랜잭션 및 안정성이 중요한 서비스에 서로 각각 다른 기술을 적용해도 된다.
    • ESB(Enterprise Service Bus)와 같은 무거운 제품에 의존하지 않는다. REST 등 가벼운 통신 아키텍쳐 , 또는 Kafla 등을 이용한 message stream을 주로 이용한다.

    📌 MSA의 장점

    • 각각의 서비스가 모듈화 되어있고, 모듈끼리는 RPC또는 API등을 이용하여 통신한다. 이는 각 개별 서비스의 개발 속도를 증가시키고, 유지보수를 용이하게 해준다.
    • 모듈별로 적절한 기술 스택을 다르게 가져갈 수 있다.
    • 서비스별도 독립적인 배포가 가능하다.
    • 각 서비스의 부하에 따라 개별적으로 scale이 가능하다.
    • 장애가 전체 서비스로 확장될 가능성이 적다.

    📌 MSA의 단점

    전체 서비스가 커짐에 따라 복잡도가 늘어날 수 있다.

    • 성능 : 서비스간 호출 시 API를 사용하기 때문에 통신 비용이나 Latency가 그만큼 늘어나게 된다. Monolithic Architecture는 다른 서비스간 상호작용이 필요할 때 Method 호출을 이용함. 즉, 메모리 안에서 일어나는 행위. 하지만 MSA같은 경우에는 주로 HTTP를 사용하기 때문에 Network IO를 사용해야 함.
    • 테스트 / 트랜잭션 : 서비스가 분리되어 있기 때문에 복잡도가 증가하고, 자원을 많이 필요로 한다. 그래서 글로벌 트랜잭션이 일어나는 상황보다는 local 트랜잭션이 일어나는 상황들로 주로 경계를 나누고, 불가피하게 서비스 간 트랜잭션이 필요하면 트랜잭션 로직을 추가함.
    • 데이터 관리 : 데이터가 여러 서비스로 분산되기 때문에 데이터를 한번에 조회하기 어렵고, 정합성 보장이 어렵다.
    • 관리 포인트 증가 : Monolithic의 경우에는 어플리케이션 서버와 DB 서버 두 개를 관리하면 되지만, MSA에서는 기본적으로 서비스 수 * 인스턴스 수 만큼 서버가 늘어남 > 모니터링에 추가 비용, 모니터링이 잘 되는 환경이 필요하다.

    📌 Docker , VM을 이용한 서비스 격리

    • 여러개의 마이크로 서비스를 운용할 때는 VM보다는 도커와 같은 컨테이너 기술을 고려하는 것이 유리하다.
    • 도커 이미지, 도커 레지스트리, 도커 네트워크 등을 이용해 마이크로 서비스의 생성과 배포 , 실행이 가능하다.
    • 도커 컴포즈나 쿠버네티스를 이용해 멀티 컨테이너를 조직화 하고 연결해서, MSA 어플리케이션의 가용성과 로드밸런싱 기능을 구현할 수 있다.

    📌 References

    https://wooaoe.tistory.com/57

    https://velog.io/@tedigom/MSA-제대로-이해하기-1-MSA의-기본-개념-3sk28yrv0e

    https://alwayspr.tistory.com/20

    반응형

    댓글

Designed by Tistory.