대용량 트레픽을 고려한 웹 메신저
- Micro Service Architecture의 이해
- Scale Out 가능한 구조의 설계 및 구현
- 메신저 및 실시간 채팅 서비스에 대한 이해
- HAProxy를 통한 HA구성 및 부하 테스트 진행
- 실기간 채팅
- 친구 목록 관리
- 실시간 읽은 메세지 처리
- 파일 및 사진 전송
- 프로필 사진 및 관리
...
기술 스택
- Spring Boot + WebSocket(STOMP, SockJS)
- Redis & pub/sub
- MySQL
- MongoDB
- NginX
- HAProxy
- React, MobX, SASS
- 테스트 환경
OS | CPU | RAM | |
---|---|---|---|
Server | Ubuntu 18.04 | Intel(R) Core(TM) i5-5200U | 8 GB |
NGrinder Controller/Agent | MAC - OS X | Intel(R) Core(TM) i5-5257U | 8 GB |
agent 1대 – Process 4, Thread 200 / POST / DB Query 2회 기준
원인 분석
DB Query에 오버헤드가 있음을 인지
- Tomcat - Server.xml 수정 (acceptCount, maxConnection, maxThread …)
- Server - DB Connection Pool 설정, Logger level 변경
- MySQL - Server config 수정 (max_connections, Innodb_max_pool_size,Innodb_id_capacity…)
실행방법 각 Project 빌드 후
docker-compose up -d
(daemon)
상황에 맞게 docker-compose.yml 변경하여 사용
docker-compose -f "filepath" up -d
Maven project
maven 설치 후
mvn package
Gradle project
./gradlew build docker
Node project(React)
npm run-script build
기존의 Database를 사용하기 위해서는 DB path를 수정
# docker-compose.yml
...
mysql:
...
volumes:
...
<DB path>:/var/lib/mysql