Vert.x 3.0 cluster에서 backup-count의 쓰임새

Vert.x 3.0 cluster는 Hazlecast를 사용해 분산 자료구조를 쓴다.

분산 자료구조에는 map, queue, semaphore, ...등이 있다.

cluster.xml에 보면 각 자료구조에 backup-count라는 태그가 존재하며, 

타 맴버에 몇 개나 복사를 해둘지 설정하는 항목이다.


예를 들어, 서버 두 대가 있다고 치고,

그 중 한 대가 죽었다 살아났다고 해보자.


backup-count가 0일 때,

죽었다 살아난 서버는 그동안 분산 자료구조를 이용해 저장해 두었던 데이터는 사라진 상태.


backup-count가 1일 때,

죽었다 살아나도 다른 서버에 복사본이 있어, 데이터가 유지된다.


backup-count 최대 값은 6이며, 메모리 사용량에 주의하라고 공식홈페이지에 써있다.


eb.consumer와 eb.localConsumer가 있으니, 로컬에만 사용할 이벤트는 localConsumer를 사용하자.

backup 카운트 영향을 받지 않아 성능상 향상을 얻을 수 있다. 

구분없이 사용할 경우 이벤트를 한 번은 받고 또 한 번은 못 받는 상황이 발생한다.

상황은 이랬다.

클러스터로 서버2대 를 실행.

서버는 io vert 2개 worker vert 2개를 실행하여, io vert에서 클라 연결을 담당, worker vert는 간단한 로직처리

io vert는 클라이언트 연결과 끊김 이벤트를 worker vert에 전달하도록 구현.

스트레스 테스트 클라이언트를 만들어, 미친듯이 날리던 중, 

서버를 강제 종료했을 때(전부 날린 후, 종료 한 후에는 정상적으로 동작)

consumer로 등록한 이벤트는 서버가 꺼지더라도 백업되어 있는 상태가 된다. 

이후 서버가 켜질 때 다시 등록되어. 두 개의 이벤트가 등록된다.

이런 상황에서 테스트를 해보면, 한 번은 이전에 등록했던 이벤트에 보내고, 그 다음 번은 방금 등록했던 이벤트에 보내게 되어 이벤트를 받고 못 받는 상황이 생기게 된다.