# 마이크로 서비스 아키텍쳐 (1)

bhs9610·2020년 10월 8일
0

마이크로 서비스와 모놀리틱 아키텍쳐에 대해 공부한걸 정리한 글입니다.

Micro Service Architecture

  • 각 포트별 혹은 각각 다른 서버에 서비스를 올려 하나의 큰 웹 서비스가 되는구조

대형 쇼핑몰 웹 서비스를 EC2위에서 운영한다고 생각해봅시다. 사용자가 많은 서비스라 웹 서비스를 효율적으로 늘리고 줄이고 할려합니다. 사용자들이 사용하는 웹 서비스를 확인했을때, '회원가입'이나 '고객문의'는 많이 사용하지 않는 API 입니다. 그리고 많이 사용되는 API 는 '결제' 와 '검색' 입니다.

Micro 와 Monolithic

예를 들어, Monolithic 구조를 가진 EC2 서버에서 '결제' 와 '검색' API 를 확장하고 싶다고하면 똑같은 기능을 하는 EC2의 갯수를 늘려 확장해야 합니다. 이러면 원치 않는 '회원가입' 과 '고객문의' 도 같이 늘어나게되서 어쩔수 없이 리소스가 낭비 되겠죠? 이런 경우 MSA 를 사용한다면 '결제' 와 '검색' 서비스만 늘리게 해주어 효율적이게 사용할 수 있습니다.

MSA 를 사용한다면?

  • 배포 용이성이 높다

각각의 서비스가 모여서 운영되기 때문에 '결제' 서비스만 수정하고 싶을때도 '결제' 서비스만 변경하기 되기때문에 가볍고 간편하게 배포를 할 수 있습니다. 간단한걸 수정한다고 전체 서비스를 재시작할 필요는 없겠죠?

  • 서비스 장애 처리

MSA 의 경우 각각의 서비스가 실행중이기 때문에 특정 서비스에서 장애가 발생한다 하더라도 모든 서비스에 영향을 끼칠 확률이 Monolithic 보다 낮을 수 밖에 없습니다.

MSA의 단점

  • 트랜잭션 개발

위에 있는 쇼핑몰 서비스를 예를 들면, 사용자가 '마우스' 라는 제품을 구매할때 쿠폰, 적립금, 카드 세가지를 이용해 구매한다고 할 때 카드 결제를 실패하면 사용된 쿠폰과 적립금도 모두 롤백를 해줘야합니다. 이런 경우에는 Monolithic 구조가 더 처리하기 쉽기 때문에 트랜잭션으로 관리가 필요한 서비스는 MSA로 개발하기에는 어려움이 있습니다.

  • 퍼포먼스

마이크로 서비스 아키텍쳐는 각각의 데이터가 격리되어 있어 프로세스 공유가 불가능합니다. 어쩔수 없이 이를 위해서는 네트워크를 사용해야하는데 한 호스트 서버에서 VM으로 올리거나 컨테이너형태로 서비스를 올린 경우에는 조금 덜하지만 다른 네트워크 상에 있으면 어쩔수 없이 네트워크 통신이 필요합니다.

  • MSA 를 위한 gRPC

MSA 에서 HTTP 통신을 하게되면 서비스가 호출될때 마다 TCP 세션을 맺어 통신하기 때문에 한 서비스의 호출이 많은 경우에 성능 저하가 생기게 됩니다. 이런 문제를 해결하기 위해 마이크로 서비스에서는 gRPC 를 도입합니다.


profile
@changhyuni

0개의 댓글