카카오톡 메시징시스템 #
기준 | 값 |
---|---|
평균 트래픽(TPS) | 500K |
최고 트래픽(TPS) | 6.5M |
평균 연결 세션 수 | 40M |
C++ 사용 이유 : 대량 트래픽 다루기 위해
C++ 백엔드 서버 애플리케이션 #
- epoll 기반의 비동기 입출력 지원
- 쓰레드 별로 미리 할당한 메모리 버퍼 사용
- system call 호출(지연)을 줄이기 위해 미리 메모리 버퍼를 할당 받아 놓음
- 대당 500K 이상의 세션 관리
앞으로의 10년도 커버 가능할까? #
현재까지의 구조는 최적화에 목적을 둔, 하지만 유지보수하기는 힘든 구조였다. (성능은 뛰어나지만, 관리가 힘들다.)
- 직접 개발한 프로토콜, 라이브러리
- 라이브러리 내재화(스태틱화)
- 코드 최적화 -> 가독성 저하
- 적은 단위 테스트, 너무 복잡한 통합 테스트
- 노후화된 배포 시스템 : shell script + python
- 인적 리소스 불균형 (c++ 인력 vs java 인력)
- …
부분 별로 개선은 진행하고 있지만, 어쨌든 C++ + Java 기반의 구조, 극한의 커스텀 구조를 아예 개편하기로 결정했다.
다른 파트들의 기술 스택은 어떨까? #
진행 과정 #
1단계 #
각 모듈을 대체하는 모듈을 새로 만들었다.
PAPI 서버 #
앞단을 새로 만들고, 기존 서버를 거둬내는 형태로 작업했다.
세션 서버 #
카카오톡 클라이언트의 세션 정보를 저장하는 서버다.
애플리케이션 서버 내 인메모리 형태로 관리했었다.
외부 스토리지(Redis)를 사용했다.
현재 config, session, papi 서버에 대해서는 대체했다.
2단계 #
Relay & Session Manager 서버 #
고성능 애플리케이션
g1gc, zgc 간에 ‘프로토콜 처리’ 성능 측면에서도 차이를 보였다.
현재 최적화 작업 진행 중이다.
정리 #
릴레이 서버의 경우 코드 라인 수가 4만 라인 -> 2만 라인으로 줄었다.