网游服务器是一个会运行很长时间的程序,它还服务于一些不规则和不确定的网络请求。因此这种软件的特点就是非常注重稳定性和性能。如果这类方案需求多方协作提高承载能力,也要注意部署和扩展的便利性;同时要考虑如何达到一定程度的容灾。由于多过程的合作,启发的复杂性也带来了,这也是值得关注的问题。
功能性约束,是架构设计的决定因素。根据网游领域的功能特点,对服务器端系统有以下特殊要求:
1.用于存储网游数据和玩家数据。
2.对玩家数据进行数据广播和同步
3.在服务器上操作部分网游逻辑,做好验证工作,防止外挂。
针对上述需求特点,在服务器方面,我们经常关注计算机内存和CPU的使用,以便在特定的业务代码下尽可能满足装载量和延迟的需求。很基本的做法就是“空间换时间”,用各种缓存的方式来以求得CPU和内存空间上的平衡。
在CPU和内存之上,是另外一个约束因素:网卡。网络带宽直接限制了服务器的处理能力,所以网游服务器架构也必定要考虑这个因素。
在网游服务器端体系结构中,三个主要部分,即如何使用CPU,内存,网卡设计:
1.内存架构:主要决定服务器如何使用内存,从而很大限度的利用服务器端内存,增家负载能力,减少服务延迟。
2.逻辑结构:设计如何使用过程、线程、协程等CPU计划。为了提高服务器的稳定性和装载量,选择同步、异步等不同的编程模型。同一个功能模块可以按照分区或者按照世界服务划分到不同的服务器进行处理。
3.通信模式:决定使用何种方式通讯。不同的通信模式基于不同的网游类型,如http,tcp,udp等。