upstream chatServer {
least_conn;
server host.docker.internal:8080;
server host.docker.internal:8081;
}
server {
listen 80;
server_name localhost;
root html;
location / {
proxy_pass http://chatServer;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
위 conf 파일을 보듯이 nginx를 통해 카프카와 연동된 채팅서버들을 Load Balancing을 해주고 있다.
여기서 발생하는 문제점은 웹 브라우저는 하나의 채팅서버와 소켓 연결을 지속하기 때문에, 다른 채팅서버에서 내려준 응답을 확인할 수 없다는 점이다.
그렇기 때문에 내가 보낸 메시지를 상대방 (혹은 나 자신또한) 이 받지 못할 것이다.
실제로 테스트 결과도 이미지와 같이 동일한 대화방에서도 메시지들이 분할되어 출력된다.
이는 카프카가 Pull 기반의 메시지를 보내기 때문에 발생한 이유이기도 하며 (Redis 처럼 모든 서버에 뿌려주면 생각할 필요도 없다..)
컨슈머가 같은 그룹에 속해서, quque에 쌓인 요청들을 분할해서 처리하는 문제이기도 하다.
그래서 이를 어떻게 해결해줄까 생각하면, 해결 방안은 총 3가지가 나온다.
일단 한가지씩 모두 해볼 것이다.