用通俗的方法来描述一个好的服务端架构,最基础也是最重要的就两点: 支持百万玩家同时在线,不出问题 。这两点也就分别对应了高并发和高可用。
这篇文章系统的介绍游戏服务端中的高并发和高可用。
高并发和高可用是一个相辅相成的工作,当我们支持百万玩家同时在线时却无法保证服务器的稳定可用,那高并发支持就无从谈起;而如果当玩家数量较多时服务器就常常出问题,那也不能称为高可用。
一、水平扩展
水平扩展是高并发和高可用的基础,通过支持水平扩展,我们理论上可以通过增加机器获得无限的承载上限,从而支持高并发;在此基础上,若某个进程出现异常,其他进程可以替代其提供服务,从而实现了高可用。
以下图为例,对于不支持水平扩展的架构,游戏服务器中只有一个战斗进程为所有的玩家提供战斗服务,这里存在两个问题:1.一个进程最多只能使用一个一台机器的计算资源,存在性能上限。2.若这个进程或者所在机器/网络发生异常,那么整个系统就不可用了。
不支持水平扩展
水平扩展有两种常见的实现模型:
- 大厅服和所有的战斗进程进行全连接,需要访问战斗服务时去管理器中查询服务所在的进程地址,然后直接去访问进程。