《征途》服务器分布式设计理念介绍

来源:互联网 发布:建网站编程软件 编辑:程序博客网 时间:2024/04/28 06:29

《征途》服务器分布式设计理念介绍

 

一、 MMORPG特点   

    下面的所讲述的三个特点,给我们带来了性能问题,带来了挑战。我们最终形成的征途服务器分布式技术构架,是解决他们带来的问题,而不是绕过他们。

1. 实时的交互
    电子游戏的交互的实时性不言而喻,MMORPG则带来了更复杂的交互。无论是玩家与NPC还是玩家与玩家之间,当一个玩家发出指令,周围的玩家都应立即看到他做出的改变。玩家的忍受度基本都在200ms内。

2. 区域群集效应
    一般来讲MMORG都会有一个或者多个让玩家聚集的功能区,从软件开发角度讲这是业务的需求。
    对服务器带来的压力我们做一个简单的测算:
    每人做出1个事件的平均时间是T,并将结果发给可见范围内的玩家,在单位时间T内,服务器的复杂度是O(n+n2),n是可见范围内的玩家数量。换一个不严格的说法,就是当你有n个人群聚在一起,你的服务器将会少上n2-n的不群聚的人。

    所以区域群集效应对服务器性能带来的降低是巨大的。

3. 更多的人在一起做更多内容的交互
    跟MO游戏比较,MMO的游戏在一起交互的玩家大大增加。
    跟其他类型游戏比较,RPG的内容相对来说要很多。
    MMO和RPG元素放在一起,服务器要做的事情就是MMO的人数 x RPG的内容。

 

二、相对应带来的关键问题

1. 更多要处理的数据,更多要同步给用户的数据复杂度是O(n )。

2. 当用户聚集在一起,性能的下降是迅速的复杂度是O(n2)。这里的n不是总人数,而是聚集的人数。

 

三、要让多人在一起互动,服务器需要解决上述2大问题

   即游戏数据的处理及同步
    单台服务器处理能力有限,所以分布式服务器技术是很自然的解决方案。围绕上述两个核心问题,我们提出一些分布式服务器技术构架的具体解决方案。这些方案都是实际应用于征途服务器中。

a) 针对游戏数据处理
1. 将游戏世界按区域拆分到多个游戏服务器中,这些游戏服务器共同组建了一个整体的游戏世界,这些在一起的玩家可以很方便的互动。
2. 当然数据同步也被游戏服务器分散承担。
3. 带来的问题
3.1. 用户基本状态信息,比如是否登录,目前在那个服务器。
3.2. 解决办法是架设一个session 服务器。

b) 针对游戏数据同步
1. 为什么数据同步已经有负载了,还要针对数据同步进行负载均衡。
1.1. 我们要容纳更多的玩家。
1.2. 随着人数增加,人数高峰的到来,区域群集效应对性能影响突出。在实际情况中,总是某一个或几个区域聚集的人特别多。因此带来的性能问题,无法通过划分更细小的区域,增加游戏服务器来解决。
2. 另外从实际角度,我们也不能一味通过将游戏世界拆分成更多游戏服务器来解决。
2.1. 那会到导致服务器的浪费。
2.2. 从用户体验上讲也不好,毕竟经常从一个服务器跳转到另一个服务器让玩家感到麻烦。
2.3. 客户端经常重新连接也在一定程度上带来了不稳定因素和性能下降。
3. 所以增加了gateway服务器,放置在游戏服务器的前端,将同步数据的工作交给他。
4. 大致工作原理及效果
4.1. 玩家平均的链接到gateway服务器。
4.2. 游戏服务器将用户的位置同步到gateway服务器。
4.3. 理论上每台gateway的同步负载为原来游戏服务器负载的S2分之一(S是gateway服务器的数量)。

c) 当形成如此的构架后,诸多功能可以合理的分配到各个服务器
1. 比如gateway服务器增加
1.1. 数据包的整合,加密,压缩。
1.2. 数据包合法性,反外挂的检测。
1.3. 其他与游戏相关性不大,但是很必要的功能。
2. 比如session服务器增加
2.1. 工会功能。
2.2. 聊天转发。
2.3. 好友。
2.4. 其他非游戏区域性功能。

 

四、此种服务器分布式带来的问题和局限

    诸多问题和局限,导致运营成本和开发成本的增加,但是我们可以通过一些适当的手段规避或者减小这方面的风险。
1. 不太适合服务器人数少的区,灵活性不够,会造成浪费。虚拟化能解决此问题。
2. 服务器之间的数据同步增加,内耗较多。程序开发要做大量的优化工作。
3. 游戏服务器的复杂度增加,开发难度增大。做好封装,开发管理及对团队的培训。


五、游戏服务器分布式技术的发展趋势

1. 给玩家带来更好的用户体验,比如无缝体验,更大的世界。
2. 游戏业务的分布,将业务剥离做负载均衡,比如,聊天,NPC。
3. 云计算。

 

六、只有分布式是不够的
1. 良好的均衡技术构架是实现大容量游戏的前提,在实际开发中的设计和优化同样非常重要。
2. 游戏设计的优化,将游戏业务适当分散在不同的服务器。
3. 循环算法的优化,一切性能问题都在循环里。
4. 数据流量的优化,不管是服务器之间的流量,还是服务器和客户端的流量。
http://blog.sina.com.cn/s/blog_468655bf0100fvb1.html