返回介绍

最佳实践 97:了解大型端游的技术架构

发布于 2025-04-20 17:44:53 字数 4016 浏览 0 评论 0 收藏

服务器架构设计

根据网络游戏的规模和设计的不同,每组服务器中服务器种类和数量是不尽相同的。本文设计出的带网关服务器的服务器组架构如图 20-1 所示。

图 20-1 大型端游的架构图

本文将服务器设计成带网关服务器的架构,虽然加大了服务器的设计复杂度,但却带来了以下几点好处。

- 作为网络通信的中转站,负责维护将内网和外网隔离开,使外部无法直接访问内部服务器,保障内网服务器的安全,一定程度上较少外挂的攻击。

- 网关服务器负责解析数据包、加解密、超时处理和一定逻辑处理,这样可以提前过滤掉错误包和非法数据包。

- 客户端程序只需建立与网关服务器的连接即可进入游戏,无须与其他游戏服务器同时建立多条连接,节省了客户端和服务器程序的网络资源开销。

- 在玩家跳转服务器时,不需要断开与网关服务器的连接。玩家数据在不同游戏服务器间的切换是内网切换,切换工作瞬间完成,玩家几乎察觉不到,这保证了游戏的流畅性和良好的用户体验。

在享受网关服务器带来上述好处的同时,还需注意以下可能导致负面效果的两个情况。

- 网关服务器在高负载情况下成为通信瓶颈。

- 网关的单节点故障导致整组服务器无法对外提供服务。

上述两个问题可以采用“多网关”技术加以解决。

顾名思义,“多网关”就是同时存在多个网关服务器,比如一组服务器可以配置 3 台 GameGate。当负载较大时,可以通过增加网关服务器来增加网关的总体通信流量服务能力,当一台网关服务器宕机时,它只会影响连接到本服务器的客户端,其它客户端不会受到任何影响。

从图 20-1 的服务器架构图可以看出,一般服务器包括 LoginGate、LoginServer、GameGate、GameServer、DBServer 等多种服务器。LoginGate 和 GameGate 就是网关服务器,一般一组服务器会配置 3 台或者多台 GameGate,因为稳定性对于网络游戏运营来说是至关重要的,而服务器宕机等突发事件是游戏运营中所面临的潜在风险,配置多台服务器可以有效地降低单个服务器宕机带来的风险。另外,配置多台网关服务器也是进行负载均衡的有效手段之一。

Load Balancer 支持 TCP 层调度。在计算领域,负载均衡是指把工作压力分发到多个计算资源,例如,计算机、计算机集群、网络连接、中央处理器或者硬盘阵列等。负载均衡的目的是,优化资源使用效率、最大化吞吐量、最小化响应时间、避免某个计算资源过载等。使用多个带负载均衡的组件通过增加冗余度来代替一个单一的组件,可以增加可靠性和可用性。负载均衡通常包括专用的软件或者硬件,例如多层交换机或者域名调度系统等。常用的商业硬件如 F5 LTM、Citrix NetScaler 等以及开源的技术方案 LVS、HAProxy 等都可以实现。在调度的基础上,同时增加对 Server Group 中服务器的监控及健康检查机制,如发现基于某些特定配置的监控选项失败,则从调度队列中删除,以屏蔽访问。

负载均衡建立在现有网络结构之上,它提供一种廉价有效透明的方法扩展网络设备和服务器的带宽,增加吞吐量,加强网络数据处理能力,提高网络的灵活性和可用性。需要说明的是,负载均衡设备不是基础网络设备,而是一种性能优化设备。对于网络应用而言,并不是一开始就需要负载均衡,当网络应用的访问量不断增长,单个处理单元无法满足负载需求时,网络应用流量将要出现瓶颈时,负载均衡才会起到作用。

负载均衡有两方面的含义:首先,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高,这就是常说的集群(Clustering)技术,例如 Hadoop MapReduce 集群等。集群第二层含义就是:大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间,这主要针对 Web 服务器、FTP 服务器、企业关键应用服务器等网络应用。

通常,负载均衡会根据网络的不同层次(网络 7 层)来划分。其中,第二层的负载均衡指将多条物理链路当作一条单一的聚合逻辑链路使用,这就是链路聚合(Trunking)技术,它不是一种独立的设备,而是交换机等网络设备的常用技术。现代负载均衡技术通常操作于网络的第四层或第七层,这是针对网络应用的负载均衡技术,它完全脱离于交换机、服务器而成为独立的技术设备。

服务器角色说明及通信原理

下面将对各种服务器的主要功能和彼此之间的数据交互做详细解释。

- LoginGate:主要负责在玩家登录时维护客户端与 LoginServer 之间的网络连接与通信,对 LoginServer 和客户端的通信数据进行加解密、校验。

- LoginServer:主要功能是验证玩家的账号是否合法,只有通过验证的账号才能登录游戏。从架构图可以看出,DBServer 和 GameServer 会连接 LoginServer。玩家登录基本流程是,客户端发送账号和密码到 LoginServer 验证,如果验证通过,LoginServer 会给玩家分配一个 SessionKey,LoginServer 会把这个 SessionKey 发送给客户端、DBServer 和 GameServer,在后续的选择角色以后进入游戏过程中,DBServer 和 GameServer 将验证 SessionKey 合法性,如果和客户端携带的 SessionKey 不一致,将无法成功获取到角色或者进入游戏。

- GameGate(GG):主要负责在用户游戏过程中维持 GS 与客户端之间的网络连接和通信,对 GS 和客户端的通信数据进行加解密和校验,对客户端发往 GS 的用户数据进行解析,过滤错误包,对客户端发来的一些协议作简单的逻辑处理,其中包括游戏逻辑中的一些超时判断。在用户选择角色过程中负责维持 DBServer 与客户端之间的网络连接和通信,对 DBServer 和客户端的通信数据进行加解密和校验,对客户端发往 DBServer 的用户数据做简单的分析。

- GameServer(GS):主要负责游戏逻辑处理。网络游戏有庞大世界观背景,绚丽激烈的阵营对抗以及完备的装备和技能体系。目前,网络游戏主要包括任务系统、声望系统、玩家 PK、宠物系统、摆摊系统、行会系统、排名系统、副本系统、生产系统和宝石系统等。从软件架构角度来看,这些系统可以看成 GS 的子系统或模块,它们共同处理整个游戏世界逻辑的运算。游戏逻辑包括角色进入与退出游戏、跳 GS 以及各种逻辑动作(比如行走、跑动、说话和攻击等)。由于整个游戏世界有许多游戏场景,在该架构中一组服务器有 3 台 GS 共同负责游戏逻辑处理,每台游戏服务器负责一部分地图的处理,这样不仅降低了单台服务器的负载,而且降低了 GS 宕机带来的风险。玩家角色信息里会保持玩家上次退出游戏时的地图编号和所在 GS 编号,这样玩家再次登录时,会进入到上次退出时的 GS。上面提到过,在验证账号之后,LoginServer 会把这个 SessionKey 发给 GS,当玩家选择角色登录 GS 时,会把 SessionKey 一起发给 GS,这时 GS 会验证 SessionKey 是否与其保存的相一致,不一致的话 GS 会拒绝玩家进入游戏。

- DBServer:主要的功能是缓存玩家角色数据,保证角色数据能快速地读取和保存。由于角色数据量是比较大的,包括玩家的等级、经验、生命值、魔法值、装备、技能、好友、公会等。如果每次 GS 获取角色数据都去读数据库,效率必然非常低下,用 DBServer 缓存角色数据之后,极大地提高了数据请求的响应速度。LoginServer 会在玩家选组时把 SessionKey 发给 DBServer,当玩家发送获取角色信息协议时会带上这个 SessionKey,如果跟 DBServer 保存的 SessionKey 不一致,则 DBServer 会认为玩家不是合法用户,获取角色协议将会失败。另外,玩家选取角色正式进入游戏时,GS 会给 DBServer 发送携带 SessionKey 的获取角色信息协议,这时 DBServer 同样会验证 SessionKey 的合法性。总之,只有客户端、DBServer 和 GS 所保存的 SessionKey 一致,才能保证协议收到成功反馈。与 DBServer 通信的服务器主要有 GG,GS 和 LoginServer,DBServer 与 GG 交互的协议主要包括列角色、创建角色、删除角色、恢复角色等,DBServer 与 GS 交互的协议包括读取角色数据、保存角色数据和跳服务器等,DBServer 与 LoginServer 交互的协议主要是用户登录协议,这时候会给 DBServer 发送 SessionKey。

网络游戏服务器的架构设计已经成为当前网络游戏研究领域的热点,因为高性能服务器架构设计是一款网络游戏成功的关键。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。