개발과 잡지식

Kubernetes 00 - From Monolith to Microservices 본문

micro service/kubernetes(k8s)

Kubernetes 00 - From Monolith to Microservices

잘하고싶은잉여 2021. 1. 6. 11:00

Introduction to Kubernetes

출처출처 : https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS158x+3T2020/course/#block-v1:LinuxFoundationX+LFS158x+3T2020+type@chapter+block@48d68448eff24f02bcb78470dec9c6a1

Will Be Check

  • Explain what a monolith is.
  • Discuss the monolith's challenges in the cloud.
  • Explain the concept of microservices.
  • Discuss microservices advantages in the cloud.
  • Describe the transformation path from a monolith to microservices.

Chapter 1. From Monolith to Microservices

The Legacy Monolith

설명한 저자에 의하면 모든 app 혹은 기능 들은 클라우드화 될 것이라고 한다.

이에 나도 동의를 상당 부분 한다. <그 이유에 대해서는 차후 설명이 이어집니다.>

전에 만들어진 코드 혹은 개발의 산물 들은(Single process) 상당 부분 소프트웨어 아키텍처와 동떨어져 있으며

추상적이게 하나의 큰 돌처럼 결집되어 있다.

이러한 구조의 문제는

  • 하나의 큰 프로세스를 구현하려면, 하드웨어, 혹은 C Group 등 많은 자원이 필요하다는 것이다.
  • 스케일링에 있어서 거의 불가능 하며 하려거든 다른 고가의 서비스 등을 이용해야 한다는 것이다.
  • 업그레이드 혹은 다운 그레이드를 하려면 다른 고가의 서비스를 이용하지 않는 다면 서버 등은 중단 상태에서 배포해야 되며 이는 고객들에게 미리 양해를 구해야만 할 것이다.

The Modern Microservice

클라우드의 환경으로 개발된 프로그램을 옮길 때 하나의 큰 서비스 보다는 수많은 작은 돌멩이를 옮기는 것과 유사하게 작게 이루어진 앱들이 유리하다.

Microservice는 SOA(Service Oriented Architecture)와 Event Driven Architecture

얼추 이벤트에 최적화 시킨 구조라고 생각하자

작고 독립된 어플리케이션들이 서로 API를 통해서 통신하는 구조.

물론, 작고 독립되게 애플리케이션들을 분리시키면 추가적으로 복잡도는 증가하지만 스케일링 면에서 모놀리식과 비교도 안될 적도로 이점이 있다.

하나의 애플리케이션을 증가해야 하면 늘리면 된다 나머지 애플리케이션과 상관없이, 독립 구조이니까.

또한 업그레이드 및 패치에 있어서도 roll out처럼 쉽게 가능하다. 중단시키고 새로운 애플리케이션을 올릴 필요가 없다.

roll out, 점진적 배포 추가 내용 : https://docs.microsoft.com/ko-kr/windows/uwp/publish/gradual-package-rollout

Refactoring

모놀리식 코드들은 점진적으로 마이크로 서비스에 맞게 리펙토링 되고 있다.

기능 추가 시 기존 모놀리식 코드에 추가되지 않고 API를 통해서 통신할 수 있도록 나아가는 것이다. 혹은 리펙토링 되어서 모놀리식으로부터 분리된 모듈들이 늘어나며 모놀리식은 코드들은 점점 사라지게 될 것이다.

이를 통해서 점점 클라우드의 이점인 자동화 도구 및 서비스를 이용할 수 있다.

물론 이를 위해서는 새로운 언어로 다시 짜이거나 기존 구조를 쪼개고 현대화된 패턴 및 구조에 맞추어져야 한다.

얼마나 고되고 힘들지..

Challenges

모놀리식 코드 중에는 데이터 저장소와 친밀하게 결합된 애플리케이션 등 마이크로 서비스 화 하기 위한 리펙토링이 적합하지 않을 수도 있다.

while some may not even "survive" such a modernization phase

모놀리식 리펙토링 한 후 끝이 아니며 분리된 모듈을 유지하고 전체적으로 복원력을 강화해 나가야 한다.

런타임을 가능하게 하는 것 또한 새로이 도전해야 하는 과제이다. 새로운 라이브러리와 새로운 런타임 환경에서 여러 충돌과 에러를 겪게 될 것이다.

궁극적으로 애플리케이션은 컨테이너화 되어서 캡슐화되어 런타임 환경이 되어야 한다.

[리펙토링 및 챌린지에 성공한 예시들] https://kubernetes.io/case-studies/

Check

Explain what a monolith is : 하나의 프로세스 안에 모든 기능을 넣는 것. 각각의 기능들이 분리되어 있지 않으며 서로 단단하게 결합되어 있다.

Discuss the monolith's challenges in the cloud : 클라우드에 적합하지 않다. 하나의 큰 덩어리라면 클라우드로 옮기는 게 가능하겠지만 무겁고 킁 덩어리의 모놀리식 구조가 엄청 많이 존재한다면 이는 클라우드 서비스에 자동 관리, 더 나아가 클라우드 환경에 작동에 문제가 생길 수 있다.

Explain the concept of microservices : 각각의 기능들을 독립적으로 관리하며 서로 API 통신을 통해 communication을 하며 작동하는 구조.

Discuss microservices advantages in the cloud : 각각의 기능들이 독립적이다 보니 필요한 기능 혹은 순간적으로 사용량이 늘어난 기능에 대해서 자동 스케일링, 패치 및 업그레이드 roll out 같은 방식을 통해서 중단 없이 배포 가능하다. 클라우드 환경에 이식성이 좋아 클라우드의 장점을 활용할 수 있다.

Describe the transformation path from a monolith to microservices. : 우선 적으로 새로이 추가되는 기능이나 분리 가능한 기능들을 모놀리식에서 때어내서 API 통신을 통해서 작동하게 만들고 더 나아가 런타임에 작동할 수 있도록 새로운 언어 혹은 새로운 라이브러리, 환경 등에 제대로 작동 되게 변화해야 하며 , 궁극적으로 컨테이너로 캡슐화하는 도전들이 있다.

Check에 관해서 개인적으로 생각하는 내용들은 댓글로 날아주세요 :) 저와 다른 의견을 달아주시면 저도 공부에 도움이 매우 많이 됩니다! 감사하겠습니다.

출처 : https://courses.edx.org/courses/course-v1:LinuxFoundationX+LFS158x+3T2020/course/#block-v1:LinuxFoundationX+LFS158x+3T2020+type@chapter+block@48d68448eff24f02bcb78470dec9c6a1