안녕하세요~ 오늘은 MSA 에 대해서 글을 작성해보겠습니다.

 


 

MicroService가 발생하게 된 배경은 보통의 프로젝트 형태인 Monolithic Architecture는 프로젝트 규모가 커질수록, 빌드 시간이 길어지고 유지보수가 힘들다는 특징이 있습니다. 이를 보완하기 위해서 MicroService의 형태가 발생하게 되었습니다.

 

MicroService란,

어플리케이션을 이루는 서비스들을 기능 단위로 쪼개서 구축하는 것을 말하며 각 서비스들은 REST API를 통해 통신합니다.

 

 

장점

1. 수정 사항 및 추가사항이 있는 서비스만 빌드, 배포가 가능합니다.

2. 해당 서비스에 더 적절한 서로 다른 언어나 기술을 사용할 수 있습니다.

 

단점

1. 모니터링이 힘들고, 개발 및 테스트가 까다롭습니다.

2. 모놀로식에 비해 구축 난이도가 어렵습니다.

 

 

보통의 프로젝트 형태인 Monolithic Architeture의 형태는 다음과 같습니다.

MicroService와 반대되는 개념으로, 하나의 서버에서 모든 서비스가 동작하는 것을 말합니다.

 

장점

1. 아키텍처가 단순하고 모든 서비스의 개발환경이 같아 개발이 용이합니다.

2. End-to-End Test(사용자 입장에서의 테스트)가 용이합니다.

 

단점

1. 조금만 수정해도 전체를 다시 빌드하고 재배포해야 합니다.

2. 프로젝트 규모가 커짐에 따라 빌드 시간이 증가하고 유지보수가 힘듭니다.

3. 일부 서비스의 오류가 전체 서비스에 영향을 줍니다.

 

 

MicroService에 장점만 있는건 아니기 때문에, 상황에 따라 적절하게 서비스를 구축해야합니다.

출처: https://wonit.tistory.com/487?category=854727

MSA를 사용하는 대표적인 기업으로는 아마존과 Netflix가 있습니다.

넷플릭스는 2007년 데이터 베이스 손상으로 인해 3일간 서비스 장애를 겪고 나서 고가용성, 유연한 확장성, 빠르고 쉬운 배포 의 장점을 가진 MSA 구조를 채택했습니다. 이 과정에서 경험한 노하우 및 문제 해결 방법을 오픈소스로 공개했습니다.

# Spring Cloud

Spirng Cloud는 Springboot를 기반으로 MSA 구축에 특화된 라이브러리들의 집합입니다. Spring Cloud에는 Eureka, Zuul(springboot 2.4? 2.5 부터 지원안함> Spring Cloud Gateway로 대체) , Histrix, Ribbon 등 많은 넷플릭스 OSS(Open Source Software) 가 통합되어 있습니다.

# Eureka - Service Discovery Server

MSA를 이루는 서비스들은 동적으로 확장 및 축소되는데, 이 인스턴스의 상태를 동적으로 관리하는 서버를 말합니다.

새로운 서비스 인스턴스는 시작될 때 IP, 포트번호 등을 스스로 전송합니다. 이로 인해 운영자들은 서비스를 수평 확장할 때 IP를 신경쓸 필요가 없게됩니다.

# Zuul - API GateWay

API 게이트웨이는 사용자의 Request에 맞는 서비스로 라우팅시켜주는 역할을 합니다. Client 와 Server의 중간다리역할을 한다고 생각하면 됩니다. 사용자에게는 API GateWay만 노출되게 됩니다.

이유로는 적절한 사용자의 요청인지 확인하는 인증, 각 서비스에 대한 요청을 로그로 기록하는 로깅, 요청사항을 구분하는 필터 등을 통해 모든 요청에 대한 관리를 수월하게 하기 위해 필요합니다.

# Ribbon - Client Side Load Balancer

Ribbon은 Cilent에 탑재하는 소프트웨어 로드밸런서입니다.

# Hystrix - Circuit Breaker

특정 서비스에 과부화가 걸려 장애가 발생하면, 전체 서비스에 장애를 전파하는 경우가 있습니다. 이와 같은 현상을 막아주는 역할을 하는 것이 서킷 브레이커입니다. Hystrix는 각 서비스의 오류 상태 및 복구 상태, 오류 내용을 파악하며 장애가 발생하면 통신을 즉시 중단시키고 문제가 발생한 서비스를 격리시킵니다. 문제가 해결될 때 까지 호출을 제한합니다.

또한 정해진 시간내에 호출이 실패하면 대신 동작하는 예외 처리인 Fallback을 지원해 시스템 장애로부터 유연하게 대처할 수 있습니다.

 


 

MicroService에 대해서 알아보았습니다. 감사합니다.

 

 

참고한 사이트

https://wonit.tistory.com/497?category=854728

https://www.samsungsds.com/kr/insights/msa_and_netflix.html

 

'IT 지식' 카테고리의 다른 글

REST, REST API란?  (0) 2021.09.08
HTTP란 ?  (0) 2021.09.07
[MicroService] Eureka Server  (0) 2021.08.29

+ Recent posts