在游戏运维实战中摸索前行的“异地双活”架构

网友投稿 1043 2022-10-03

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

在游戏运维实战中摸索前行的“异地双活”架构

1. 写在前面

最近由于游戏业务的迫切需求,我们需要启用一套可靠的异活双活方案,降低业务的单点。大世界类型游戏的特点是组件模块化,战斗节点、数据节点、登录认证服务器多为独立部署,这样的设计有利于高在线的承载能力。但问题来了,这样的架构要求在同一个内网里通信,我们常规部署都是把所有服务器集中在一个机房里。这样一来,一旦机房受到攻击或者机房出口异常再加上国内骨干网的间歇性抽风,这会对业务将带来全局的影响,严格来说存在一个非必然但不合理的单点。在经济学里有一句谚语“Don’t put all your eggs into the same basket!”——不要鸡蛋全部放在一个篮子里。

2. 异地双活之演进

2.1 第一阶段(伪异活)

由于大世界架构的游戏有个很明显的特征,功能性的服区分比较明显,例如有战斗节点server、日志节点log、登录节点center、数据节点data、缓存节点cache,其中有些功能服需使用数据库,有些服不需要使用数据库只承担玩家的战斗功能。这些不同的功能服无论部署在南方机房还是北方机房都存在着以下2个比较严重的问题,具体如下:

为了保障业务在单机房遭受DDOS攻击、南北骨干网抖动故障场景下的正常运行和稳定,于是我们构思出了如下方案:

南北两地架设一条处于公网之外的专线,专线走服务器的内网卡通讯,相比公网缩小了10ms的延迟。将大世界的入口节点分别部署在南北两个机房,避免外网登录入口程序单点。南方机房利用反向代理通过内网专线全部转发到业务所在的北方机房,内网专线断开时反向代理服务自动切换到公网进行转发,实现转发过程中的高可用。玩家进入游戏均通过域名+端口的形式,域名针对省级做智能解析,达到玩家就近访问的效果。应用D监控,如果检测到域名解析故障时,切换解析到正常的另一方,形成自动故障转移。

这个方案虽然在设计上显得草根,但在线上正式应用后,已经取得了一些效果,最严重的情况就是专线中断,这时我们的业务仍然可以保证正常的运行,由反向代理服务自动切换到公网转发。当然我们只能称它为“伪异地双活方案”。如下图所示:

2.2 第二阶段(理想的异活)

随着业务的长久运行,第一阶段的方案虽然能解决机房遭受DDOS攻击、南北骨干网抖动等故障场景,但也暴露了不少其他问题。例如:

为什么不是Mysql Replication或MySQL Group Replication?

因为无论是MR、MM、MGR架构都是基于Binlog同步原理,涉及Mysql Binlog复制机制的方案均有延时的可能性。因为我们需要实现多写,如果无法保证数据实时一致性,业务将无法正常运作。

于是我们针对MySQL集群选型采取了一些压测,主要对比两种集群在高并发下写场景下的吞吐量、数据一致性、平均操作延迟等情况。

我们来看看压测结果:

PXC与传统MySQL区别不大,大部份日常的维护是相同的,也比较贴合游戏的应用场景。关于性能方面,我们可以用SSD来代替普通机械盘,提高IO性能。最终认为Percona Xtradb Cluster更适用于我们的业务场景。

因此,我们衍生出了第二阶段的方案,具体实现的架构:

PXC集群通过内网专线连接,专线故障时能自动切换到公网通讯。非缓冲层数据通过PXC集群保持数据一致。游戏节点同时部署在南北机房,除了入口节点以外,任何一方的游戏节点故障,程序可自动转移。玩家进入游戏均通过域名+端口的形式,域名针对省级做智能解析,玩家就近访问。入口节点通过D监控实现故障自动转移。原反向代理服务仅用于用户战斗节点的分配,不再作为全链路转发。(由于南北战斗节点完全地理分离,原则上南北用户不能在同一个战斗节点配对,这是策划上不允许的,所以需要利用内部转发让南北用户能够同时连接上同一个战斗节点)

目前第二阶段方案虽然仅是测试阶段,但也通过了内部业务的测试,验证了方案的可行性。我们也计划在近期正式应用到线上。

期待第二阶段 “理想的异地双活”能给业务带来真实的价值!

3. 参考资料

https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-install-linux-rpm.html

https://dev.mysql.com/doc/refman/5.7/en/mysql-cluster-ndbd-definition.html

https://percona.com/doc/percona-xtradb-cluster/5.7/index.html

http://galeracluster.com/documentation-webpages/mysqlwsrepoptions.html

http://cnblogs.com/lizhi221/p/7325401.html

http://cnblogs.com/52php/p/5675374.html

近期文章

sr-iov在私有云环境中的应用与实践那些实用的Nginx规则30分钟vim新玩法聊聊网络加速的东东基于WDS+MDT全自动部署WIN系统

END

如果你喜欢我们的文章,请转发到朋友圈

如果你喜欢我们的文章,请转发到朋友圈

上一篇:【python运维】系统进程管理方法
下一篇:普通运维人员就是秋后的蚂蚱
相关文章

 发表评论

暂时没有评论,来抢沙发吧~