摘要:
很多网络游戏都是典型的分布式系统,系统的可用性、伸缩性以及中间的任务并行度都是困难的课题。因为需要支持从几千到几百万游戏玩家同时在线,同时还要处理各种复杂的游戏逻辑以提高玩家的用户体验,从而增加玩家的黏合度。这就要求系统的框架具有高可用、强伸缩性、可扩展性以及可开发性。由于游戏从推出时并无法预计游戏的玩家数量,所有的网络游戏都会面临伸缩性的问题。系统需要根据用户数量的增长而增加处理能力,在游戏后期玩家兴趣衰退而降低处理能力。虽然一般游戏都会在特定时间做维护,但是7*24依旧是对系统的要求,高可用性依旧是系统重要的质量属性。当前芯片的架构趋势从不断增加的时钟速度转变为多核,新芯片的设计目标是需要同时做多件事情,为了适应芯片的改变系统需要通过并发来实现总体性能的增长。分布式系统的一致性问题对于大多数开发者来说也是难题,这最好由架构来解决。本文的课题是设计一个分布式架构,编程模型是反应式的,也是一种新型的MMORPG的分布式系统架构,目标是对实际的开发者尽可能隐藏分布式计算,分布式系统中的一致性问题,同时还保证系统的高可用性以及伸缩性,使得最终开发者可以集中精力完成业务逻辑而非底层的技术细节,创新点如下:(1)优化了网络通信模块,改变了传统网络库中单IO线程的方式,实现了多核下的Reactor模型,即多IO线程配合线程池的模式。对于应用层缓存的进行了优化,减少系统调用以及利用了临时栈空间,这样能够提高系统的网络吞吐量以及降低延迟。(2)为了提高系统的可用性引入了2个开源组件ZooKeeper、Redis,ZooKeeper解决了分布式系统中的命名、分布式锁、负载均衡、协调等一致性问题,Redis作为内存数据库加载系统中的热点数据,来缓解传统磁盘数据库的压力,这样的改进增加了系统的吞吐以及降低延迟,由于Redis是以集群的方式部署在系统中,也保证了系统的可用性以及性能。(3)架构中提到的任务服务,是典型的master/slave结构,任务可以在不同节点移动,从而实现负载均衡,由于slave可以动态的添加,由master来监视slave节点并且实现简单的负载均衡策略,这样就保证了系统的伸缩性。(4)数据服务为整个系统提供数据服务,属于分布式数据架构,是逻辑集中的实体,在集群中多台机器上进行数据分区,通过对多台机器上不同数据分区的控制,就可以实现负载均衡以及伸缩性。在第五章节本文对方案中的关键组件进行了性能测试以及针对架构进行了伸缩性的测试。伸缩性测试包括了增加业务功能以及增加相同任务节点后负载均衡的验证以及系统可用性的验证。最后对于整体方案进行了总结和展望以及对之后一些可以改进的地方做了说明。
展开