【大规模容器丛集实例】雷亚游戏借助Kubernetes,3人搞定百万玩家App底层维运
2016-10-08 10:44:00 | 来源:ithome | 投稿:米阳 | 编辑:dations

原标题:【大规模容器丛集实例】雷亚游戏借助Kubernetes,3人搞定百万玩家App底层维运

雷亚游戏技术长钟志远解释,Kubernetes不如IaaS的操作,必须深入至VM层级手动建置服务,但是也不受限于PaaS环境的局限,可以在Container环境中选择偏好的技术建置开发环境。(图片来源/雷亚游戏)

席捲IT业界的Container技术,虽然听起来高不可攀,貌似只有具备扎实技术的大公司开发团队才能使用,而位在台湾的雷亚游戏,员工数只有130人,其中30人的开发团队大多数都是电脑图像工程师,后端工程师的数量一只手就能数完。雷亚游戏技术长钟志远却大胆地在正式环境中导入Docker及Kubernetes,更证明使用新技术并非大公司的专利。

成立于2012年的雷亚游戏,截至现今已经推出了5款游戏,在Google Play平台上累积下载次数超过2,300万,其游戏已在23个国家中拿下付费排行榜的第一名。在2012年年底,雷亚游戏推出音乐游戏Mandora,钟志远表示,别于过去推出的产品,Mandora必须经由网路与后端系统连线,但是当时包含钟志远在内的8人工程团队,全部都是专精影像处理,对于底层Linux、资料库、负载平衡、系统状况监控,以及网路架构等技术皆不精熟。

碰上如此多技术障碍,「我们决定尽可能使用手上有的资源,不要自己土法炼钢。」在调查多方PaaS平台解决方案后,钟志远决定选用AWS Elastic Beanstalk在Python环境进行游戏开发,并且使用第三方资料库服务商提供的服务,在拼凑各家现有现成服务后,也顺利地完成此专案,「幸好当时使用流量并不高,让伺服器能继续顺利运作。」他笑说。

钟志远表示,随着公司成长,雷亚游戏的企图心越来越大,例如企画团队将会提出更多需要工程团队实作的功能,未来也要成立专属雷亚自家的帐号系统。同时,因为开发者规模增加,雷亚游戏未来也需要更多游戏发布商(Publisher)的支援,「所以游戏伺服器不能依赖于任何PaaS平台之上,当产品交付给发布商后,得要靠他们自行部署。」最后,钟志远还计画推出更多透过网路连线的产品,因此雷亚游戏也希望将系统拆解为许多微服务,藉此减低开发成本。

但即便到了2015年,包含钟志远在内,工程团队仍然只有3位后端工程师,而这3人手上也肩负了两个专案,「人力吃紧的状况仍然存在。」如此情况让他下定决心,必须用更少人力,在一定时间内开发出可以支撑雷亚游戏营运的后端平台,而此平台必须完成三大目标:程式错误最小化,部署成本最低化,并让系统累积的技术层(Technology Stack)降到最低。钟志远解释,只要系统结构越简单,越不需要花费心思研究新技术,让团队心力集中花费在写程式以及思考游戏逻辑,才能提升工作效率,「而Container便是让我们完成这些目标的关键角色。」

雷亚游戏技术长钟志远表示,在过去使用AWS PaaS平台的经验中,也让他了解到PaaS平台就像是黑盒子,但是在Container环境中,而应用程式运作所需要的底层技术都被封装在容器中,「可以轻易了解程式结构,像是系统发布要求到结束的完整流程。」

每个后端工程师必学撰写Dockerfile

在使用Docker Container前,第一步得先撰写Dockerfile建置容器映像档。钟志远认为,透过Dockerfile,开发者可以了解应用程式运作所需要的资源,以及该如何部署开发环镜。因此他要求每一个参与后端系统开发的工程师,都必须具备撰写Dockerfile的能力,「让不同工程师自行开发的程式,也都能在他人电脑上运作。」在Dockerfile撰写完成后,开发者只要将程式码挂载于某执行目录下,便能很快速地布建开发环境。

除了能快速建置开发环境,钟志远也在持续整合(Continuous Integration,CI)流程中导入了Container。他表示,在开发者存取GitLab储存库时,首先得要完成CI脚本,让程式码部署、测速流程尽量自动化。而利用Container将程式运作环境、程式码一同封装的特性,「测试时,不仅是测试程式码,同时也可以测试运作环境。」

他也归纳雷亚游戏CI流程的四大步骤:建制映像档、测试映像档、映像档上传至远端环境,以及将部署在主干(Master)环境、预备(Staging)环境或是开发环境。

第一步是利用Docker建置容器映像档,只要映像档名称命名完成后,只要利用一行程式码就可以将映像档上传至本地端容器储存库。第二步骤测试映像档中,透过Container可以快速开启、关闭,随需即用的特性,快速建置测试环境。钟志远表示,此特性让开发团队不需要特别维护专门测试环境,例如,开发者只要利用过去CI流程中建制的脚本,就可以建置起资料库,立即进行资料库环境测试,「完成后再将资料库清理完即可。」

再者则是将映像档上传至远端环境,由于雷亚游戏使用的Google公有云服务中,有提供储存Container映像档的储存库,开发者只要对映像档简单地进行标注(tag),就可以将映像档从本地端储存库中,上传至云端储存库中。

最后则是将映像档部署于不同环境,例如主干、预备以及开发环境。由于Google容器引擎(Container Engine,GKE)背后底层平台为Kubernetes,也只需透过一行程式码,就可以将应用程式部署于Kubernetes,「我们的CI过程相当简单,利用Container建立CI流程是非常简单的事情。」钟志远说。

这也是钟志远相当中意Container技术的原因,他认为,容器技术很适合整合在CI流程中,「藉此确保映像档的运行环境一定经过测试才会上线,并且可以在异质基础架构上进行部署。」

不过在决定程式码部署于何种环境时,雷亚游戏也有一定的内部控制流程,例如,工程团队就替每一个环境都建立Git分支,当A开发者想要将程式码部署开发环境时,就必须发出合併需求,并且请钟志远检核程式码品质,同时A开发者的合併请求,也必须另外的B开发者签呈。完成这些控管流程后,钟志远便会同意将合併开发者提交的程式码,10分钟之后,Kubernetes就会将容器部署完毕,「现在所有程式码得必须经过这样的CI流程测试才可以上线。」

Kubernetes可免手动管VM,环境也不如PaaS受限

然而,究竟是哪些因素,让钟志远决定从既有PaaS环境,转移到Kubernetes、Container环境?他比喻,若Google GCE、AWS EC2这类的IaaS环境,和Google GAE、AWS EBS此类型的PaaS环境,分别处于光谱两极端,最底层为IaaS,而最上层为PaaS时,Kubernetes则位于中间偏上的光谱地带,「介于PaaS及IaaS之间,不过它比较类似PaaS。」钟志远近一步解释,Kubernetes不如IaaS的操作,必须深入至VM层级手动建置服务,但是也不受限于PaaS环境的局限,可以在Container环境中选择偏好的技术建置开发环境。

「我们希望能有一个具备PaaS环境特色的环境运行Container,让程式码可以在异质环境中运作。」钟志远表示,在过去使用AWS PaaS平台的经验中,也让他了解到PaaS平台就像是黑盒子,例如,常常应用程式部署到一半便发生错误,由于团队中并没有熟悉Linux的后端人才,也没有太多时间研究系统Log档案,碍于对PaaS平台掌握不足,也对开发团队带来很大的负担。在导入Kubernetes环境之后,开发团队也拥有较大的自由。钟志远认为,Kubernetes是一套容器调度工具,并且将系统需求引导至Container环境中,而应用程式运作所需要的底层技术都被封装在容器中,「可以轻易了解程式结构,像是系统要求发布到结束的完整流程。」

导入Kubernetes也可以延续PaaS平台的使用习惯,开发者不需要自动管理VM,同时它也具备自动弹性扩充(Auto-Scaling)、负载平衡、Log记录,以及系统监控等基础建设功能。

Kubernetes中也有一支背景程式专门蒐集各个节点的运作状况,只要透过第三方云端服务供应商,开发者即可以将系统Log资讯连接至监控系统,像是观测每个节点的CPU使用量,将资料进行视觉化。

使用Kubernetes的三大优点

除了技术决策的原因,钟志远也归纳其他Kubernetes的使用优点。第一是其开源的性质,只要使用上碰到任何异常,只要开启它在GitHub专案的页面,就可以了解其运作原理且进行除错。

第二则是Kubernetes支援多区(Multi-zone)部署功能,在其1.2.4版本中,开发者可以在资料中心内建置丛集外,丛集还可以分布在不同区间(Zone)内,藉此提升应用程式的可用性。

最后则是其运行环境很容易开发者进行除错。钟志远举例,当开发者想要利用本机电脑连线至远端环境除错时,开发者不需要透过重重的SSH连线、建立VPN等步骤,只需要一些基本指令,就可以对Container进行存取并且读取其内部运行资料。

今年开始将Kubernetes导入正式环境

雷亚游戏今年推出的音乐游戏VOEZ中,总共包含了三大系统元件:帐号系统、游戏逻辑系统,以及防作弊系统,而钟志远就导入了Kubernetes做为其底层架构,将其VOEZ切割成数个Kubernetes丛集。他解释,由于帐号系统会与其他游戏共用,所以自成一个独立丛集,而由于游戏逻辑系统与防作弊系统间的互动紧密,因此两者则整合于统一丛集中,「利用Kubernetes则可以将不同微服务进行串接。」

但是行销团队经常构思不同的推广方案,像是在周六推出免费歌曲,此时系统请求就会暴增5倍,「这对行销是好事,但是突然暴增的流量对工程师非常有压力。」钟志远表示,由于此专案只有3位工程师负责,并没有专属人力时时监控系统流量,因此,系统自动水平扩充是他认为最重要的功能。而在Kubernetes中,只需要一组指令就可以完成水平扩充功能。他举例,开发者可以自行设定参数,例如当CPU使用率达到70%时,系统会自行产生新节点(Pod)。同时,也必须要对底层VM进行类似设定,让系统在自动产生新节点时,提前产生可以容纳节点的VM,「藉此就可以透过Kubernetes实现水平扩充的功能。」

Auto-scaling

雷亚游戏行销团队经常构思不同的推广方案,像是在周六推出免费歌曲,此时系统请求就会暴增5倍。因此,系统自动水平扩展是钟志远认为最重要的功能。

除了水平扩充,还能进行流量测试、系统监控

除了部署服务、自动水平扩充外,Kubernetes还可以进行流量测试、系统监控。钟志远表示,单台电脑可以发出请求有限,而开发者可以在Kubernetes平台上部署分散式流量测试工具Locust,「过去我们就曾使用30台VM,像系统发布每秒5,000至6,000次的请求次数(RPS,Request per second)。」

而Kubernetes中也有一支背景程式专门蒐集各个节点的运作状况,只要透过第三方云端服务供应商,开发者即可以将系统Log资讯连接至监控系统,像是观测每个节点的CPU使用量,将资料进行视觉化。

从今年一月才开始使用Docker及Kubernetes的雷亚游戏,在短短半年内就成功导入到正式环境。目前VOEZ每日的活跃使用者约有100万人,必须利用100个4核心VM才能撑起丛集的运作,「而Container及Kubernetes威力之处,就是让我们在半年内,只靠三个人就完成这样的系统架构。」

?相关报导 ?Container平台新挑战:超大规模容器丛集怎幺管?

tags:丛集   底层   容器   借助   搞定

上一篇  下一篇

相关:

Container双周报第19期:资料中心作业系统DC/OS 1.8版本释出,加强Container安全及容器调度

图片来源: Docker 重点新闻(9月24日-10月7日)·DC/OS 1.8版释出,加强Container安全及容器调度资料中心作业系统DC/OS释出1.8版,Mesosphere表示,新版本除改善认证、安全功能,也强化DC/OS处理大数据以及Container

第14版OpenStack正式释出,一套API能通管裸机、VM和容器

图片来源: OpenStack 为了简化部属与操作友善性,开源云端作业系统OpenStack刚推出第14版Newton,将OpenStack定位整合引擎,主打企业能够透过单一API来管理裸机、虚拟机器与容器调度架构(Container Orchestration F

水槽老堵塞太心烦 [热事件]

原标题:水槽老堵塞太心烦教你几招技能分分钟搞定作为管道行业中不可或缺的产品水槽,功能强大,方便人们生活的同时,也在不断的与时俱进。不过很多消费者对水槽的概念还是很模糊,所以下面就由小编为大家介绍一下水槽

改善假牙压痛 “义齿”搞定!

(优活健康网记者徐平/综合报道)年纪渐长,骨质流失,牙齿松动、掉落,父母因为缺少牙齿,无法尽兴品尝美食,或是平常根本就不配戴假牙,大部分原因在于假牙的固持力和稳定度变差,造成牙床疼痛,进而影响到家中长

套装出马一键搞定办公装扮 属于OL的优雅穿搭秘籍

套装出马一键搞定办公装扮 属于OL的优雅穿搭秘籍
对于白领一族而言,办公间就像是一座竞技场,关于比美的战役总是能一触即发。穿得太靓容易成为群攻对象,穿得太低调又容易沦为不起眼的“便利贴女孩&rdq

站长推荐: