首页 > 其他 > 详细

如何设计高可用高并发的游戏全服广播?

时间:2019-02-22 16:02:38      阅读:262      评论:0      收藏:0      [点我收藏+]

序言

我们游戏是一个全球同服的游戏,和传统的分服的游戏不同的是,我们游戏不区分服务器,根据估算日活跃玩家的在百万量级,同时在线的玩家在十万量级,所以直接遍历玩家发送广播,在广播频繁的情况下,很可能造成cpu和网络的堵塞,那么,我们如何设计一个高并发高可用的广播方案呢?

我们需要再控制cpu和网络IO开销的情况下,使得广播尽肯能快速的发送给所有玩家,下面我们先讲讲如何控制cpu和网络IO的开销。

控制发送速度

如果我们在每条广播产生的时候就直接发送给所有玩家,那么当同一秒产生几十条广播的时候,那么必然会产生Cpu和网络IO的峰值,所以我们得控制广播的发送频率,比如同一时刻只发送一条广播,新产生的广播进入消息队列,不立即发送。

这么做的优点是所有GateSvr发送广播的消耗是恒定的,不会因为广播产生的快,加大cpu和网络ID的压力,但是它的缺点也很明显,那就是新产生的广播不能及时发送给玩家。

避免重复计算

一般来说广播对于所有玩家来说都是一致的,所有可以通用把广播处理好之后,比如转成二进制格式,再发送给每个玩家,这样可以降低cpu的负担。

避免广播失效

前面说过,控制发送速度会导致玩家不能及时收到新产生的广播,但是我们可以做到玩家将玩家收到广播的延时控制在数秒以内,那就是将新产生的广播加入待发送池内,等到下一轮广播的时候一次性发送给玩家。

这样玩家收到广播的延迟不会超过两轮的广播发送时长,从而使得尽可能的收到更多的广播,且收到的广播都是有时效性的。

避免广播堆积

通过前面的设计,我们已经设计出了一个高可用高并发的广播系统,在控制cpu和网络IO的情况下使得玩家收到有时效性的广播,但是如果在极端情况下,待发送池累积了大量的广播,一样会对服务器产生大的压力,所有我们可以给待发送池设计一个上限,超过上限的时候丢弃部分较老的广播。或者控制每轮广播发送的广播数量。

设计理念

该系统的设计主要是通过避免重复计算,顺序发送广播,合并发送广播来降低cpu和网络IO的消耗,保证玩家收到广播的时效性。通过控制待发送池广播的数量来避免极端情况下的性能压力。

如何设计高可用高并发的游戏全服广播?

原文:https://www.cnblogs.com/raynor/p/game_broadcast.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!