k8s 와 istio 를 이용한 분산 추적이 가능한 쇼핑몰
View Demo Video
·
Report Bug
·
Request Feature
Table of Contents
최근 몇년 사이에 MSA(마이크로서비스 아키텍처)라는 소프트웨어 아키텍처가 매우 핫하게 다루어지고 있습니다. MSA가 등장하기 이전에는 대부분 모놀리스 아키텍처라는 방식으로 소프트웨어를 설계하였습니다. 모놀리스는 업무 로직이 하나의 어플리케이션 형태로 패키징되어 서비스되는 방식으로 단순하기 때문에 개발이 쉽고 빠르지만, 서비스가 확장되고 규모가 커지면서 한계점이 드러나게 되었습니다. 대표적으로는 일부의 모듈만 변경하여도 전체 어플리케이션 개발과 운영 프로세스에 영향을 주게 된다는 것과 확장이 어렵다는 점이 있습니다.
이를 해결할 수 있는 대안책으로써 등장한 MSA방식은 애플리케이션의 로직을 작은 컴퍼넌트들로 분해하여, 최종적으로 이들을 조합해 솔루션을 제공하고 각 컴포넌트가 상호 독립적으로 배포되어 높은 유연성과 확장성을 가져갈 수 있게 되었습니다.
다만, 이러한 MSA도 단점은 존재합니다. 기술적 어려움으로는 장애추적과 모니터링이 쉽지 않고 테스팅이 어렵다는 등의 문제가 있습니다. 또한 마이크로 서비스 하나에서 문제가 발생하면 장애가 다른 서비스들로 퍼져나갈 수도 있습니다. 더불어 기술의 적용 난이도 자체가 어렵습니다. 실제 MSA를 사용하고 있지 않은 기업들 중 절반 이상이 MSA가 유용하고 도움이 되는 기술이라고 답하면서도 MSA를 적용하지 않은 가장 큰 이유로 난이도와 관련된 이유들을 꼽았습니다.
저희는 MSA의 기술적 단점에서 추적과 분석이 어렵다는 점을 해결하면서도 이를 단순한 쇼핑몰로 만들어 공개함으로써 누구나 쉽게 MSA에 접근하여 학습과 적용에 이용할 수 있도록 하고자 했습니다.
쇼핑몰 앱 구현에서는 쇼핑몰을 구성하는 서비스들을 구상하고 이것들을 자바스크립트와 nodejs를 기반으로 하여 웹 서비스앱의 형태로 구현하였습니다. 서비스들은 총 10개로 결제, 상품정보 관리 등으로 쇼핑몰 기능별로 구현하였고, MSA의 특징을 잘 살리기 위해 양방향 통신이 아닌 단방향 통신이 일어나도록 설계하였습니다.
다음은 쿠버네티스 설정 부분입니다. 작은 기능 단위인 마이크로서비스들은 컨테이너라는 독립적이고 동적인 애플리케이션 구동 환경에서 작동하게 됩니다. 저희의 쇼핑몰 서비스들도 마이크로 서비스로써 작동을 하기 때문에, 이를 관리하기 위해 쿠버네티스를 이용하였습니다. 서비스 앱들을 모두 도커 이미지로 만들어 쿠버네티스 환경에 띄움으로써 최종적으로 MSA 기반 쇼핑몰이 작동하게 됩니다.
Istio설정은 MSA에서 서비스간 통신을 구성하고 다루기 위해 istio라는 서비스 메시 도구를 다루는 과정입니다. 이 서비스 메시를 구현함으로써 저희는 서버의 장애가 어느정도 자동적으로 복구되도록 하는 서킷 브레이커 기능과 로드밸런싱 기능을 구현할 수 있었습니다.
또한 실무에서도 많이 쓰이는 k6라는 로드제네레이터를 이용하여 자동으로 실제 환경과 유사하게, 저희가 구성한 유저 시나리오대로 주기적인 트래픽을 발생시켜 보았습니다.
마지막으로는 저희의 쇼핑몰의 내부 지표 데이터들을 추출하고 가시화해 보았습니다. 저희가 istio를 통해 구현한 서비스 메시에서 트래픽의 흐름을 모니터링할 수 있는 툴인 kiali를 활용하여 트래픽 흐름을 볼 수 있는 대시보드를 구성하였고 프로메테우스라는 오픈소스를 이용해서 실제 쇼핑몰 서비스 안에 존재하는 매출액/평균 매출액 등의 지표를 추출하여 대시보드로 시각화 해 보았습니다.
This section should list any major frameworks/libraries used to bootstrap your project. Leave any add-ons/plugins for the acknowledgements section. Here are a few examples.
This is an example of how you may give instructions on setting up your project locally. To get a local copy up and running follow these simple example steps.
Below is an example of how you can instruct your audience on installing and setting up your app. This template doesn't rely on any external dependencies or services.
- Clone the repo
git clone https://github.com/academey/distributed_tracing_shopping_mall
- Apply resources
k apply -f cite3.yml
- See the dashboard at kiali
istioctl dashboard kiali
- DB 붙이기
- Pod sacle out 설정 추가
- deployment
- Ployglot 환경으로 발전
- heml chart 관리환경으로 변경
See the open issues for a full list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE.txt
for more information.