Semina

[최범균 Youtube] 마이크로서비스 5개 배포 원칙 소개

Jordy-torvalds 2022. 4. 10. 10:48
반응형

최근에 MSA에 대해서 관심이 생기면서 관련된 영상을 찾아보던 중 최범균님이 올리신 마빌딩 마이크로서비스 아키텍처 시리즈 영상에 대해 알게 되었습니다. 아래 영상을 먼저 보고 제 글을 읽어보시길 추천드립니다.

실행 격리 Isolated execution

부하/배포에 있어서 마이크로서비스 간에는 영향을 줘선 안된다. 만약 한 호스트(노드 혹은 서버)에서 여러 마이크로서비스 인스턴스를 실행할 경우 한 마이크로서비스의 부하가 급격히 증가 했을 때 다른 마이크로서비스의 성능이 저하될 수 있으며, 한 마이크로서비스의 배포를 위한 설정이 변경되면 다른 마이크로서비스의 배포에도 영향을 줄 수 있기 때문이다.

그러므로 격리된 환경에서 마이크로서비스를 실행해야 하며, 가상화 기술, 컨테이너, FaaS 등의 기술을 활용하면 좀 더 쉬워질 수 있다. 물론 물리적 장비를 통해서도 강한 격리가 가능하지만 좀 더 빠른 제공을 위한 측면에서는 컨테이너 등의 기술이 좀 더 편할 수도 있다.

자동화에 초점 Focus on automation

마이크로서비스가 증가할수 록 복잡도가 증가한다. 절차가 많아지고, 설정이 많아지고 모니터링 대상도 많아지며, 결과적으로 운영을 위한 공수(운영 부하)도 증가하게 된다.

그렇기 때문에 자동화에 초점을 둘 필요가 있고, 이는 곧 차후 서비스 성장에 병목으로 작용할 수 있다.

이를 위해서 개발자가 직접 서비스를 제공할 수 있도록 하는 것도 생산성을 높이기 위한 하나의 방법이 될 수 있다.

코드형 인프라 Infrastructure as Code

인프라스터럭쳐를 코드로 정의하는 것이 필요하다. 자동화를 구현하는 한 가지 방법으로써 텍스트 형식으로 원하는 인프라스트럭쳐를 정의할 수 있으며, 인프라스트럭쳐에 대한 버전 관리도 가능해진다.

이러한 IaC에 유명한 도구가 Terraform, Pulumi가 있으며 클라우드/컨테이너의 확대에 따라 퍼펫, 앤서블 등의 인프라 관리 자동화 도구는 감소세에 있다.

Pulumi의 경우 개발자에게 친숙한 자바스크립트, 자바, 고 언어로 작성이 가능하므로 더욱 강력해 보이는데, 그래서인지 기업용 라이선스가 별도로 있었고 무료가 아니였다.

무중단 배포 Zero-downtime Deployment

마이크로서비스 개발/배포에 있어 무중단 배폰느 필수이다. 서비스 사용자에 통지하지 않고 출시하는 것이 목표이며, 출시를 위해 사용자와 일정을 조율하고 공유하는 과정을 제거할 수 있다. 또한 독립적인 배포에 있어서도 필요하다.

기대 상태 관리 Desired State Management

수작업 없이 인프라스터럭쳐를 원하는 상태로 유지할 수 있어야 한다는 특징입니다.

예를 들어, 최소 3개의 인스턴스가 실행 중이어야 한다거나, CPU 부하가 평균 50%를 넘어갈 경우 인스턴스를 하나 더 추가적으로 실행하는 등을 의미합니다.

이를 위해서는 쿠버네티스, AWS 등의 플랫폼 지원/도구가 필요합니다.

반응형