매칭 서버의 대규모 트래픽 시험 검증하기 (feat. Kafka 성능 튜닝)
·
project/wargame
매칭 시스템은  가장 성능이 중요한 비즈니스인 만큼 검증은 필수적이다.  매칭 비즈니스 흐름도기본 골자는 다음과 같다.registerMatchQueue : 회원 서비스에게 요청을 보내서 현재 게임중인 사용자인지 검증하고, 매칭 큐에 등록한다.getRank : 현재 매칭중인지 확인하는 APIcalcelMatchQueue : 매칭 큐에 등록된 사용자인지 확인하고 취소한다.  매칭 큐에 등록될때 ZSet 자료구조를 통해 사용자의 Elo 점수를 score로 정렬해서 비슷한 실력대의 사용자들끼리 매칭시켜준다. 마이크로 서비스로 분해하면서 회원 정보의 Nickname에 접근하기 까다로워졌기에, 맨 처음 매칭 큐에 등록할때 사용자 정보를 받아서 HSet 타입으로 캐싱해둬서 가져오도록 했다.    매칭하는데 결과가 줄..
성능 테스트와 개선을 위한 시도와 실패들
·
backend
병목 현상을 줄이기 위한 비동기 프로그래밍@Async 어노테이션을 통해 데이터의 조회 과정을 비동기 방식으로 처리하도록 수정했다.원래는 Netty를 이용한 Spring Webflux와 ReactiveRedis 같은 녀석들을 이용해서 Non-Blocking하게 작업할까도 생각했었지만 기획 단계에서 포기했다. 이미 진행중이던 다른 프로젝트에서 Webflux를 이용하기도 하고, 무엇보다 r2dbc에서 복잡한 연관관계의 데이터 모델을 구성하기 어렵기 때문이다.데이터모델 설계 과정에서 드는 리소스를 감안하기보단, 탄탄한 rdbms를 지원하는 JPA의 이점을 살리는게 더 이득이라 판단했다.조회 성능을 높히기 위한 Caching 정책평소 Redis를 굉장히 좋아했음....ㅎ리팩토링 과정에서 expireTime을 60..
kubernetes 환경에서 MySQL, Redis를 구성해보자
·
kubernetes
StatefulSet 리소스로 프로젝트에 필요한 컴포넌트들을 설치하고, 테스트 해보는 것까지 기록하는 목적이다. ​각 컴포넌트간에 ClusterIP 방식으로 통신하고자 설계했다.​default로 설정된 ClusterIP은 k8s cluster 내부에서만 접근이 가능한 서비스로 외부로 노출되지 않는 특징이 있다.그래서 Pod끼리 해당 서비스의 DNS 이름이나 ClusterIP를 사용해서 주로 접근한다.​ConfigMap과 Secret 리소스를 활용해서 컴포넌트들을 결합한 서버를 배포하는게 이번 게시글의 목적이다.​​​우선 먼저, 항상 eks를 종료하기 전에 모든 리소스를 삭제(terraform destroy)했기에 다시 생성해줘야 한다.1. *.tf 폴더 경로에서 terraform apply로 재생성2. ..