기능적 분산 처리는 분산 처리를 할 수 있는 범위가 제한되어 있습니다. 여러분이 만드는 게임 서버가 하는 일을 기능 단위로 쪼개면, 무제한으로 쪼갤 수 있을까요? 아니죠. 어느 정도 쪼개고 나면 더 이상 못 쪼갭니다. 기능적 분산 처리에서 분산의 양은 기능을 쪼갠 만큼만 할 수 있습니다.
또 기능적 분산 처리는 수평 분산 처리보다 분산 효율성이 떨어집니다. 여러분 게임이 기능 A·B·C로 구성되어 있고, 기능 A·B·C를 각각 담당하는 서버 A·B·C가 있다고 합시다. 서버 B만 과부하가 걸렸다면 어떻게 해야 할까요? 서버 A와 서버 C에 서버 B가 하는 역할을 분배하지 못합니다.
따라서 기능적 분산 처리는 최후 수단입니다. 데이터 기반 분산 처리, 즉 수평 분산 처리를 할 수 있는 방법을 최대한 찾아본 후 도저히 안 되면 기능적 분산 처리를 해야 합니다. 분산 처리는 서버 장애로 발생하는 악영향을 줄일 때도 효과적입니다. 서버에 과부하 분산과 상관없이 말이죠.
채팅 서버와 전투 처리 서버를 분리했다고 칩시다. 이때 전투 처리 서버에 과부하가 걸려도 채팅 기능은 원활하게 작동할 것입니다. 전투 처리 서버가 죽었을 경우 플레이어들은 전투는 불가능해도 최소한 플레이어끼리 채팅은 가능할 것입니다.
상황에 따라 기능적 분산 처리(수직 분산 처리)와 데이터 단위 분산 처리(수평 분산 처리)를 혼용해도 됩니다.