经典游戏服务器端架构概述(上)

架构的分析模型

一、 讨论的背景

现代电子游戏,基本上都会使用一定的网络功能。从验证正版,到多人交互等等,都需要架设一些专用的服务器,以及编写在服务器上的程序。因此,游戏服务器端软件的架构,本质上也是游戏服务器这个特定领域的软件架构。

软件架构的分析,可以通过不同的层面入手。比较经典的软件架构描述,包含了以下几种架构:

  • 运行时架构——这种架构关心如何解决运行效率问题,通常以程序进程图、数据流图为表达方式。在大多数开发团队的架构设计文档中,都会包含运行时架构,说明这是一种非常重要的设计方面。这种架构也会显著的影响软件代码的开发效率和部署效率。本文主要讨论的是这种架构。
  • 逻辑架构——这种架构关心软件代码之间的关系,主要目的是为了提高软件应对需求变更的便利性。人们往往会以类图、模块图来表达这种架构。这种架构设计在需要长期运营和重用性高的项目中,有至关重要的作用。因为软件的可扩展性和可重用度基本是由这个方面的设计决定的。特别是在游戏领域,需求变更的频繁程度,在多个互联网产业领域里可以说是最高的。本文会涉及一部分这种架构的内容,但不是本文的讨论重点。
  • 物理架构——关心软件如何部署,以机房、服务器、网络设备为主要描述对象。
  • 数据架构——关心软件涉及的数据结构的设计,对于数据分析挖掘,多系统协作有较大的意义。
  • 开发架构——关心软件开发库之间的关系,以及版本管理、开发工具、编译构建的设计,主要为了提高多人协作开发,以及复杂软件库引用的开发效率。现在流行的集成构建系统就是一种开发架构的理论。

二、 游戏服务器架构的要素

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

功能约束,是架构设计决定性因素。一个万能的架构,必定是无能的架构。一个优秀的架构,则是正好把握了对应业务领域的核心功能产生的。游戏领域的功能特征,于服务器端系统来说,非常明显的表现为几个功能的需求:

  • 对于游戏数据和玩家数据的存储
  • 对玩家客户端进行数据广播
  • 把一部分游戏逻辑在服务器上运算,便于游戏更新内容,以及防止外挂。

针对以上的需求特征,在服务器端软件开发上,我们往往会关注软件对电脑内存和CPU的使用,以求在特定业务代码下,能尽量满足承载量和响应延迟的需求。最基本的做法就是“时空转换”,用各种缓存的方式来开发程序,以求在CPU时间和内存空间上取得合适的平衡。在CPU和内存之上,是另外一个约束因素:网卡。网络带宽直接限制了服务器的处理能力,所以游戏服务器架构也必定要考虑这个因素。

对于游戏服务器架构设计来说,最重要的是利用游戏产品的需求约束,从而优化出对此特定功能最合适的“时-空”架构。并且最小化对网络带宽的占用。

[图-游戏服务器的分析模型]

三、 核心的三个架构

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

  • 内存架构:主要决定服务器如何使用内存,以保证尽量少的内存泄漏的可能,以及最大化利用服务器端内存来提高承载量,降低服务延迟。
  • 调度架构:设计如何使用进程、线程、协程这些对于CPU调度的方案。选择同步、异步等不同的编程模型,以提高服务器的稳定性和承载量。同时也要考虑对于开发带来的复杂度问题。现在出现的虚拟化技术,如虚拟机、docker、云服务器等,都为调度架构提供了更多的选择。
  • 通信模式:决定使用何种方式通讯。网络通讯包含有传输层的选择,如TCP/UDP;据表达层的选择,如定义协议;以及应用层的接口设计,如消息队列、事件分发、远程调用等。

本文的讨论,也主要是集中于对以上三个架构的分析。

四、 游戏服务器模型的进化历程

最早的游戏服务器是比较简单的,如UO《网络创世纪》的服务端一张3.5寸软盘就能存下。基本上只是一个广播和存储文件的服务器程序。后来由于国内的外挂、盗版流行,各游戏厂商开始以MUD为模型,建立主要运行逻辑在服务器端的架构。这种架构在MMORPG类产品的不断更新中发扬光大,从而出现了以地图、视野等分布要素设计的分布式游戏服务器。而在另外一个领域,休闲游戏,天然的需要集中超高的在线用户,所以全区型架构开始出现。现代的游戏服务器架构,基本上都希望能结合承载量和扩展性的有点来设计,从而形成了更加丰富多样的形态。

本文的讨论主要是选取这些比较典型的游戏服务器模型,分析其底层各种选择的优点和缺点,希望能探讨出更具广泛性,更高开发效率的服务器模型。

下篇将阐述分服模型、全服分线模型、全服全线模型,敬请关注。

如果你觉得文章不错,欢迎转发到朋友圈(拒绝任何形式的转载),也欢迎关注微信公号“韩大(ID:handa1740168)”。

原文发布于微信公众号 - 韩大(handa1740168)

原文发表时间:2015-12-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏跨界架构师

[译文]Domain Driven Design Reference(五)—— 为战略设计的上下文映射

  两个组之间的关系是“上游”小组的行为影响“下游”小组的项目成功。但下游的行为并不会显著影响上游项目。(例如,如果两个城市沿着同一条河流,上游城市的污染主要影...

742
来自专栏SDNLAB

虚拟网络中可视性平面提高性能和安全性

软件定义网络(SDN)和网络功能虚拟化(NFV)可以带来很多好处,但增加网络抽象层是有代价的:对物理层链路的流量的可视性。 同时,越来越快的网络也加剧了这一挑战...

3315
来自专栏ATYUN订阅号

【框架】谷歌开源发布OpenCensus:一个统计数据收集和分布式跟踪框架

昨天谷歌发布了OpenCensus,这是一个厂商中立的开放源码库,用于度量收集和跟踪。OpenCensus的构建是为了增加最小的开销,并部署在整个团队中,特别是...

3168
来自专栏极乐技术社区

干货 | 小程序商城开发必读指南!

商城开发指南 ? ? 微信小程序商城模块 | 链接 使用zanui开发小程序微商城(模板组件的开发规范)| 链接 ecshop商城开发:用户信息的获取和缓存...

1K5
来自专栏携程技术中心

干货 | 每天TB级数据处理,携程大数据高并发应用架构涅槃

互联网二次革命的移动互联网时代,如何吸引用户、留住用户并深入挖掘用户价值,在激烈的竞争中脱颖而出,是各大电商的重要课题。通过各类大数据对用户进行研究,以数据驱动...

6377
来自专栏ThoughtWorks

敏捷团队需要专职QA么?|洞见

敏捷QA对职业发展的担忧 最近和组内的QA聊起以后的职业发展,发现一个有意思的事情,有说想转BA的,有说想转开发的,有说想转型作PM的,还有想以后往咨询方向发展...

3497
来自专栏腾讯技术工程官方号的专栏

大数据时代数据获取

本文作者:陈宏武,2013年华中科技大学毕业,之前从事搜搜网页搜索的下载调度,数据质量优化工作。目前在内部搜索平台部外站数据组从事网络爬虫、下载调度、页面抽取及...

3317
来自专栏互联网数据官iCDO

Facebook广告的15种优化方法

译者:吕东昊 审校:董梁 本文长度为4359字,预估阅读时间8分钟。 我们今天要向大家介绍的是Facebook广告的15种优化方法 Facebook广告对您来...

6584
来自专栏程序员互动联盟

微信为啥能同时支持这么多人在线?

微信——腾讯战略级产品,创造移动互联网增速记录,10个月5000万手机用户,433天之内完成用户数从零到一亿的增长过程,千万级用户同时在线,摇一摇每天次数过亿....

4924
来自专栏云计算D1net

移动云应用的开发与管理

云计算与移动性这两大技术的交叉必然是炙热异常的,而这也是应用程序开发人员和规划人员所面临的一大挑战。因为移动应用程序更具自发性和个性化,所以它们成为了云计算支持...

44810

扫码关注云+社区

领取腾讯云代金券