读《游戏服务器的架构演进(完整版)》有感

发布于:2021-10-26 04:31:32

最*我经常听身边的同学吐槽王者荣耀的英雄更新之后如何如何之丑,这周呢,我就想了解一下游戏服务器的架构演进。


游戏服务器端,是一个会长期运行的程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类软件的特点是要非常关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。由于多进程协同工作,也带来了开发的复杂度,这也是需要关注的问题。


功能约束,是架构设计决定性因素。基于游戏领域的功能特征,对服务器端系统来说,有以下几个特殊的需求:


1.对于游戏数据和玩家数据的存储


2.对玩家数据进行数据广播和同步


3.


把一部分游戏逻辑在服务器上运算,做好验证,防止外挂。


针对以上的需求特征,在服务器端,我们往往会关注对电脑内存和CPU的使用,以求在特定业务代码下,能尽量满足承载量和响应延迟的需求。最基本的做法就是“空间换时间”,用各种缓存的方式来以求得CPU和内存空间上的*衡。


在CPU和内存之上,是另外一个约束因素:网卡。网络带宽直接限制了服务器的处理能力,所以游戏服务器架构也必定要考虑这个因素。


对于游戏服务端架构,最重要的三个部分就是,如何使用CPU、内存、网卡的设计:


内存架构:主要决定服务器如何使用内存,以最大化利用服务器端内存来提高承载量,降低服务延迟。


逻辑架构:设计如何使用进程、线程、协程这些对于CPU调度的方案。选择同步、异步等不同的编程模型,以提高服务器的稳定性和承载量。可以分区分服,也可以采用世界服的方式,将相同功能模块划分到不同的服务器来处理。


通信模式:决定使用何种方式通讯。基于游戏类型不同采用不同的通信模式,比如http,tcp,udp等。


卡牌等休闲游戏弱交互游戏:服务器基于游戏类型不同,所采用的架构也有所不同,我们先讲一下简单的模型,采用http通信模式架构的服务器:


长链接游戏服务器:长连接游戏和弱联网游戏不同的地方在于,长连接中,玩家是有状态的,服务器可以时时和client交互,数据的传送,不像弱联网一般每次都需要重新创建一个连接,消息传送的频率以及速度上都快于弱联网游戏。


之前的网游服务器都是分区分服,玩家都被划分在不同的服务器上,每台服务器运行的逻辑相同,玩家不能在不同服务器之间交互。想要更多的玩家在同一世界,保持玩家的活跃度,于是就有了世界服模型了。世界服类型也有以下3种演化:1.网关部分分离成单端的gate服务器,DB部分分离为DB服务器,把网络功能单独提取出来,让用户统一去连接一个网关服务器,再有网关服务器转发数据到后端游戏服务器。而游戏服务器之间数据交换也统一连接到网管进行交换。所有有DB交互的,都连接到DB服务器来代理处理。2. 有了一类型的经验,后续肯定是拆分的越细,性能越好,就类似现在微服务,每个相同的模块分布到一台服务器处理,多组服务器集群共同组成一个游戏服务端。魔兽世界的中无缝地图,想必大家印象深刻,整个世界的移动没有像以往的游戏一样,在切换场景的时候需要loading等待,而是直接行走过去,体验流畅。


本文参考文献:wier,《游戏服务器的架构演进》



转载于:https://www.cnblogs.com/sunshine-z/p/11054863.html






相关资源:王者荣耀游戏源码

相关推荐

最新更新

猜你喜欢