游戏运维编年史:多是目前最详细游戏运维指南

文章出自:听云博客前端

编者按: python

       从端游到页游再到手游,15年来中国网游在世界上都有着举足轻重的地位。可是再好的游戏若是出现链接、延迟等问题时也会形成巨大损失,这时游戏运维便发挥了举足轻重的做用。中国网游的发展史,其实也是游戏运维的变革史,今天便由经典武侠手游《大掌门》运维掌门人吴启超来向咱们讲述,进入游戏领域10余年来的风风雨雨。ios

有服务器的地方就有运维

       现在咱们说到游戏,可能想到的是火爆异常的VR,办公室里一言不合带上眼镜就地开打;亦或是刚刚虐了李世石的AlphaGo,扬言要挑战《星际争霸2》“教主”Flash。然而,除去这些还有一个游戏行业不可避免的潮流正在发生,那即是网游化。nginx

       这里说的不止是网游,前不久育碧旗下大做《全境封锁》上线时闹出个小笑话:因为不少国内玩家下载以前没注意是网游,下意识的觉得育碧的游戏确定是单机,好不容易下完以后才发现玩不上,进而发生了很多的骚动。这不是第一个发生这种状况的传统游戏厂商,确定也不是最后一个,不少有名的游戏公司都在作相似的尝试,Popcap的《植物大战僵尸:花园战争》系列,暴雪的《暗黑3》等,甚至那些还有单机成分的大做也早就开始网络化:大名鼎鼎的《GTA5》、FPS风向标《使命召唤》系列和《战地》系列,网络联机部分的比重也在一年一年的增长。web

       网络联机,意味着玩家须要登陆官方服务器,“有人的地方就有江湖”,这句话说的不只是网游里的恩怨情仇,还包括游戏外的种种:“有服务器的地方就有运维。”这即是今天咱们要说的话题——游戏运维。shell

游戏运维编年史

石器时代:端游数据库

       想要了解现在的游戏运维,不得不从早期的端游运维开始提及。对于08年入行端游,11年经历过页游最后14年全面接触手游的吴启超来讲,这几年的游戏运维经历让他深切感觉到运维思路的巨大转变。apache

1.端游的运维工种:IDC运维、系统型运维、网络运维、业务型运维、运维值班等。各个工种分工各有侧重。后端

       IDC运维:装机、换配件、扛着2U的服务器全国各个机房来回跑。缓存

       系统运维:安装各类软件,调试各类不兼容的软件,在各类版本的Linux、Windows上。

       网络运维:二层交换、三层交换、四层交换,还要区分华为、思科。

       业务运维:24点维护,零晨2点维护,零晨5点维护,早上7点维护……

       运维值班:0点盯着屏幕打电话,1点盯着屏幕打电话,2点盯着屏幕打电话……

       运维开发:写着各类的逻辑,由于业务、网络环境、BUG、刚刚帮忙扛完服务器。

2.端游运维业务范围:在端游时代,大部分游戏公司都是自主作各类业务环境,作各类游戏业务须要的各类环境。

       资产管理:服务器、交换机、各类服务分布位置,端口等。

       下载服务器:搭建BT集群,作种子、分发,供玩家下载游戏客户端使用。

       静态缓存服务器:squid + apache|nginx  

       邮件服务器:postfix +sasl +ssl 收发服务、反垃圾邮件服务。

       网络质量监控:somkingping各个机房的交换,各个安放点服务器。

       配置管理:nginx 、apache、lighttpd、MySQL。

       批量管理:ssh公钥/私钥 。

       监控管理:nagios、catcai 而后是c|perl|python|shell +rrdtool各类业务监控图。

3.端游游戏服务器架构:通常来说都是以一组服务器集群为一个区服单位,单机上的进程提供不一样的服务。

      05.png

       传统运维,任务道远,正由于有过去那些年的翻译文档,兼顾整合方案,以及大批分享技术的前辈、社区,踩着前辈一步一个坑的走过来,才能有今天的运维的局面。

青铜时代:页游

       在2011-2013年左右的页游运维,游戏市场处于探索期,其实运维也处于探索期。端游时代每一个新服都要经历上架、装系统,装服务的过程,通常一到两周能够上线一个区服,对于端游高粘性低流动的特性来讲可能还好,可是当页游出现时,转变给运维带来的冲击没法估量。页游时代1天开100多个新服的概念,是传统端游运维所不能理解的。当时的运维认为页游就是把全部服务器实现自动部署服务,同时搭配运维自动部服工具就能够了。但事实上若是在开服时一组一组的使用物理服务器,开服速度根本跟不上,资源浪费还很是巨大,两周后用户留存率仅剩5%-7%。成本巨大亏空,急需技术转型,这个时间点上出现了两种概念影响了之后的手游以及云的发展。

1.虚拟化技术

       在2010年11月份左右, kvm出如今RHEL6中,去掉了RHEL 5.X系列中集成的Xen。正是这一次虚拟化技术的转型,并且当时市场的须要,在2011年-2012年掀起了一场私有云建设的风潮。在实践过程当中,优势不少,但暴露的缺点也很多。在端游占主要市场的状况下,实践过程当中表现出来的不适尤为明显。

       a.虚拟机时钟不许

       b.虚拟机网卡,超负荷down、丢包

       c.多虚拟机间争抢cpu、内存

       d.多虚拟机间的安全访问,虚拟机与物理机间的安全管控

       e.对于关系型数据库磁盘读写慢问题突出。

       f.等等

       以上几点随着时间的推移有的已经而后解决,有的换上了代替方案。时至今日,端游在单纯的虚拟云上部署还是问题,可是随着物理、虚掩混合云出现,这个局面应该能够被打破。

2.社交化的页游

       社区化的页游戏,为何这样说呢,由于当时更多的页游信托社区入口,导入用户流量,当时最火的应该是人人网(校内网)的农场偷菜。而后是DZ论坛一堆农场插件袭卷全国,固然这一切都是为了增长用户粘稠度。可是也影响了页游技术的选型,当时基本上你们不约而的选用了于社区相同的LAMP的技术,从而下降开发成本及接入成本。固然现使用JAVA SSH2架构的页游也有。除技术选型外,同时还带入了另外一个概念:联运。联运这个概念在页游时代对于端游运维就像一个恶梦,不一样区服要随时跨服站,不一样区服要随时能够合区,全部数据再也不是以物理服务器为单位,而是要逐条打标签,再也看不到帐号,只能拿着一串长长的KEY,四处兑换,而后拿着不知道所谓的表标问第三方…….

       在这个时期,是运维开发的爆发年,随着虚拟化技术的推广,越来的越多的运维开始接触自动化运维的概念,开始了自动化运维的奋斗之路,开始了以项目管理的角度看待运维脚本开发。

黄金时代:手游

       随着私有云转为公有云、云时代推进着云计算以及移动互联网的发展,网游行业慢慢进入了手游黄金时代,云时代的变革不只挑战了整个游戏行业,也挑战了游戏运维。

       1.手游的运维工种:系统型运维,业务型运维。

       2.手游运维业务范围:阿里云、 亚马逊 、UCloud、 蓝汛CDN、 听云监控。

       3.手游游戏服务器架构:通常来说都是以一组服务器集群为一个平台单位,不一样的集群提供不一样的服务。

       06.png

       手游的架构理念是提供一组虚拟服务器,当短链接的时候,每开一组服,将玩家引导到Web集群,随后被分配到不一样的MongoDB,数据缓存用在Redis。当第一个服务器玩家请求DB时,会落到Mongo1上;当开第二个服的时候,仍是将玩家引导到Mongo1上;以此类推直到运维发现压力累积到必定程度时,便会新开一组MongoDB,Web集群也是如此但只有性能不够时才会添加,通常状况下,每50个新服可能须要添加1个MongoDB。这便实现并解释了当时在页游里但愿实现的快速开服方法。

       到此为止咱们已经回顾了一遍游戏运维从端游到页游再到手游的演变过程,不难看出,手游对于区服的架构概念不一样于端游:端游认为一个物理集群是一个服,而手游认为一个Web请求落到相应的数据库上就是一个服。这样的好处是开服合服都简单,若是前五十组服务器须要合并,实现起来很容易,由于同一个DB的数据是互通的,因此只需发一个公告,服务器加标识便可,不须要进行物理操做也不须要数据迁移。

游戏运维最强指南

       说完了游戏运维的历史,咱们要开始今天的重头戏,如何作好游戏运维?这里就用吴启超的一个冷笑话做为开始:运维为何存在?a,有服务器;b,由于研发忙不过来。无论是笑没笑,运维确实由于上面两个缘由才会诞生的。那么回到正题,想成为玩转上千服务器的游戏运维应该怎么样作呢?系统部运维构建大体以下图:

       07.png

构建CMDB

       21世纪什么最重要?信息最重要!运维所需信息要涉及:机房、物理服务器、虚拟机、交换机、网络、承载业务、业务配置、承载服务进程、端口等信息。无论是本身采购仍是购买云服务,物理服务器和虚拟服务器都作为资产存在,在采购后录入相关的资产管理,给它打上标签,属于哪一个游戏,哪一个平台,这样不一样游戏平台间就不能混用服务器了。而后,是再给不一样的服务器标识它承担的业务角色,好比它是MongoDB,咱们须要打上的标签会是大掌门-APPSTORE-MongoDB-主库-90000端口-第一组服务。这样一个基础信息录入就完成了。

       这样的信息只要是用来未来批量化部署、管理服务器使用,以及当出现故障时,运维能够很方便的查询至关的服务器以及服务信息。可是数据的及时性、准确性、可检查是一个难点。

集中批量化管理

       CMDB不是TXT文件,而是要变成EXE文件。运维在面临大量服务器的状况下,批量化工具的出现成为必须的结果,在平常的工做当中须要把其流程固化下来,为完成批量化安装、管理打下基础。大掌门喜欢使用 ssh sshpass paramiko libssh2这些基础的技术作批量管理。缘由是不用安装简单、稳定、安全、可控。固然吴启超也表示推荐你们使用在市面上流程行puppet、Ansible、SaltStack等技术,为何?简单、简单、简单!下图就是在作自动化半自动化运维过程当中的模型。 

       08.png

批量管理的难点在于:

       a.命令的并发执行,要控制各点的超时时间

       b.执行过程当中,不一样功能的不一样权限要求

       c.数据通讯安全的保证,以及可以正常解析数据指令

       d.人员帐号权限管理,权限分发及回收

       e.物理服务器、云服务器统一化安装及老项目改造

       f.网络质量不可靠的状况下,执行不完整的状况下业务功能回滚。

性能与业务监控

  • 应用性能监控

一、天天都会对服务器进行上线,升级等操做,每款游戏在一个平台的集群数在几十个到几百个不等(根据平台大小)。所以天天维护和升级服务器压力极大,服务器异常或响应慢等问题的发生会给用户体验带来伤害。 这样的隐患在于一旦发生游戏关服以后就必须对玩家进行游戏中货币和元宝的赔偿,平均每一个玩家补偿的元宝至少在5元以上,游戏币和各种游戏道具若干,以此类推因为服务器故障形成的损失可想而知。

二、大掌门使用了听云Server,可以对服务器响应慢和不可用进行定位,查看慢应用追踪和Web应用过程功能,可以实时定位消耗资源最大的代码和语句,这样就能帮助实时进行有针对性的调整和优化,而且能够快速定位问题时间,最快能到分钟级别。

009.png

三、发生高并发、服务器压力激增的状况时,平时运行正常的服务器异常几率大幅增长,平常可能的性能瓶颈点会被成倍放大,这就须要实时定位和解决性能瓶颈点,和提早进行预防改善。通常来讲,传统日志收集方式耗时耗力,效果很是很差,大掌门用了听云Server后,能够进行1分钟级定位能迅速有效发现瓶颈点。同时还结合了听云Network的压测功能,可以在服务器上线前提早发现到高压力下的瓶颈点,提早预防,避免因为高并发出现的服务器瓶颈。 

四、还有一种性能状况须要提早预防,游戏公司盈利在于玩家的充值,对于官网上从登录到充值全流程的成功率业务部门极其关注,玩家点击跳转的失败会直接致使充值付费用户的转化率。对此,大掌门经过听云Network的事务流程功能可以实时对事物流程进行警报,帮助业务部门提高用户充值的转化率。

  • 业务监控

       除了性能和硬件监控以外,对于游戏业务运转是否正常也须要创建一套标准去评判。

       对此,大掌门开发了一套适用于全公司全部的游戏的统一登录、充值、交易平台,解决了前端的SDK接入的问题,一个全部游戏或第三方的API接口统一接入的平台。在作业务型监控时,运维会要求后端开发人员写一个特定帐号,在访问现有系统时,会完整的走一遍业务流,这样就能够看到须要的业务数字。

数据仓库搭建

       008.png

       上图为大掌门数据仓库的结构图,因为数据仓库搭建的话题比较大,只是简单的从数据集市的角度来聊聊,DM指的是数据集市。因为数据集市须要面对不一样的人群,所以在数据仓库中须要创建不一样的数据集市以面对各方的查询需求,进而对数据按照业务类型进行分类。

       一、财务:关心月度充值数据

       二、商务:关心渠道结算数据

       三、运营:关心用户登录量、转化率、留存率、平台充值额

       四、产品:关心功能热度、用户体验

       五、客服:关心全部数据及玩家眷性

       对于数据方面,运维的压力来自于须要贯穿及掌握全部的数据,而且为全部部门服务。简单的如下图的ETL为例:

       007.png

数据对于运维的痛点:

       一、日志切割工做谁作?研发仍是运维。日志切割按什么规则?大小仍是日期?

       二、使用什么工具进行日志收集?scribe 仍是flume 仍是 sls?

       三、数据的准确性谁来保证?日志内容不对、切割不对、传输丢失、入hadoop过滤

       四、数据ETL过程监控,若是出现数据丢失怎么办?

       五、数据采集怎么样尽量的保证并发的采集,缩短期。

       六、数据的出现丢失或错误,总体数据回滚。谁来保证?怎么保证?

       七、大量数据下,核对数据丢失状况怎么样核对?用什么方法?

那大掌门又是如何解决这些问题的呢:

       一、将数据日志进行切割(按照业务打包日志)并合理命名。好比A登录日志,B充值日志,C消费日志。分门别类进行打包后,对数据每5分钟切割1次,并生成md5包。

       二、按照划分IDC Region。原来从本机向外传输数据会占用大量带宽,对于自己CPU的消耗大的话都会影响游戏的运行。如今按照IDC region作出划分,每一个区域中会有1-3个中心存储服务器。将切割下来的数据放到中心存储上,划分红Aip一、Aip二、Aip3等md5压缩包,此处无需作合并(缘由见3)。

       三、创建下载任务。创建好任务列表后,对每5分钟的压缩包进行下载。考虑到若是上面的步骤作了合并的话就可能会产生在传输的时候丢数据却没法肯定的状况,所以2步骤无需对数据进行合并。

       四、将下载后的任务加到Hive数据仓库里。将当天的数据放到MySQL中,以前的数据放到Hive里。当运营提出数据需求时即可以到Hive中下载数据。即便数据出现错误,按照上面创建的每5分钟的任务列表也能够从新以规定时间点将数据压缩包从新拉回来。而且该流程能够按照正向、反向双向进行。

       采用5分钟压缩包的另一个缘由在于每台服务器天天产生业务日志大概有5-6G的数据,分到5分钟后,切割完每一个文件就是20M-30M,压缩后只占用不多的空间。这样就解决了占用大量带宽的问题。

       五、数据传输后需将数据放到数据仓库(DW)中,数据下载完毕后会根据文件进行存储,当天的数据按照5分钟1个压缩包进入MySQL,MySQL则进入当天的查询。在数据仓库中,数据包按游戏及平台进行分类,这种格局的安排为了在并发时更好的运行。因为游戏与游戏之间是隔离的,所以按照这种模式是为了保证数据进行顺利并发。

 

关于听云

       国内最大的应用性能管理(APM)解决方案提供商,拥有听云App、听云Network、听云Server、听云Browser、听云Sys五条重要产品线。在真实用户体验视角下实现移动客户端、服务端与网络的性能监控与管理。

 

原文连接:http://blog.tingyun.com/web/article/detail/344

相关文章
相关标签/搜索