Micro Service Architecture(MSA)

MSA가 무엇인지 살펴보자.

  1. MSA가 무엇인가?

    • ‘하나의 큰 애플리케이션을 여러개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍쳐’
    • 위 정의를 읽어보면 작은 단위들이 모여 큰 결과물을 만드는 형태인듯 하다.
    • 기존 단일 구조로 프로젝트를 만들다가 점점 그 서비스가 방대해지면서 빌드, 테스트, 구조를 이해는것에 대해 어려움이 생겼고 비즈니스 로직 단위로 잘게 쪼개어 서비스 하는 설계 패턴이다.
  2. 분리의 기준은 무엇일까?

    • 각 서비스는 독립적으로 배포할 수 있다.
    • 한 서비스는 한 DB에 연결되어 있다.
    • 각 서비스를 이어주는 API Gateyway서버가 별도로 존재한다. (이때, Gateway 서버에서는 라우팅, 캐싱, 프록싱을 한다.)
  3. 장단점에는 어떤 것들이 있을까?

    장점)

    • 서비스 단위가 작게 유지되므로, 다른 서비스를 방해를 하지 않고 다양한 기술을 적용해 볼 수 있다.
    • 서비스 별로 다른 트래픽을 관리하기 쉬워진다.
    • 서비스 별 모니터링이 용이해진다.
    • 한 서비스에서 장애가 나도 전체 서비스에 영향을 주지 않게 된다. (장애 전파 가능성이 낮다.)

    단점)

    • 서비스의 경계를 정의하는 것이 쉽지 않을 때도 있다.
    • 서비스 호출이 다른 서비스를 연속적으로 호출한다면 디버깅이 어렵다.
    • 대표적인 케이스로 아마존과 넷플릭스 서비스는 MSA방식을 사용하면서 서비스별로 너무 분리시키다 보니 아래와 같이 걷잡을 수 없는 구조가 되었다고 한다.
    • 아마존, 넷플릭스 MSA구조

    msa_netflix

    msa_amazon1

    msa_amazon2

단순하게 호/불호로 구분되어질 문제는 아니라고 생각한다. 서비스를 너무 분리하다보면 위와 같이 최악의 구조를 볼 수 있게 될 것 같다. 도입전에는 언제 필요하고 어떻게 쓸건지 제대로 알아보고 사용하자

그림 출처 : https://meltingcon.github.io/2018/assets/files/%EC%A0%95%EC%9C%A4%EC%A7%84.pdf