카카오톡 메시징 시스템 재건축 이야기

카카오톡 메시징 시스템 재건축 이야기

카카오톡 메시징시스템 #

기준
평균 트래픽(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만 라인으로 줄었다.


앞으로의 계획 #