샤드를 줄일 때는 사라질 샤드에 대한 레코드 이동을 해야 합니다. 물론 매핑 DB에서도 변경을 가해 주어야 합니다. 예를 들어 John이 샤드 1에 있었는데 샤드 1이 사라집니다. 그러면 John을 샤드 2로 옮기고, 매핑 DB에서 “John은 샤드 1에 있다.”를 “샤드 2에 있다.”로 바꾸어야 합니다.
어차피 레코드 이동과 매핑 DB 변경 때문에 DB가 한동안 블로킹되는 것은 어쩔 수 없습니다. 그러나 너무 걱정하지는 맙시다. 실제로 게임 서비스를 할 때, 사용자 수 폭증으로 샤드 개수를 늘려야 할 때는 신속하게 해야 하지만, 사용자 수 급감으로 샤드 개수를 줄일 때는 신속하게 하지 않아도 됩니다. 천천히 샤드를 줄이면서 레코드를 이동시켜 줍시다.
이렇게 만들면 매핑 DB는 사용자가 매우 많을 때 확장성의 병목이 될 수 있습니다. 다른 모든 서버 기기가 정상적으로 작동하고 있는데, 정작 매핑 DB에 과부하가 걸리면 서비스는 불안정해 보이겠죠?
▲ 그림 10-18 정작 매핑 DB에 과부하가 걸리면 안 됨