[Interview Question] 채팅 메시지 저장 요청 부하를 왜 kafka를 사용해서 해결하였는가?
채팅 메시지를 저장할 때, db에 저장, nlp 분석, 알림 발송까지 한 트랜잭션 내에서 동기로 처리하고 있었는데, VU, TPS가 늘어나니 병목현상이 발생했습니다. 이를 해결하기 위해 kafka를 도입해 메시지 처리를 비동기 처리했습니다.이제 api 서버는 메시지를 받으면 kafka에 publish만 하고 응답을 반환합니다. 그 이후 db저장, nlp분석, 알림 발송 같은 구체적인 task는 kafka consumer에게 위임하여 병렬로 처리하도록 구조를 바꿨습니다.구조를 변경한 이후 동기에 들어오는 요청이 폭증해도 안정적으로 병목을 해결할 수 있게 되었습니다. 실제 부하테스트에서도 TPS가 200수준이었지만 2000이상으로 확장 가능해졌습니다. RabbitMQ같은 다른 메시지 큐도 고려할 수 있었지만..