9.8 기능적 분산 처리
지금까지 분산 처리에서 서버가 둘 이상 관여하는 것을 알아보았습니다. 그런데 가끔은 이러한 수평 분산 처리를 하지 못하는 경우도 있습니다. 동기 분산 처리를 하려고 했더니, 암달의 법칙이 너무 심하게 작용합니다. 비동기 분산 처리를 하려고 했더니, 요청과 응답을 받아야 합니다. 데이터 복제에 기반을 둔 분산 처리를 하려고 했더니, 데이터 일관성이 깨져서 안 됩니다. 이러한 최악의 상황이 있을 수 있습니다. 그러나 안타깝게도 서버에서 과부하가 발생합니다. 어떻게 해야 할까요?
이때 생각해 볼 수 있는 것이 기능적 분산 처리 혹은 수직 분산 처리입니다. 수직 분산 처리는 데이터 단위 분산 처리, 즉 수평 분산 처리를 할 수 없을 때 선택할 수 있는 대안입니다. 대표적인 예가 경매장을 담당하는 처리입니다.
경매장에서는 플레이어 간 입찰 경쟁과 낙찰 과정이 원자성을 가지고 작동해야 합니다. 낙찰을 결정하기 직전에 입찰을 집어넣은 플레이어가 여러 명이라고 가정합시다. 어찌 되었든 간에 가장 최고 금액을 입찰한 플레이어 한 명만 골라서 낙찰을 해야 합니다. 여기에는 어떤 오차도 허락되지 않습니다.
이때는 게임 서버에서 경매장을 담당하는 처리를 분리하고, 경매장 처리만 담당하는 서버를 개발하면 됩니다. 그러면 그림 9-22와 같이 경매장 서버가 따로 존재하겠지요.
▲ 그림 9-22 경매장 처리만 담당하는 서버와 나머지 서버