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