集群化服务器

     在基于集群化服务器的游戏中,游戏程序员需要解决如何在服务器间分配客户端以及在服务器间交流信息。

     集群化服务器的目的是减少每个服务器需要处理的客户端数量。当每台服务器处理更少的玩家时,意味着更少的客户端与服务器直接相连;仅对在这台服务器上的玩家进行操作。

    比如说,如果有100个玩家,随机地将这些客户端分配给2台服务器,每台服务器有50个人。当一个客户端将其移动的消息发送给其所属的服务器时,为了保证所有客户端的一致性,服务器需要将客户端更新的消息发送给所有的客户端,包括不属于它服务范围的客户端。这时,服务器集群化的意义就会弱化,因为服务器没有减少和玩家交流的信息量。

      解决这个问题的一个方法就是把空间划分的概念引入到服务器层次。每台服务器只处理相关区域中的客户端,位置更新的消息只需要发送给自己所属的客户端。其结果是,每台服务器需要处理的客户端数目减少,同时网络带宽的利用率也得以改善,因为只发送相关的信息使网络需要传送包的数量大大减少。

    采用这种集群服务器的方法的前提是游戏场景剖分导致客户端对应的玩家在游戏场景中分布均匀,此时每台服务器将处理数目相同的客户端。如果在某一刻,大量的客户端集中到一个服务器,就会产生问题。解决方法是自适应剖分,如BSP树、四叉树和八叉树。然而,这种剖分始终是一种与处理方法,无法解决场景实时变化带来的问题。如图所示,场景剖分技术产生了均匀的角色。在某一时刻,一个新的任务使得角色重新分布,造成某个服务器上聚集了大量的角色,这种问题又被称作Braveheart问题。

9`2E]OK7MA6BTAE$)E}GBRW

采用动态分配服务器的方法可以解决Braveheart问题。当一个区域玩家数量增加时,服务器可以动态加入到这个区域中,以减少每台服务器负载的玩家数量。当玩家数量减少时,服务器可以动态脱离这个区域。这其中又可以采用两种方式:
      一种是调整服务器负责区域的大小,使得服务器负载大致相同的客户端数量。当区域中的客户端数量增加时,另外区域的客户端数量会相应减少;

        另外一种方法是维护一组可交换服务器,这些服务器就好像是战争中所使用的战略预备队。当一台服务器中的用户数量增加到不可容忍的程度时,将可交换服务器加入到这个区域,以减轻服务器的负担。采用这种方法,游戏程序员只需要提供足够的可交换服务器就可以动态改变游戏世界的规模。服务器会自动分配玩家,使服务器保持动态平衡,当然这种技术的实现也是相当复杂的。

posted @ 2011-05-19 17:16  红脸书生  阅读(3495)  评论(1编辑  收藏  举报