如何运维千台以上游戏云服务器

标签: 上游 服务器 | 发表时间:2016-03-17 02:55 | 作者:
分享到:
出处:http://kb.cnblogs.com/

  来自上海游族网络的运维总监李志勇,在3月4日云栖社区中带来的分享“如何运维千台以上游戏云服务器”。本次分享重点是云时代的运维,包括游戏上云部署整体方案、游戏服务器批量运维管理,并对企业选择RDS还是自建MySQL数据库给出了自己建议。

   游戏产品架构进化史

图一:游戏产品架构进化史

  经过近七年的高速发展,公司游戏服务器从100台增长到10000+台,游族整体游戏架构也经过了三个阶段的演变:

  • 公司早期广泛使用的第一代架构,当时主流的产品都是以DB+计算+前端这样的3个角色开发设计并部署,服务器以物理机为主,一个游戏区组需要2~4台服务器,不同的机器承担不同的角色。这种架构方案效率低,基本上不可能实现一天开100个区组(100个区组大概需要400台服务器);
  • 随着业务量的增长和虚拟化技术广泛使用,游族整体游戏架构更新为第二代架构,全面采用虚拟化技术,把一台高配的物理机器虚拟化成多台符合游戏需求的虚拟机来使用,并实现了ALL IN ONE的系统架构。该架构方案运维效率高,适合规模开展游戏运营,但不具备业务高可用特性,一天开100个区组成为常态;
  • 为了迎合大区大服、全球同服,游族融合了前两代架构的特点,推出了第三代架构,按角色分拆并形成服务集群模式。集群架构结合了物理机与虚拟化的优势,实现弹性扩容,游戏逻辑以服务进程或集群配置项的形式提供服务。该架构方案运维效率更高,可实现秒级开服同时具备业务高可用特性。

  基于第二代架构,游族基于OpenStack自己的私有云,最初目标是为了提高服务器利用率、降低成本和实现分钟级开服。运维团队以OpenStack G版为蓝本进行调优并修改;整个网络采用的是VLAN模式,保证最大限度与现有网络架构保持兼容;存储方面使用本地磁盘作为存储。

  通过底层优化后,游族私有云基本上可以满足业务的需求,目前90%游戏业务运行在上面,虚机规模持续保持在10000台以上,游族私有云平台没有提供WEB管理界面,日常所有的操作都是通过命令行和脚本的形式进行操作,但对于虚拟机的增删查改,重新封装了一层简洁的API接口实现与游族运维平台的对接。经过评估测验,在高峰时期,整个私有云资源利用率可达到83%。

   运维方式的转变

  与三代架构相互对应是游族运维的三个阶段:

  1. 在第一代架构上,运维基本是手工运维,技术含量并不高,纯粹是采用人与时间堆积进行,运维同学需要登录每一台服务器,顺序执行相关的命令和脚本。独立的版控服务器,通过主动推送的形式进行版本更新;
  2. 在第二代架构上,通过自动化工具进行批量运维,团队推出了使用expect写的auto批量脚本,所有操作只需登录一台集控服务器执行批量并发操作的脚本,独立的版控服务器,通过并行的主动推送;
  3. 在第三代架构上,可以实现系统化运维,多个运维系统相互协调配合实现,例如:CMDB、业务树、作业平台等。游戏区组搭建的时间基本上可以忽略(可按需求实现按条件触发或手动触发搭建操作),所有的更新操作在WEB管理平台就可完成。

   游族作业平台UJOBS

  图二:UJOBS架构及其游戏更新流程

  系统化运维过程中使用的作业平台(UJOBS)是属于C/S的架构,其核心部分由任务调度器和agent组成,通过调用API接口完成多种形式的指令下发。UJOBS简单的来说是为服务器管理提供了执行命令的通道,将所有的执行命令和脚本在目标服务器横向执行完,把输出结果记录日志里面,同时可通过WEB界面实时查看分析。任务调度器是用来全局策略控制,进行并发量控制。任务列表里面保存任务的完整信息。指令仓库保存常用的命令个脚本和上下文关联的命令组合。

  在UJOBS平台上,游戏版本更新流程如下:

  1. 版本库的版本变更自动触发构建;
  2. 从版本库拉取变更后的版本文件;
  3. 通过构建操作后,推送目标程序到分布式的全局版控服务器集群;
  4. 在作业平台下发更新操作后,UJOBS的agent取得该次更新的版控服务器地址、变更清单以及版本信息;
  5. 从版控服务器拉取更新文件到本地执行预定的更新脚本;

  同时在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、业务网关等独具特色解决方案确保了其业务量在行业内处于领先地位。

   QA环节:

  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的客户,实现国内外高可靠链路的建立。

  视频回放地址:   http://click.aliyun.com/m/4093/

  幻灯下载地址: https://oss.aliyuncs.com/yqfiles/a4fa09bc8a0a2a559df4b93839437a88.pdf

相关 [上游 服务器] 推荐:

如何运维千台以上游戏云服务器

- - 博客园_知识库
  来自上海游族网络的运维总监李志勇,在3月4日云栖社区中带来的分享“如何运维千台以上游戏云服务器”. 本次分享重点是云时代的运维,包括游戏上云部署整体方案、游戏服务器批量运维管理,并对企业选择RDS还是自建MySQL数据库给出了自己建议.   经过近七年的高速发展,公司游戏服务器从100台增长到10000+台,游族整体游戏架构也经过了三个阶段的演变:.

Ubuntu下赌ARM服务器

- Tim - Solidot
今日无数手机平板使用的低能耗处理器能否撑起未来的服务器市场. Canonical计划推出支持ARM架构的Ubuntu服务器版本. Ubuntu Linux并不是x86服务器市场的重量级选手,Red Hat才是. 但通过与ARM合作打造ARM服务器,Canonical正努力赢得更多市场份额. 计划于2011年10月发布的Ubuntu Server 11.10,将同步推出支持x86、x86-64和ARM架构的版本.

kernel.org服务器遭入侵

- Lamo - Solidot
kernel.org网站首页发布公告,声称多台服务器在本月初(8月12日前)遭黑客攻击,他们在8月28日发现了入侵. 入侵者利用一位用户凭证获得了服务器根访问权限,他们正在调查黑客是如何提升权限的;系统启动脚本被加入了一个木马启动文件;ssh相关文件被修改. kernel.org声称,他们相信Linux kernel源代码库未受影响,因为git分布式版本控制系统的特性决定了它可以很容易注意到代码变化.

Windows 搭建VPN服务器

- 洋白菜 - iGFW
Windows XP搭建PPTP VPN. 普通用户,在家里也可以搭建自己的VPN. 需要将服务器端的电脑直接放置于外网访问下,若是ADSL拨号的话,可以用此电脑直接拨号,中间不接路由器. 若是接路由器的话,可以启用NAT(网络地址转换)中的DMZ,将该服务器IP地址填入此处,那么外网访问到本路由Wan口时,就会直接转到该服务器上.

浅谈web服务器—Nginx

- - CSDN博客推荐文章
常见的web服务器有apache,Nginx,lighttpd等. 但Nginx作为一款高性能的Http和反向代理服务器,由于其高效率、简配置等优势在业内被广泛使用. 目前Taobao、新浪、赶集网、金山、豆瓣网、网易新闻等众多知名互联网企业的服务器都是采用Nginx. 根据url的不同,将HTTP请求转发到后端的应用服务器集群.

centos linux 服务器安全

- - 操作系统 - ITeye博客
我们必须明白:最小的权限+最少的服务=最大的安全. 所以,无论是配置任何服务器,我们都必须把不用的服务关闭、把系统权限设置到最小话,这样才能保证服务器最大的安全. 下面是CentOS服务器安全设置,供大家参考. 一、注释掉系统不需要的用户和用户组. 注意:不建议直接删除,当你需要某个用户时,自己重新添加会很麻烦.

angularjs与服务器交互

- - CSDN博客Web前端推荐文章
真正的应用需要和真实的服务器进行交互,移动应用和新兴的Chrome桌面应用可能是个例外,但是对于此外的所有应用来说,无论你是想把数据持久化到云端,还是需要与其他用户进行实时交互,都需要让应用与服务器进行交互. 为了实现这一点,Angular提供了一个叫做$http的服务. 它提供了一个可扩展的抽象方法列表,使得与服务器的交互更加容易.

AngularJS与服务器交互

- - JavaScript - Web前端 - ITeye博客
        对于AJAX应用(使用XMLHttpRequests)来说,向服务器发起请求的传统方式是:获取一个XMLHttpRequest对象的引用、发起请求、读取响应、检查状态码,最后处理服务端的响应. }else if(xmlhttp.status == 400) { //或者可以是任何以4开头的状态码.

Java NIO服务器实例

- - ImportNew
我一直想学习如何用Java写一个 非阻塞IO服务器,但无法从网上找到一个满足要求的服务器. 我找到了 这个示例,但仍然没能解决我的问题. 还可以选择 Apache MINA框架. 但我的要求相对简单,MINA对我来说还稍微有点复杂. 所以在MINA和一些教程(参见 这篇和 这篇)的帮助下,我自己写了一个非阻塞IO服务器.

公共 DNS 服务器 IP 地址 及各省DNS服务器

- - 企业架构 - ITeye博客
公共 DNS 服务器 IP 地址. 名称 DNS 服务器 IP 地址. 全国各地电信 DNS 服务器 IP 地址. 名称 DNS 服务器 IP 地址. 全国各地联通 DNS 服务器 IP 地址. 名称 DNS 服务器 IP 地址. Apple TV DNS 服务器 IP 地址. 名称 DNS 服务器 IP 地址.