畅游:游戏运维最佳实践

本次阿里云云栖社区行业圆桌论坛上,畅游运维部总监黎志刚和阿里云同学为大家带来游戏运维的哪些事儿。其中包括畅游的上云历程,游戏上云的趋势和未来运维走向等。对话行业大咖,引领云端科技,畅谈云上话题,尽在阿里云云栖社区行业圆桌论坛。


回顾视频:https://yq.aliyun.com/edu/lesson/play/608

 

以下内容根据阿里云行业圆桌论坛视频整理而成。

本期嘉宾介绍:

黎志刚,畅游运维部总监;

翔贺,阿里云资深架构师。

上云趋势不可避免,越来越多的企业启动上云之路。在云计算普惠时代,各行各业都在发生着变化。

阿里云行业圆桌会,汇聚APP、网站、游戏、金融、电商、音视频、健康、教育、能源、政务、运输、制造等12大行业类别,邀请阿里云经典客户,一起聊聊他们的上云之路,以及云上技术实践!

 

畅游业务情况简介

黎志刚介绍说,畅游在手游和端游方面做了很长时间,在游戏运维方面也积累了十几年的经验,很高兴接到阿里云的邀请,跟大家分享运维的心得。我们在去年推出了二次元的仓之骑士团,获得了苹果几轮官网推荐;我们的旗舰天龙八部,不管是端游或手游,都表现不错,特别是在MMORPG类型游戏里,大家也都可以试玩。

 

阿里云对混合云提供了哪些方案?

翔贺谈到,感谢畅游的信任,从硬件到虚拟化再到操作系统,全链路兼容性很难调试,将老操作系统应用到正式生产环境还是一个很痛苦的过程。

混合云与畅游走的很近,畅游对于混合云来讲有很明确的要求。第一,托管物理IDC质量一定要过硬,第二,云上云下一定要有大带宽,高稳定高可用的链路打通,我们会和第三方合作伙伴一起打造基础设施。在前端,混合云在安全上有很重要的优势,阿里安全体系很健全,混合云模式既保证了用户线下的场景核心需求,同时依托阿里安全防护体系,将安全堡垒又加固了一层,混合云可能比常规的云上云下打通更实际,优势更明显。

 

畅游上云实践

游戏上云有什么不同吗?畅游的上云历程是怎样的?

黎志刚认为,游戏上云和其他行业上云最大的不同在于,它的开发和版本以及应用程序特殊性很多,导致它对云上的操作系统、驱动和特殊配置上要求和其他应用不一样,这样对云的要求会更苛刻一些,不同游戏版本和类型对公有云的要求都是不一样的,我们与阿里云合作做端游的过程中,对一个产品的老操作系统版本进行一个改造,操作系统太老导致应用程序无法在云上拉写,新版本操作系统应用又搭建不起来,对此,阿里云为我们定制了一个操作系统版本。

开始使用云是比较便利的,维护成本和各方面都有很大的进步,我们的故障修复、应用上线的时间速度提升几十倍甚至上百倍。在手游井喷式的发展时,考虑资源上手游时,我们优先考虑了公有云,使用了阿里云的所有服务,目前,我们的很多业务基本都在云上跑。

 

游戏上云的趋势是什么?

黎志刚觉得,使用云后的便利性很强,在手游基本用云的情况下,我们希望端游也能够到云上,可以提高冗余性、效率等,维护的成本都可以得到控制。端游我们做了多种尝试,将老的端游进行上云测试,目前进展比较顺利。未来,手游和业游都会在云上跑,端游也会逐步迁到云上来。

翔贺也说到,上云是一个循序渐进的过程,从最开始大家不敢把游戏放在云上,到一步步逐渐尝试相信这个环境,再到现在有一定的信任。我们在做云产品时,也不会很盲目的让用户将他最核心的业务一次性的迁移上云,这就是混合云存在的价值。基于游戏的场景,我们也在不断的了解用户需求,包括DB层、操作系统兼容性、性能表现层等,我们都会在产品上去丰富,现在推出的多主频类型,就是为了能够更好适应老端游,以及很依赖CPU计算性能的场景,我们都有做尝试。

 

目前游戏行业可能接触多个云计算厂商,简单介绍下这方面的情况?

游戏要让用户访问到,只有两个途径,iOS和android,黎志刚说到,为了让用户都能访问,由于所有渠道跟用户挂入量有关,可能在推广上可以更好的为某个渠道服务时,在选择云厂商时就会有一些区别,受到市场因素限制。

 

畅游:数据库优选MySQL

畅游使用哪种数据库比较多?对于自建MySQL和阿里云RDS,畅游的选择有什么考虑吗?

畅游之所以偏爱RDS,这可能与游戏架构演变有关,最开始DB和应用都放在一台机器上或两台机器上进行交互,数据的一致性和档案的完整性都会有问题, 使用云以后发现,不管是从网络层、数据的交互整个使用上都提供了一整套的解决方案,redis可以实现memorycache实现不了的功能,这个程序被应用的场景远远多于自己写的memorycache,因为我们只面向自己的游戏,redis要经过各种应用的验证,redis的健壮性和冗余性各方面都会比memorycache更强,这时候我们就会更倾向使用redis服务。

畅游使用MySQL比较多,SQLserver和MongoDB也有一些,畅游做了那么多年游戏,有了自己的一套mysql配置标准,这个版本各种参数我们自己做了优化,能够支持公司内所有游戏的运行,这个版本也放在了阿里云实例中直接使用。我们其他游戏可能也会定制数据库,要求必须是某个版本某个数据类型,我们会与研发商技术团队沟通调整,我们会遵循研发商的意见。

SQLSERVER数据库主要针对存储过程和SQL语句做一些优化,上线过程中可能会遇到某个存储过程和SQL语句处理时间很长,导致访问效率很慢,就需要对SQLserver了解的人排障时候能够快速定位到问题,我们在用MySQL的排障方式也可以去做,由于两个数据库操作模式不同,导致排障时间不一样。不同地区游戏能对研发商选择的操作系统和数据库的版本,对于我们在引入时,都需要和研发商进行交流。

关于选择,主要看游戏的类型,如果是端游,我们会优先考虑天龙验证过的MySQL,如果是web应用或手游等,我们会直接使用阿里云提供的服务。

翔贺也补充到,从我经手的项目统计来看,国内游戏行业的DB有几种类型,SQLserver、MySQL和MongoDB以及自建数据库。从协同开发角度讲,在做一款项目时,他所能控制的在经验范围内,数据库有多大的并发写入量,数据块写入多少,能够有很精准的度量,如果用全新的技术,可能就会超出我的控制范围。阿里云RDS从设计第一天,就把高可用放在第一位,第二位是数据的可靠性,RDS已经完全可以满足游戏行业的需求,像局域缓存场景的Redis和memorycache,我们也打造高规格实例,能够满足很重度的游戏需求。

 

对于春节前夕某款游戏数据库删库事件以及gitlab删库事件有什么思考?

黎志刚思考说,我们也发生过类似事件,当时我们就做了优化调整,定期进行校验,模拟故障进行立马恢复,来看备份策略是否OK。不过,光有恢复和检查时不够的,在进行删除和格式化的过程中,如何保障不让事件发生或发生可找回,我们对操作系统安装初始化时进行改造,我们会将一些命令封装起来,工程师在系统上执行这些命令和脚本是执行不了的,需要匹配使用脚本和定制化函数才能执行。同时我们做到,如果删除同时将删除文件直接移到另外一个位置,可以被找回。

 

畅游业务架构及运维实践

伴随业务的发展,畅游架构的演变历程?

c7a01bcd2039389ec335297d4ddaf53423642cbd

8d6dd77e6e4ea9fd18addc3095627ea9bc3b9e1b

0accceea2723f02099fdfa50500c5e0fb87d96a1

从最开始基础的C/S架构,向可以进行负载均衡的架构,把很多的应用功能进行切分,比如登录、场景和验证,我们的支付、资源都切成不同的服务器,这样服务架构相对来说就比较健壮了。上云以后,有备机可能分钟级、秒级就可以切换,没有备机十分钟内也可以解决;有redis后,数据档案的完整性会得到很大提升。

 

游戏可能有一些大流量高并发情况,对于架构方面需要做哪些工作?

黎志刚说,为了让档案数据不丢失,网络抖动各方面影响较少,游戏设计时在中间层数据库和应用之间做了一层缓存memorycache,这套东西可以保证所有数据交互时不出现丢失,可以解决高并发问题。手游现在基本都是负载均衡,如果遇到高并发,可以在负载均衡做更多事情。以前单个机房防御可能只做到10G,当使用到云上后,防御的整个带宽可以达到300G。

提到全球同服,全球同服对数据档案的共享要求很高,也对网络访问的联合性要求很高,现在全球同服用云的实践也比较多。

说起阿里云发展的海外数据节点,翔贺说,阿里云海外战略目标是要将数据中心铺到全球,从北美、东南亚到欧洲,已经上线了多个数据中心,另外一个很重要的技术特征是,有规划将数据中心通过高速通道打通,包括国内区域的跨城专线,包括国内到海外的国际专线,这种打通就解决了做全球同服时技术资源的联通性上的基础条件,全球同服对游戏类型有要求,比如SLG、棋牌以及卡牌,随着未来游戏行业在海外战略的发展,这一类项目会越来越多,阿里云希望在项目大爆发之前,将基础条件打造好,为了方便未来项目更好在云上构建。

 

畅游内部有哪些相关的运维工具?

过去五六年,我们一直想做运维自动化,最终形成了一整套完备的运维操作平台。一方面是游戏运维自动化,游戏版本的发布、上线更新维护自动化;一方面将所有的资产信息做了数据总线,构建了一套CMDB系统,该系统会将线上所有的资产信息全部在库里建好,打上标签,所有运维需要的工具、脚本和系统都经过这条总线,假如线上应用进行变更时,也是在这里先更改。 我们也做了版本发布平台,所有在服务器上运行的脚本,全部在这里登记,由系统自动发布出去,这样可以将所有服务器执行上的风险降低。出现问题时系统自动呼叫运维人员,我们内部也做了APP,所有报警信息都可以通过APP传达,我们也跟微信对接了一些东西。

将IT成本中心变成利润中心,今天畅游的体系已经非常成熟了,怎么能够很好的开放出来给其它的游戏行业客户利用呢?我们希望将自己的东西提炼成开源的架构,让同行的所有人都来参与调优,参与的人越多,对框架调优就越好。第一,先将我们的东西模块化、产品化;第二,将我们整个的运维行业人才培养计划也开放出来。

466dbbaf463dc2b2d480d6490f19e273c0654659

对于未来运维的发展趋势,黎志刚认为,为了不让大量业务压在肩上,首先要简化业务,做自动化运维,未来也会向智能运维、无人值守运维方向发展。大多运维都是被动式的,我们也考虑利用大数据做态势感知运维。

同时,畅游对容器服务也做了探索,Docker兴起时,结合其他公司经验,我们做了很适合畅游业务的容器,优先解决业务遇到的问题,这时我们在容器上可以跟研发团队核心生产环境做流程的打通。研发写完后直接上传到目录,由系统自动同步到预发布环境,在预发布环境可以看到是否OK。我们的Docker容器大量借鉴Docker社区和开源东西,定制化的东西想要通用使用还是有难度的,所以我们想与阿里合作使用Docker容器,这样,我的容器没有满足时,可以快速使用Docker容器,这也与混合云概念有关。

翔贺接着说,阿里容器服务第一是解决兼容性问题,会支持本地化部署,将线下东西和线上实例打通,在线下垂直环境、预发环境能够跑通的程序代码,可以一键直接发布到云平台,实现整个持续交付能力;第二,阿里与Docker已经做很深度的战略合作,未来我们会在Docker容器化领域持续发展,很有可能专门出些针对游戏行业的容器化服务。