本周阅读了老师推荐阅读的公众号:架构师中的推文《游戏服务器的架构演进(完整版)》,感想如下:
王者荣耀,年轻人必玩的两个游戏之一,游戏是类dota手游,游戏中的玩法以竞技对战为主,玩家之间进行1V1、3V3、5V5等多种方式的PVP对战,还可以参加游戏的冒险模式,进行PVE的闯关模式,在满足条件后可以参加游戏排位赛等。
其峰值大约平均每天在线人数将近300万人,而日活跃量高达750万人,这就意味这王者荣耀的服务器需要同时支持这么多人进行对战,进入游戏时,我们发现,需要进行选择游戏大区,QQ区还是微信区,IOS端,还是安卓端,通过这样几次分类,已经使得服务器尽量变得均衡,而进入游戏选择区服时,我们发现,基本每个区都有200个以上的具体服务器,这就使得服务器变得更加均衡。
众所周知,游戏服务器端,是一个会长期运行的程序,并且它还要服务于多个不定时,不定点的网络请求。所以这类软件的特点是要非常关注稳定性和性能。这类程序如果需要多个协作来提高承载能力,则还要关注部署和扩容的便利性;同时,还需要考虑如何实现某种程度容灾需求。
那么服务器端架构设计需要注重些什么呢?文章中提到的,CPU、内存、网卡的设计,文章中提到:
内存架构:主要决定服务器如何使用内存,以最大化利用服务器端内存来提高承载量,降低服务延迟。
逻辑架构:设计如何使用进程、线程、协程这些对于CPU调度的方案。选择同步、异步等不同的编程模型,以提高服务器的稳定性和承载量。可以分区分服,也可以采用世界服的方式,将相同功能模块划分到不同的服务器来处理。
通信模式:决定使用何种方式通讯。基于游戏类型不同采用不同的通信模式,比如http,tcp,udp等。
首先,内存不是我们考虑的主要问题,因为现在我们的所有设备,都处于内存过剩状态,其次,通信方式也不是我们应该考虑的问题,4G网络,哦不,哪怕是3G网络,已经足以支持大部分网络游戏的正常运行,我们需要考虑的还是服务器端的逻辑架构。
以前我们的游戏,第一代卡牌类休闲游戏,由于是弱交互游戏,那么对流量的需求不是很大。再到第二代网游服务器,电脑与网络的普及使得我们越来越多的人接触到了互联网,而互联网游戏也因此得到了发展,此时的服务器架构主要采用而是分服模型。
而分服虽然可以解决服务器扩展的瓶颈,但单台服务器在以前单线程的方式来运行,没办法充分利用服务器资源,遇到跨服战便无法进行。
此时第三代服务器端架构应运而出,一般地,我们可以将一个组内的服务器简单地分成两类:场景相关的(如:行走、战斗等)以及场景不相关的(如:公会聊天、不受区域限制的贸易等)。经常可以见到的一种方案是:gate服务器、场景服务器、非场景服务器、聊天管理器、AI服务器以及数据库代理服务器。
通过这种类型服务器架构,因为压力分散了,性能会有明显提升,负载也更大了,包括目前一些大型的 MMORPG游戏就是采用此架构。
以上便是本篇文章基本所介绍的游戏服务器端架构的发展历程,我觉得自己收获很大,阅读了很多知识,基本对服务器端的架构发展有了了解,深深感觉到自己的知识远远不够。会更加努力的学习。