티스토리 뷰

 

모든 서비스가 그렇듯 트래픽 초과나 서버에 과부하가 오면 느려지거나, 심한 경우 다운됩니다. 이럴 경우에는 일반적으로 LoadBalancer를 활용해 서버에 오는 부하를 줄이는 방식을 채택하게 됩니다. LoadBalancer는 똑같은 서비스지만, 다른 Port로 서버를 개방하게 해서 똑같은 역할을 하는 서비스에 일반적으로 교차로 응답을 보내며, 서버에 오는 부하를 줄이는 방식을 사용하게 됩니다. 

#LoadBalancer의 사용 시 흐름

LoadBalancer를 사용 시 회원이 자신의 정보를 조회 한다 했을 때, 교차로 응답을 보냅니다. 

먼저  8070 Port를 참조한 뒤, 다음에 똑같은 요청이 온다면 8071 Port로 보내게 됩니다. 사용자가 하나라면 별로 쓸모가 없겠지만, 동시에 다중접속을 하게 된다면, 포트 분산 작업은 필수가 됩니다.


효율적인 과부하 방지, 그러나 문제점.

하지만 문제점이 하나 있습니다. 일반적으로 가장 크게 나타나는 문제점은 DB와의 연동할때의 문제점이 드러납니다. 예시로 실습을 진행한 Ecommer-Application의 경우, 주문등록을 하면 H2-Database에 해당 주문 정보가 저장됩니다. 하하지만 LoadBalancer의 필요성이 느껴져 같은 서비스를 port를 다르게 해 실행시키면 DB의 위치정보가 바뀌게 됩니다. 그럼 서로 다른 DB를 참조하고 있지만, 응답에서는 교차로 둘다 연결되기 떄문에 어쩔때는 회원 로그인이 되고 어쩔때는 로그인이 안되는 이상한 상황이 벌어지게 됩니다.


그렇다면 어떻게?

당연히 개발자 분들은 손놓고 계시진 않았습니다. 이러한 문제점을 해결하기 위해서, Message Quing이라는 시스템이 존재합니다. 대표적으로 Rabbit MQ ApacheKafka가 있습니다. 이러한 MQ시스템을 이용하게 되면 일반적으로 아래와 같은 구조 서비스 동작하게 됩니다.

보시는 것처럼 Queuing 시스템이 하나의 중계기 처럼 두 서비스에서 발생하는 데이터를 하나로 묶어 하나의 DB에 저장하게 됩니다. 이러면 서로 다른 DB를 참조하는 문제를 해결 할 수 있는 거에요!! 정말 선조들은 대단한거같네요..

 

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함