如何选择适合网游和手游的网游服务器端

手游后台PVP系统网络同步方案总结
版权所有,禁止匿名转载;禁止商业使用;禁止个人使用。
概述pvp系统俨然成为现在新手游的上线标配,手游Pvp系统体验是否优秀,很大程度上决定了游戏的品质。从最近半年上线的新手游来看,越来越多的游戏把核心玩法重心已经放在pvp多人游戏中,手游朝着更重度、多人实时交互的方向发展。本文主要分为两部分介绍pvp系统,前半部分主要介绍手游后台Pvp的同步方案介绍,第二部分主要介绍天天飞车和现在正在开发当中新赛车手游pvp网络同步方案。同步机制的一致性问题同步问题的本质是一致性的问题,在同一局多人游戏的过程中,玩家A看到玩家B的状态,应该跟玩家B自身看到自己的状态相一致。延迟是造成不一致的本质原因,假设理想情况下双方的网络时延都为0,那两者应该是同步的,但是在现实情况中,往往是不可能的,本文讨论的同步机制,就是为了解决一致性问题而产生的,对于不同的游戏类型,不同的团队技术积累,可以根据自身情况采取不同的同步机制技术方案。根据网络的拓扑结构区分,网络同步通信可以是client- client直连p2p通信,也可以是client-server-client服务器转发通信,client中选取一台当作server转发client间通信。本文以常见的手游后台同步方案机制来区分,分为帧同步方案,位置状态信息同步方案进行阐述。1.帧同步原理设存在玩家A、B、C,服务器Server设为S,假设玩家A、B、C是一个状态机,一开始A、B、C都处于状态S1,这时候服务器S给A、B、C相同的输入I,此时A、B、C经过本地的运算,得到同一个状态S2。 在这短暂的时刻,可以理解成所有玩家从状态S1同步到状态S2,三个玩家便达到同步的目的。只要状态机函数模型Fun,初始S1,输入I是确定的,那么三个玩家得到的结果S2肯定也是确定的。如图中所示,玩家A、B、C在T1、T2、T3时刻都会收到服务器发送过来的输入,从而变成相同的状态S1,S2,S3,达到同步的目的。可以想象成这就是个回合制的游戏,每个T1、T2、T3间隔是一个回合,玩家在回合结束的时候,状态是一致同步的。那对于我们游戏来说,服务器的输入可以是玩家在这回合的操作序列,可以是状态信息,都可以,取决于客户端游戏方案的设计。只要这输入到达任何一个客户端那里,能把这数据模拟成真实的游戏场景就可以了。此时您可能会有这样的疑问,如果帧同步比作成一个回合制游戏的话,那会不会出现一卡一卡的情况出现呢。其实是不会的,一般游戏的帧数为30-60帧玩家认为是流畅的,对于帧同步来说,我们把里面的每一次输入的时间间隔足够短,人眼的反应是可以被欺骗的,就好像电影放映一样,一张张连续的图片快速播放,人眼就会感觉是连续发生的,同理帧同步虽然就像是一个回合制游戏,但是只要回合的时间足够短,玩家看起来就像是连续的一样。通常情况下,我们把这个回合称为逻辑帧,逻辑帧的设定可以根据游戏类型,自己打磨决定,一般情况下,4-6渲染帧左右为一逻辑帧比较合理,大概1S的时间内,客户端会收到服务器8-10个逻辑帧输入。后台实现1.核心思想对于后台开发来说,服务器主要起到控制作用,对客户端的帧信息进行输入输出管理,服务器就像是一个时间序列的驱动器,每隔一定间隔,会把在这段时间间隔收集到得客户端的输入,下发广播到所有客户端中去,从而驱动客户端执行帧同步处理,简而言之可以看作服务器在时间轴序列上,收集切片,每隔一定间隔,把这时间切片收集到的数据下发给客户端。1.对于帧同步来说,数据同步的频率较高,当然是希望越小的网络延迟越佳,由于TCP的滑动窗口和重传机制,导致延时无法控制,因此帧同步一般采用udp进行网络传输。提到udp这里就会衍生出可靠性的问题,对于客户端来说,如果某些udp包没有收到该怎么办呢,这就是帧同步客户端会出现的丢帧的情况,这时候得靠客户端与服务器指定针对性的重传机制.2.服务器单局中数据首先对每一帧下发客户端的数据进行编号,然后并保存下来,某某客户端网络不佳,中途丢了一些包,可以跟服务器发请求,我现在播放到哪一个序列号的帧了,服务器可以把这个客户端当前序号的帧和客户端缺省的帧一并下发,这样客户端拿到数据后,便可继续通过合帧快播的方式,加速播放,赶上当前时间。这样客户端的表现就是在快放一样。3.一般来说,帧同步的方案的包量都是比较小的,对于客户端在这个时间间隔没有上传任何数据,服务器也得帮该客户端构造空帧出来,免得其他客户端出现没有输入的情况出现。4.对于短时间的大量重传,服务器可以选择性的采取合并的策略,减少客户端的瞬间的收包数量。同时也可以利用好不超过mtu的包量大小,尽可能的携带一些之前若干个时间帧的信息,最大限度的把信息push到给客户端,减少客户端申请重传的概率.2.断线重连服务器单局可以把所有逻辑帧存储下来,当客户端断线,重新登陆的时候,服务器可以将所有的逻辑帧下发给客户端,客户端拿到所有的逻辑帧后,可以快速在后台跑完全部的逻辑帧,当跑完后,加载到画面,就重新回到游戏单局了。由于断线时,跑的是单局上所有客户端一样的逻辑帧,因此,等到恢复游戏的时候玩家的状态是一致的。3.反外挂服务器都是切逻辑帧,没有感知到客户端的逻辑,所以反外挂这块不方便校验,可以从以下两方面着手去校验 1.由于所有客户端的数据都是一致的,可以让客户端根据自身数据算出若干个特征值,严格来说, 所有的客户端算出来的特征值都应该是一样的,因为他们的数据是一样的,当有玩家不一致的时候,可以断定该玩家有作弊的嫌疑。 2.通过单局过程或者完成的时候,汇报统计信息给服务器,服务器通过若干个数据的关联关系,进行数据校验。(有点类似手游单机游戏的校验)4.特殊关注的点1.随机性:游戏中不可避免会有随机的逻辑,这时候伪随机就派上用场了,通过下发统一的随机种子,确保每个客户端都产生相同的随机序列。 war3中暴击就是使用的伪随机机制,同样是为了应付帧同步的问题而产生的解决方式。2.浮点数:浮点数尽可能的避免,还有特殊注意的是,如果用了第三方的库,要确保客户端在不同平台的计算结果是一致的,比方说用了某些物理引擎,在安卓和IOS的平台上会有可能计算出不同的结果,那就要在开发过程中,注意避免使用平台不一致的API了。3.调试难度 帧同步调试比较困难,需要良好的Log系统,针对不一致的情况能通过Log追溯原因。尽早的搭建起录像功能通过录像回放可以反复观看逻辑上的不同步,方便问题定位。在单局中增加debug模式下不一致的检查,当发生不一致时,及时发现,定位原因。如果能引入自动化测试那效果就更佳了。2.位置同步原理位置同步比较好理解,并且最开始一批手游的Pvp也是大多采用位置状态同步的方法。位置同步跟帧同步的最大区别是服务器不在进行切逻辑帧,而是被动的帮助客户端转发位置状态同步包,从而实现同步的目的。比说存在玩家A、B、C,玩家A上报自己的位置和状态给服务器S,服务器S把这个玩家上报的包广播给玩家B、玩家C,玩家B、C收到包后,知道了玩家A的位置和状态,做相应的逻辑。由于存在网络延迟,位置同步的方式会导致接收方收到的包是发送方之前历史时间的包, 存在一定滞后性。需要获得较低的网络延迟,可以通过udp的方式去发送同步包,发送包的频率相对帧同步来说可以低一点,服务器上可以处理跟单局相关的逻辑(使用道具等),能感知到单局中的信息。后台实现1.核心思想位置同步的后台相对容易实现,只需要管理好单局的生命周期就好了,控制单局开始、单局结束,在单局过程中通过UDP传输玩家的位置状态同步包,重要的信息可以通过tcp传输给服务器作逻辑仲裁(使用道具,攻击他人等),客户端收到回包做对应的展示逻辑,只要客户端每秒上报给服务器的包数量足够多,那其他客户端在1s内可以拿到多个同步包,能对该客户端在本地的位置状态做出及时的修正,从而达到各个客户端同步的目的。2.反外挂位置同步反外挂是比起帧同步来说是更容易实现的,首先因为重要的数据是跟服务器有交互的,因此服务器单局数据中存储着玩家的数据信息,比如说玩家在当前时间在单局中拥有的道具,玩家在地图上的大概位置。打个比方,客户端经常出现使用自身都不存在的道具,经常发起cs请求给服务器,服务器本身是有玩家身上道具信息的,那可以判定玩家有一定的作弊嫌疑。另外一个例子,赛车游戏,上一个客户端上报的同步包还在赛道的中段位置,下一秒玩家上报自己冲线了,这些后台马上就感知到了,客户端存在作弊嫌疑。3.断线重连CS同步的断线重连,要看服务器对单局的参与深度,如果服务器上有大量的玩家当前状态位置信息,那玩家重连回来的时候可以通过服务器下发当前的所有玩家状态位置信息给掉线的玩家,掉线玩家拿到全量信息后,马上能重建单局情景,恢复游戏。如果服务器介入不深,其实这时候就只有客户端才有这个完整时间切片的全量位置状态信息了,服务器可以随机挑选一个网络状况较好的客户端,向该客户端发起拉取全量位置状态信息的请求,就好像是服务器向客户端拉取一个时间切片的请求一样,把该客户端在这个时间点上的所有信息汇总报上服务器,服务器拿到全量信息后,下发给掉线重连的客户端,这样掉线的客户端也能拿到全量的数据信息,并恢复单局。在开发过程中,得与前台协商后,要在开发前期就考虑到恢复机制的需求,客户端数据管理统一模块化。天飞及新赛车手游PVP系统方案上文主要阐述理论方法论,下文结合实际项目谈谈方案的实施。 游戏类型很大程度上决定了同步方案的选择,赛车游戏需要瞬时的强交互的情景比较少,只有车与车碰撞相互挤压这瞬间才体现出这种情景的需求。因此从技术选型上一开始就倾向使用CS位置同步了,以前做天飞的PVP系统,由于是线上项目,一个版本的时间就一个月左右,不大可能推翻客户端架构采用帧同步的技术方案,因此天飞的之前的Pvp采用的是CS位置同步技术方案,后台开发思想遵循以下思路进行开发的,稳定—&可扩展—&性能,试想下pvp服务器是一个有状态的服务器,如果外网经常出现不稳定导致服务器无法服务,那将会是同一台机器的上万名玩家同时掉线,这在产品运营层面上是不可以接受的,因此稳定是所有要求的首位。其二现在手游浪潮变化快,一不小心服务器承载就爆满了,可能过一段时间新玩法一出来,一下子又涌到新系统上去了,当初部署的机器就面临空负载问题,因此在解决稳定可靠后,要提高系统的可伸缩性,最后剩下的问题就是性能了。一、自适应网络切换为了保证可靠性,针对手机的网络情况作了针对性的优化策略。众所周知,手机网络特点不稳定,尤其是在网络切换过程中,会出现闪断。在wifi环境下延迟大概保证在40-80ms之间,如果是3G网络的话,外网真实的延迟平均在60-200ms之间波动,非常不稳定(取自天飞外网PVP统计数据)。pvp中对于位置状态的同步信息,客户端优先考虑p2p直接发送,通过udp进行发送,对于其他重要的请求,通过tcp与客户端通信,位置同步包。对此,服务器后台跟客户端的通信采用了自适应的网络切换,既能满足对效率的要求,又能保证网络的可靠性。 单局开始前,服务器会跟所有的客户端打通udp通道,并且在开局时把Ip端口都广播给所有客户端,客户端自行进行p2p通信同步位置。当客户端感知到P2p无法通信时,会将网络包通过UDP发送到服务器上,服务器通过UDP进行同步包的转发,当服务器感知到与某玩家udp网络不畅通时,服务器会自动切换到tcp上跟客户端进行同步包的通信。简而言之,最开始客户端相互p2p传递,发现网络不佳,使用服务器udp进行转发,服务器感知到与某一客户端网络不佳,针对该玩家的后续同步包会切换成TCP进行转发。 而这一切的网络切换完全是在网络底层进行触发的,应用层无法感知到。实现的原理类似TCP的ACK确认机制,将以图文结合的形式描述。*在网络消息的头部带上两个时间戳,起到关键性作用的两个字段为:m_u32UdpServerT //服务器最后给客户端发送udp包时间 (服务器使用该字段判断与客户端是否收到UDP包)m_u32ClientUdpT
//客户端最后给服务器发送udp包时间 (客户端根据该字段判断与服务器是否收到UDP包)下面以服务器为例,描述如何感知到客户端与服务器的udp网络不佳的,转而切换通过TCP网络发送消息。服务器维护两个变量 WaitConfirmTime(待确认收到服务器时间戳)ConfirmTime(已经确认收到服务器时间戳)最开始服务器像客户端发UDP同步包,此时时刻为t1,可以理解成这个包的Seq为t1,此时服务器变量WaitConfirmTime就变为t1,说明服务器在t1时间发过包给客户端,不知道客户端收到没收到,要等待确认。当客户端收到刚才的udp包,客户端会在他下一个要发给服务器的任意TCP或者UDP包中回带时间戳回来(图中红色回带Seq:t1),目的是为了让服务器知道刚才t1时间的包,客户端已经确认收到了,当服务器收到这个包时,知道客户端已经收到包了,服务器的变量ConfirmTime就更新为t1.,此时WaitConfirmTime和ConfirmTime是相等的,那么可以认为网络是不错的,因为服务器发出的包,客户端全部都被确认收到了。实际情况是WaitConfirmTime一直都会比ConfirmTime是要超前的,两者交替增大,因为收到客户端确认肯定没有发出的时间快,判断网络是否尚且良好的标准是,当我要发给该客户端发包的时候,我会先看下该客户端的ConfirmTime、WatiConfirmTime和当前的时间戳三者关系,首先如果WaitConfirmTime大于ConfirmTime(说明还有包客户端没收到,所以没确认)超过一定阈值的时候,则认为服务器一直发的包客户端都没有收到,此时服务器会自动切换成TCP给客户端转发同步位置包,确保客户端能收到。 客户端判断与其他客户端p2p网络状况切换,判断与服务器udp的网络状况都是跟上述服务器是同一个道理,只不过使用的是包头的不同的字段而已。真实外网数据情况:平均单局时长3分钟,一个玩家每秒的同步包频率3-7个,自适应网络切换的阈值为5S,UDP打通率大概在73.2%左右, Wifi玩家占比三分之二左右,在外网完全利用p2p完成单局人数只有7%左右, 完全使用p2p和udp包完成单局的人数为63.2%,掉线率大概在5%上下 通过外网的数据得出一些结论,手机网络的情况还是不太适合使用p2p的方式进行通信,后续新手游的网络开发也没有使用P2P的方式了,而是直接一开始就通过服务器用udp方式进行同步位置转发。手游网络不稳定,闪断会比较多,因此非常有必要做单局内的断线重连。二、断线重连断线重连由于服务器没有介入很深,因此当玩家掉线的时候,玩家资源并没有及时进行销毁,而是保留到单局结束的时候再进行统一销毁。(衍生出特殊情况,玩家都掉线了,单局里面没人,因此无法驱动下去,导致资源无法回收,得增加checkinvalid的操作,需要检查长时间没有网络交互的单局,超时便可强行回收资源)。断线重连采取的是向其中一个客户端拿取时间切片的方式恢复单局信息。三、扩展伸缩性稳定的问题得到解决,在扩展伸缩性上,由于天飞算是第一批上PVP系统的手游,当时市面上没有太多的参考,因此在上线前作出了充分的压测,并在运维、运营管理方面充分考虑,预埋了多处开关,从而应对营运峰值状况的发生。1.pvp服务器支持不停机更新,动态添加减少机器服务。玩家是通过匹配服务器决定登陆到哪台Pvp服务器上进行多人游戏,匹配服务器上相当于是一个center,知道当前所有pvp服务器上的玩家承载,当需要重启某台Pvp服务器的时候,可以通过在这台pvp服务器上刷配置,配置生效后,反向通知center匹配服务器,使得后续玩家不会分配到该pvp服务器上,等到该pvp服务器上的单局都结束了(持续3分钟左右),便可以随意操作该服务器,可以替换程序,可以动态下架等。 这样做的好处是,刚上线的时候遇到外挂问题比较严重,在问题暴露后,马上修改代码添加了针对性的策略,直接不停机在用户毫无感知的情况下,在白天就把全部外网的Pvp服务器重启更新了。2.影响性能的关键项配置化a.客户端相关的(每秒同步包的基础数量配置化)在跟客户端同事协商,在不同情况下每秒发送的同步包数量也是动态变化的,不用使用固定的同步频率,以赛车游戏为例,当我没有任何操作,行驶在直道上时,可以相对应的降低同步频率,当我快速变向或者过弯等情况,可以动态增加同步的包量,总而言之,根据自己游戏场景,动态调节同步频率,从而达到节省同步包量,降低服务器负载。b.服务器内部的当时压测发现,服务器主要的瓶颈在于CPU,单进程的服务,人数越多,每秒处理的包量就越大,pvp上的逻辑都不太重,主要的cpu消耗都在打解网络包上,当时天飞使用的是最原始的tconnd,加解密也是server自己做的,加密和解密势必会消耗更多的cpu资源。当时留了开关,针对下行包的位置状态信息,设置了不加密的开关。这个数据即便不加密影响也是最小的。为的就是留有更大的运营余地,在面对运营峰值的时候,所采用的权宜之策。四、反外挂从两方面,一方面是处理重要游戏过程都是通过tcp与客户端交互的,服务器为进行校验。另一方面单局过程中,客户端每隔一定时间,会上报该时间段内的统计信息,单局结束后,会上报全局的统计信息,服务器收集到这些统计数据后,会进行后校验。总结本文主要阐述了帧同步和CS位置同步的原理和主要实现方法,并针对实际项目,整理了自身在做pvp系统所累积到的一些经验心得,由于个人力量有限,难免有纰漏之处。pvp同步的流畅体验,一方面靠的是技术方案的设计,另一方面还离不开策划程序在某些数值上的精细打磨,在数值打磨的方法论上,没有放之四海而皆准的准则,唯一的方法是根据已有经验不断尝试(比如说,同步包频率的设计,客户端提前预测的算法等等),无论使用的是帧同步方案还是CS位置同步方案,相信也会有许多这样需要跟游戏特性相关的参数需要后期打磨设定,才能获得流畅的多人同步体验。不同的游戏类型、不同的团队技术积累,可能就会选择不同的技术方案。无论是何种技术方案,流畅的pvp体验单靠后台给力实现是远远不够的,归根到底还是后台前台策划团队合力的结果。用一句话概括就是流畅的pvp同步体验 = 正确的方案设计 + 精细的后期打磨
分类:(原创)服务器技术圈
微信扫一扫
开拓游戏领域新视野
GAD游戏开发qq群:
登录后参与讨论。点击
请勿发表无意义的内容请勿发表重复内容请勿发表交易类内容禁止发表广告宣传贴请使用文明用语其它
淫秽色情政治倾向人身攻击抄袭剽窃广告刷屏恶意挖坟冒充他人其它查看: 1722|回复: 22
提问 怎样可以搭建自己的网页游戏网站和游戏服务器?
阅读权限10
请教各位:如果个人想搭建运营网页游戏的网站的话,应该如何才能实现呢?我的意思是说,个人想建网页游戏网站进行创业的话(网站需要具有在线充值功能或者说网银转账和支付宝转账功能,并且想能够和网上的其它网页游戏运营网站合作,把他们的游戏项目(网页上一个个的游戏小方块)都放到我的网站页面上来(意思是我自己做的网页),然后用户可以直接在我的网站上进行注册和在线充值等操作(就是说用户不用去那些提供运营网站,直接在我做的网站上就可以进行注册,灯录和在线充值等操作,也只有在我的网站上注册和玩才有效,这样的)不知大家明白了没有?要想实现制作一个我说的这些功能和条件的网站的话,应该怎么做呢?怎么实现呢?用什么方法才能做出这样的网页游戏运营网站来进行创业呢?另外,我不知道如果用现在网上的内容管理系统(cms)的话,是否可以实现?是否能够容易些?我想要一个傻瓜型的网站制作工具或者说网站系统(一个完全不懂的人也可以几天内完全学会的)来制作这样的网页游戏网站,不知有没有,可不可以?请知道所有这些信息的朋友给我提供些这方面的资料,多谢大家!!有什么编辑好的程序 不要珍藏。。。&&或者花个钱我买
重要的事说一遍
自己需要技术 这个不能完全依靠别人
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
你的想法很好 但要技术和者钱
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
你这涉及到几个服务器运作,某里云和某讯云都提供一条龙服务
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
首先你需要一个服务器
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
在然后你要有个域名
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限25
可以找一条龙搭建& & 要求提出来就好 就是钱不同而已
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
域名,服务器,网站程序,游戏程序。。。。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
直接出钱就可以了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
游戏端 服务器 域名 网站 充值可以找支付平台
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
你的创业思路已暴露 O(∩_∩)O~
还是需要点技术的
或者直接花钱雇人
神奇的小尾巴:Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0. Safari/537.36&&(zh-CN)
—— 下午6:18:51& && && &
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
再加个即时网银收款商户+自营平台
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz! X3.2
Comsenz Inc.干货推荐:如何运维千台以上游戏云服务器——游族网络
来自上海游族网络的运维总监李志勇,在3月4日云栖社区中带来的分享&如何运维千台以上游戏云服务器&。本次分享重点是云时代的运维,包括游戏上云部署整体方案、游戏服务器批量运维管理,并对企业选择RDS还是自建MySQL数据库给出了自己建议。
关于分享者:
李志勇,2010年加入游族网络,目前担任游族网络运维总监,全面负责游族网络运维业务。他具有十年运维工作经验,八年游戏行业从业经验,专注于游戏虚拟化技术和网络优化。
分享正文:
游戏产品架构进化史&
图一:游戏产品架构进化史
经过近七年的高速发展,公司游戏服务器从100台增长到10000+台,游族整体游戏架构也经过了三个阶段的演变:
公司早期广泛使用的第一代架构,当时主流的产品都是以DB+计算+前端这样的3个角色开发设计并部署,服务器以物理机为主,一个游戏区组需要2~4台服务器,不同的机器承担不同的角色。这种架构方案效率低,基本上不可能实现一天开100个区组(100个区组大概需要400台服务器); 随着业务量的增长和虚拟化技术广泛使用,游族整体游戏架构更新为第二代架构,全面采用虚拟化技术,把一台高配的物理机器虚拟化成多台符合游戏需求的虚拟机来使用,并实现了ALL IN ONE的系统架构。该架构方案运维效率高,适合规模开展游戏运营,但不具备业务高可用特性,一天开100个区组成为常态; 为了迎合大区大服、全球同服,游族融合了前两代架构的特点,推出了第三代架构,按角色分拆并形成服务集群模式。集群架构结合了物理机与虚拟化的优势,实现弹性扩容,游戏逻辑以服务进程或集群配置项的形式提供服务。该架构方案运维效率更高,可实现秒级开服同时具备业务高可用特性。
基于第二代架构,游族基于OpenStack自己的私有云,最初目标是为了提高服务器利用率、降低成本和实现分钟级开服。运维团队以OpenStack G版为蓝本进行调优并修改;整个网络采用的是VLAN模式,保证最大限度与现有网络架构保持兼容;存储方面使用本地磁盘作为存储。
通过底层优化后,游族私有云基本上可以满足业务的需求,目前90%游戏业务运行在上面,虚机规模持续保持在10000台以上,游族私有云平台没有提供WEB管理界面,日常所有的操作都是通过命令行和脚本的形式进行操作,但对于虚拟机的增删查改,重新封装了一层简洁的API接口实现与游族运维平台的对接。经过评估测验,在高峰时期,整个私有云资源利用率可达到83%。
运维方式的转变
与三代架构相互对应是游族运维的三个阶段:
在第一代架构上,运维基本是手工运维,技术含量并不高,纯粹是采用人与时间堆积进行,运维同学需要登录每一台服务器,顺序执行相关的命令和脚本。独立的版控服务器,通过主动推送的形式进行版本更新; 在第二代架构上,通过自动化工具进行批量运维,团队推出了使用expect写的auto批量脚本,所有操作只需登录一台集控服务器执行批量并发操作的脚本,独立的版控服务器,通过并行的主动推送; 在第三代架构上,可以实现系统化运维,多个运维系统相互协调配合实现,例如:CMDB、业务树、作业平台等。游戏区组搭建的时间基本上可以忽略(可按需求实现按条件触发或手动触发搭建操作),所有的更新操作在WEB管理平台就可完成。
游族作业平台UJOBS
图二:UJOBS架构及其游戏更新流程
系统化运维过程中使用的作业平台(UJOBS)是属于C/S的架构,其核心部分由任务调度器和agent组成,通过调用API接口完成多种形式的指令下发。UJOBS简单的来说是为服务器管理提供了执行命令的通道,将所有的执行命令和脚本在目标服务器横向执行完,把输出结果记录日志里面,同时可通过WEB界面实时查看分析。任务调度器是用来全局策略控制,进行并发量控制。任务列表里面保存任务的完整信息。指令仓库保存常用的命令个脚本和上下文关联的命令组合。
在UJOBS平台上,游戏版本更新流程如下:
版本库的版本变更自动触发构建; 从版本库拉取变更后的版本文件; 通过构建操作后,推送目标程序到分布式的全局版控服务器集群; 在作业平台下发更新操作后,UJOBS的agent取得该次更新的版控服务器地址、变更清单以及版本信息; 从版控服务器拉取更新文件到本地执行预定的更新脚本;
同时在UJOBS执行的过程中可实时查看输出的日志。当游戏版本更新出现异常,有两种回滚方式:第一种,游戏服务器上保留历史版本,异常时回退到历史版本;第二种,覆盖回滚,将老版本再次发布进行回滚。
数据库备份与恢复
相对于游戏版本更新备份而言,数据库备份更为重要。ALL&IN&ONE模式或者非集群模式的游戏业务场景下,会存在多达好几千个MySQL实例,若是要按常规的MySQL备份方案来实施,管理难度和成本都要翻好倍。因此游族网络采用Xtrabackup在主库上直接备份数据文件方式,备份文件暂存本地;本地备份完成后在备份系统选举一台远程服务器进行异地备份;备份策略每小时一次备份,半小时本地备份半小时远程备份。该备份方法在单主库业务场景下可能是最靠谱的数据备份方案,但备份过程对主库会有影响、(限制IO操作),最坏情况下可能出现1小时的数据丢失(业务接受少量的数据丢失)。
在数据恢复方面,通过一键恢复工具,只需要提供恢复的IP、时间段和业务信息(如库名)即可实现数据恢复;24小时内的数据通过本地的数据恢复(结合二进制日志),超过24小时的数据通过异地数据恢复。
云上迁移历程
现在游族已经将几款老游戏迁移到阿里云上。在将ALL&IN&ONE架构平滑迁移到云上的过程中,首先要求就是迁移过程不能长时间停服,只能接受正常的版本更新的停服时间。整个迁移过程分为以下几步:
第一步提前准备资源,在阿里云提前申请好资源,初始化环境并把VPC与自有机房的网络打通,实现内网互通为数据同步做好准备;
第二步提前同步数据,使用Xtrabackup备份在线把MySQL配置成主从同步模式,将数据同步到阿里云ECS,在一段时间后完成数据迁移。
第三步正式迁移,正常的游戏停服维护时间(0.5~2小时)就可完成业务上阿里云的迁移。目前已经平滑完成3款游戏产品的迁移,每款产品准备时间3~5天,正式迁移用时1~2小时,在阿里云平台使用的虚机超过1000台。
图三:新游戏上阿里云部署方案
上图为ALL&IN&ONE架构迁移在阿里云后的游戏部署:游戏逻辑运行在ECS上,业务中使用VPC网络,通过自建的ULB对外提供服务。游族网络下一步计划将集群模式部署在阿里云平台上,游戏逻辑将在ECS集群运行,后端数据存储在RDS集群中,前端通过SLB和负载均衡保证业务高可用,同时会接入LOG和大数据计算服务MaxComputer确保大数据业务。&
在迁移到云的过程中,阿里云的技术支持起到了关键作用,线上线下及时沟通,以及特定技术的定制,保证了整个迁移过程的顺利进行。
如何去选择合适的数据库?
在游戏迁移过程中,遇到了很多困难,其中一点是选择自建MySQL还是RDS。根据游戏迁移经验,解决该问题,他认为应从以下三个因素进行考虑:
1.实例数量:实例数量多且业务规模小(无需进行针对性的优化)适合自建MySQL服务;实例数量不多业务相对会比较集中,数据库负载较高需要针对性的进行优化适合使用RDS服务;
2.数据大小:数据量的大小会直接影响到数据库性能和数据备份的机制,数据量越大越需要对数据库进行精细化管理,数据的备份难度也越大,这种情况下建议使用RDS服务,反之可自建;
3.成本核算:从实例规格来看RDS会比ECS自建MySQL要贵,但若是必须用到RDS的某些特性(如:数据安全和稳定性)时成本也就不会放在首要位置了。
与此同时,大数据量的自建MySQL可以采用延时同步的方法,此方法已在游族网络的女神联盟(手游)的集群架构方案中在使用。游族运维团队独创的数据备份系统、UJOBS、业务网关等独具特色解决方案确保了其业务量在行业内处于领先地位。
1、游族目前的运维人员数量是多少?
答:游族网络最初运维团队在二十人以上,经过技术优化后,目前团队人数在十人左右。从原来的十几款产品到现在的三十几款产品,运维业务量增长一倍,整个运维团队人员缩减一半。团队不断将技术转化为生产力,这是一个持续推进的过程。
2、从运维小白到总监的成长过程?
答:首先,我对运维这个行业保持很高的兴趣。从游戏对战平台接触运维开始,就愿意持续花时间投入游戏运维,曾耗费两天三夜的时间来处理运维中遇到的故障。当然最初也是从底层的运维人员做起,团队管理是被逼出来的,是一个慢慢成长的过程。在团队中,学习应居于首位,每个运维人员需要不断地学习,提升自己的能力。
3、DB除了MySQL还有其他类型吗?比如NoSQL这类数据库是如何管理和部署的?
答:游族网络的产品绝大多数都是使用的MySQL,有少数产品使用了Mongodb,因为量少暂时还是通过手工管理;缓存业务有使用Redis但不存储关键数据,Redis的数据备份使用数据备份系统进行集中管理,所有的软件部署都是通过标准化的业务模板进行管理的。
4、在新方案中,大数据计算服务MaxComputer的应用场景是什么?
答:在游族之前的架构中,游戏日志是分开存储,易丢失。在新的架构中,通过Log服务将游戏日志搜集到大数据计算服务MaxComputer,对后续的游戏和运维数据分析提供便利支持。
5、数据库的部分是单DB多实例吗?有没有启用分布式DB的架构呢?
答:ALL&IN&ONE架构下,在一个MySQL实例中只运行一个业务;在集群架构下,在单DB实例下,会运行多个业务,分布式DB架构也相应是必备的。
6、游族私有云是用的OpenStack,本身组件很多,后续和公有云之间如何衔接的?
答:目前游族使用OpenStack仅限于机房,短时间内不会与社区版本同步,机房内修改和使用都很简单,整个OpenStack定制和修改不多,更多着重于框架的使用。
7、国际节点和国内节点的高可靠链路如何建立?
答:该链路使用的基本资源是遍布全球的阿里巴巴骨干网,阿里云是将自己的资源分享出来给使用VPC的客户,实现国内外高可靠链路的建立。
视频回放地址:
幻灯下载地址:
注:相关网站建设技巧阅读请移步到频道。
看过本文的人还看过
最新图文推荐
最新专栏文章
大家感兴趣的内容
网友热评的文章}

我要回帖

更多关于 网游服务器多少钱 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信