https://github.com/cse0518/msa-practice
대규모 시스템 MSA 인프라 구조를 구현해봅니다.
https://github.com/cse0518/msa-practice
docker-compose kafka netty spring-cloud-gateway spring-eureka webflux
Last synced: 4 months ago
JSON representation
대규모 시스템 MSA 인프라 구조를 구현해봅니다.
- Host: GitHub
- URL: https://github.com/cse0518/msa-practice
- Owner: cse0518
- Created: 2023-04-17T08:22:47.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2024-08-18T10:24:32.000Z (over 1 year ago)
- Last Synced: 2024-11-12T15:12:11.828Z (about 1 year ago)
- Topics: docker-compose, kafka, netty, spring-cloud-gateway, spring-eureka, webflux
- Language: Shell
- Homepage:
- Size: 104 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## 실행
- 실행 환경
- Gradle 7.6.1
- Docker 20.10.24
- 실행
```shell
# submodules 포함하여 clone (--recursive 옵션)
git clone --recursive https://github.com/cse0518/MSA-practice.git
# 프로젝트 실행 (docker-compose up → zookeeper 추가 세팅)
./run.sh
# docker-compose down
docker-compose -f docker/docker-compose.yml -p msa-project down
# local 환경에서 jar 파일 백그라운드로 실행 (권장하지 않음)
./script/gradle-build-all.sh # gradle 빌드
./script/run-local.sh # jar 파일 실행
```
## Index
- [프로젝트 소개](#-프로젝트-소개)
- [기술 스택](#-기술-스택)
- [주요 내용](#-주요-내용)
- [1. 대규모 트래픽 처리를 위한 비동기 처리](#1-대규모-트래픽-처리를-위한-비동기-처리)
- [2. 마이크로 서비스들을 관제하기 위해 Spring Eureka 적용](#2-마이크로-서비스들을-관제하기-위해-spring-eureka-적용)
- [3. 비동기식으로 작업을 처리하기 위해 MQ(Kafka) 활용](#3-비동기식으로-작업을-처리하기-위해-mqkafka-활용)
- [4. 적은 스레드로 많은 요청을 효율적으로 처리하기 위해 Netty 활용](#4-적은-스레드로-많은-요청을-효율적으로-처리하기-위해-netty-활용)
## 📑 프로젝트 소개

- 마이크로서비스 구조에 **Spring Cloud Gataway**와 **Spring Eureka**를 적용하여 모든 서비스에 대한 인증 및 로드밸런싱을 구현합니다.
- Eureka Client에서는 WebFlux를 활용하여 비동기적으로 HTTP 요청을 처리합니다.
- 데이터를 **Kafka**에 Publish, Subscribe 하는 로직을 구현합니다.
- **Socket 통신**으로 데이터 전송 로직을 구현합니다.
## 🛠 기술 스택
- Java 8, Spring Boot 2.7.10
- Webflux, Netty
- Spring Eureka, Spring Cloud Gateway
- Zookeeper 3.4.13, Kafka 3.4.0
- Docker 20.10.24
## 📌 주요 내용

### 1. 대규모 트래픽 처리를 위한 비동기 처리
- 많은 서비스에 대한 Client의 요청이 Gateway를 거쳐 각 서비스에 전달됩니다.
- Gateway에 집중되는 대규모 트래픽을 빠르게 처리하기 위해 WebFlux를 적용했습니다.
WebFlux는 비동기 Non-Blocking 방식으로 동작하여 적은 수의 스레드로 많은 요청을 처리할 수 있습니다.
- Spring-Cloud-Gateway는 MSA 구조에서 쉽고 빠르게 로드 밸런싱을 해줍니다.
Netty를 기반의 비동기 Non-Blocking 방식으로 동작하여 빠르게 일을 처리합니다.
### 2. 마이크로 서비스들을 관제하기 위해 Spring Eureka 적용
- Eureka Server에서는 실행중인 서비스들의 호스트와 포트 정보를 등록하고 관리합니다.
마이크로 서비스들이 서로의 주소를 확인하고 통신할 수 있도록 합니다.
### 3. 비동기식으로 작업을 처리하기 위해 MQ(Kafka) 활용
- 각 모듈에서 비동기식으로 요청을 처리하기 위해 MQ(Kafka)를 사용했습니다.
- 동시에 처리되는 개수를 제어하고, 데이터 복원력 향상을 도모합니다.
- Kafka 환경을 모니터링 하기 위해 CMAK을 사용했습니다.
- Kafka Cluster 및 Topic 등 관리
- Kafka Lag 모니터링

### 4. 적은 스레드로 많은 요청을 효율적으로 처리하기 위해 Netty 활용
- Kafka에서 consume 한 데이터를 비동기식으로 효율적으로 처리하기 위해 Netty를 사용했습니다.