您当前所在位置: > 爆料站 > 君子堂

莉莉丝游戏「剑与远征」项目组主程:探讨容器和函数计算的“弹性”

时间:2021-10-13 12:51:48  来源:  作者:网络转载

最近这些年,以容器和函数计算为代表的云原生技术,正用一种全新的方式改变着我们构建和部署应用。AFK(剑与远征)在上线之前也完成了战斗校验场景容器化的落地,容器为我们带了简易运维,弹性伸缩等好处。但在上线后,我们逐步发现容器在弹性伸缩时延上面的不足,转而将目光聚焦到了另外一种云原生技术:函数计算。本文结合了AFK的实践,来分享一下两种云原生技术在弹性计算的使用、原理和思考。

——拉德,AFK(剑与远征)主程

一、相关概念

什么是弹性伸缩

系统能够随请求的增减,实现系统扩容,实现高可用,在业务下降的时候,能实现系统缩容,减少成本。简而言之,是一种低成本的可扩展计算。


什么是冷启动

冷启动是指一个应用从无到可以对外服务的过程。在游戏交互领域,一般5秒以上的等待时间,玩家是无法接受的。

什么是容器技术

Docker几乎是容器的代名词,Docker提供了将应用程序的代码、运行时、系统工具、系统库和配置打包到一个实例中的标准方法。Kubernetes (以下简称K8S)是容器集群的管理系统,可以实现容器集群的自动化部署、自动修复,自动扩缩容、无缝应用升级等功能。


什么是函数计算

函数计算又称Faas,全称Function as a service,是 Serverless(云计算的方向之一) 的子集,也是整个 Serverless 的核心。Serverless ,又称 "无服务器",是开发者将服务器逻辑运行在无状态的计算容器中,完全由第三方管理的。Faas具备细粒度调用,实时伸缩,无需关心底层基础设施等特性。

什么是战斗校验

战斗校验是在服务器跑的一段战斗逻辑代码,用来验证玩家客户端上传的战斗是否有作弊的情况。

战斗校验的弹性需求

战斗校验一般需要逐帧计算,CPU消耗会非常高,通常1队v1队的战斗需要n毫秒,而5队v5队的战斗则需要相应5n毫秒。以AFK国服为例,每天跨天重置任务,同时也是整个战斗校验集群的业务高峰,而每天夜里,随着在线人数的减少,整个战斗校验集群进入业务低谷期。两者CPU消耗差异有10倍之多。

二、容器的弹性伸缩

容器是通过轮训监控的指标数据,根据算法执行调度实现自动伸缩,主要由应用层维度(Pod)和资源层维度(Node)两部分配合调度完成。


应用层维度

应用层维度从应用场景来看,分为水平扩容和垂直扩容,篇幅有限,本篇介绍主流的水平扩容:

1. HPA

Horizontal Pod Autoscaling,是Kubernetes中实现POD水平自动伸缩的功能。HPA组件会每隔30s从Metrics Server等监控组件获取CPU等监控指标,根据算法计算出期望副本数,通知Depolyment等组件执行扩缩容。

扩缩容算法:Desired Pods = ceil(sum(MetricValue) / Target)

举个例子:当前HPA设定CPU阀值:70%。当前有3个Pod,CPU都是90%。那期望的Pod数量=ceil(90%*3/70%) = 5,此时HPA会进行新建2个Pod,进行水平扩容。

HPA CPU

按CPU伸缩配置比较容易,但是有个缺陷,如果毛刺带来的负载大于100%,HPA的认知就会被限制,无法通过一次计算就得出还需要多少个POD,就需要多次调整。每次调整中间还需要间隔一个扩张冷却周期,默认3分钟。如下图,Pod想从1个变成8个,需要经过3次计算周期。


HPA QPS

所以HPA就有了Custom metrics扩展,常用的是QPS。通过配置单个Pod的QPS>10,当流量操作QPS阀值时候,集群就会自动扩容。QPS是一个潜在的约定,就是集群的每秒的请求消耗CPU比较平均,当特定时间点某种CPU消耗较多的请求大幅增加时候,QPS无法正确衡量。导致集群扩容的数量不能满足业务需求。

2. CronHPA

结合上文,我们会发现HPA的扩容调度有一定时延,业务遇到毛刺时候,HPA无法及时调整Pod到业务期望数量,造成部分应用不可用。这种业务抖动会给玩家带来非常差的体验。为了解决这个问题,我们引入了CronHPA,有点像Linux的Crontab,根据业务之前周期性的规律,在业务高峰前10分钟提前准备好资源,满足高负载的需求。CronHPA跟HPA不同,HPA是官方版本提供了实现方式,CronHPA基本要依赖于开源社区或者云厂商的实现方式。AFK所用的是阿里云的CronHPA,这里讲一下CronHPA的演进:

现在大部分厂商的CronHPA

目前大部分云厂商还是这种实现方式,包括之前的阿里云,CronHPA和HPA都是直接控制Deployment,来调度应用扩缩容的,因为二者无法彼此感知,所以CronHPA扩张上来的Pod很快会被HPA回收,两者并不兼容。如下图所示:


当时为了同时获得HPA和CronHPA的特性,AFK一直保持着双SVC的配置,分别支持HPA和CronHPA。每次和阿里云容器同学交流,我们总是敦促对方改进。

阿里云的新版CronHPA

终于阿里云的CronHPA终于在2020年3月开始兼容HPA了,算法也比较有意思,这里列一下实现方式:

① CronHPA控制的TargetRef从Deployment变成了HPA

② 扩容时候调整HPA的Min值= max(CronHPA Scale Up Replicas, Current replicas)

③ 缩容时候调整HPA的Min值= min(CronHPA Scale Down Replicas, Current Replicas)

我们可以看到,这个实现方式一直在调整的是HPA的Min值,而非当前的Replicas数量。这样一个设计有个很巧妙的地方,比如我们的HPA是min/max:10/99999,n点-n+4点(n点为最高峰)是业务高峰。我们可以配置成n-1点50分扩容到100, n点10分(不需要等到12点)缩容到10。我们发现尽管n点10分 HPA的Min已经调整
资源转载网络,如有侵权联系删除。
相关下载

玩家评论

联通容器规模超过20w+,容器技术仍面临四大挑战

  2021容器云职业技能大赛日前正式拉开帷幕,本次大赛主题为“聚力变现容器价值”。会上,中国联通软件研究院公共平台与架构研发事业部总经理冯强表示,容器作为云详情>>

阅读: 3
日期: 2021-07-01
《纳迪亚之宝》第四个容器在哪 第四个容器位置一览

导 读 纳迪亚之宝第四个容器获取方法第四个容器不刷新怎么办 纳迪亚之宝第四个容器获取方法。不少玩家在游戏中遇到了搜集容器的时候第四个容器不刷新的问题,下面带来具体的详情>>

阅读: 47
日期: 2021-05-28
魔兽世界符文容器怎么获得 符文容器获取方法

魔兽世界符文容器怎么获得。魔兽世界凭借冒险、完成任务、新的历险、探索未知的世界、征服怪物等吸引着玩家们的喜爱,不过有不少人好奇魔兽世界符文容器怎么详情>>

阅读: 4
日期: 2021-04-15
魔兽世界9.0装满容器任务怎么做-wow9.0装满容器任务流程攻略

魔兽世界9.0装满容器任务怎么做?装满容器任务流程是什么?还不清楚的小伙伴看过来,这里234游戏网小编为大家带来魔兽世界9.0装满容器任务流程攻略的详细介绍!有兴趣的小详情>>

阅读: 8
日期: 2020-12-12
魔兽世界9.0符文容器怎么获得 符文容器获取方法一览

魔兽世界9.0符文容器怎么获得,魔兽世界是依托魔兽争霸的历史事件和英雄人物所制作的第一款网络游戏,属于大型多人在线角色扮演游戏。9.0版本暗影国度11月24号详情>>

阅读: 29
日期: 2020-12-05
魔兽世界9.0符文容器怎么获得-wow9.0符文容器获取攻略

魔兽世界9.0符文容器怎么获得?符文容器获取途径是什么?还不清楚的小伙伴看过来,这里234游戏网小编为大家带来魔兽世界9.0符文容器获取攻略的详细介绍!有兴趣的小伙伴不详情>>

阅读: 5
日期: 2020-12-04
魔兽世界9.0符文容器攻略 9.0符文容器效果及获取方法

魔兽世界9.0符文容器有什么效果,目前还有很多玩家都不清楚,同时快速的获取方法是什么呢,还不知道的玩家一起来看看吧。 魔兽世界9.0符文容器攻略 在嘉年华上暴雪曾提到,我详情>>

阅读: 5
日期: 2020-12-03
魔兽世界9.0符文容器是什么?符文容器获取方法介绍[多图]

游戏魔兽9.0符文容器用什么方法能得到?在最后一片的任务中,需要获得符文容器,但是很多人还不知道符文容器是什么,怎么得到,所以小编会在下面的攻略里面为大家带来符文容器的获详情>>

阅读: 0
日期: 2020-12-03
魔兽世界9.0符文容器获取方法:最新版符文容器获得攻略[多图]

魔兽世界符文容器是什么?9.0符文容器的获取方法其实很简单,玩家是可以自己制作的,当然也能购买,至于符文容器的具体获取方法下面会有详细的介绍,不清楚的可以查看小编带来的攻详情>>

阅读: 2
日期: 2020-12-03
博人传:一式能感知川木的位置,川木无处藏身,无法避免成为容器_寄生

原标题:博人传:一式能感知川木的位置,川木无处藏身,无法避免成为容器 一式是非常擅长战斗的大筒木,实力方面和辉夜平级,借助战斗经验可强于辉夜。因此,辉详情>>

阅读: 10
日期: 2020-08-13
《龙之死印》灵魂容器掉什么 灵魂容器掉落内容汇总

导 读 灵魂容器是玩家在《龙之死印》中一个任务地图,本关需要收集8个旗子解锁,难度比较高,但是掉落很不错,下边就给大家带来“苦味の西瓜”分享的龙之死印灵魂容器物品掉落表,大详情>>

阅读: 16
日期: 2020-05-25
容器即未来?

原标题:容器即未来? 作者 | Ian Eyberg 译者 | 天道酬勤 责编 | 徐威龙 封图| CSDN 下载于视觉中国 前几天作者看到了这则推文,可以这么说,是它促使我详情>>

阅读: 12
日期: 2020-03-29
华为发布业界首个全容器化5G核心网

原标题:华为发布业界首个全容器化5G核心网 据华为网站9月26日消息,近日,首届5G核心网峰会在西班牙马德里举行。在峰会期间,华为发布业界首个全容器化5详情>>

阅读: 33
日期: 2019-09-27
公开课|百度天工物联网基础平台的微服务容器化落地实践

原标题:公开课|百度天工物联网基础平台的微服务容器化落地实践 本文整理自中信出版社《物联网时代》 在采用IoT的世界中,改变既是IoT引发的,也是你的详情>>

阅读: 42
日期: 2019-09-15
助力环保 一英企拟禁员工带一次性塑料容器上班

原标题:助力环保 一英企拟禁员工带一次性塑料容器上班 【新华社微特稿】出于环境保护需要,一些企业如今不再使用一次性塑料餐具和吸管。英国一家小详情>>

阅读: 28
日期: 2019-09-07
wow 链齿容器怎么获得

最近小编收到很多问题,其中一个就是下面小编为大家整理一下关于wow 链齿容器怎么获得的方法的步骤,希望这些方法能够帮助到大家。步骤分解1首先,肩部附魔 材料收集特效及获取源详情>>

阅读: 94
日期: 2019-06-22
节奏海拉鲁心之容器怎么全收集_全心之容器获取攻略

《节奏海拉鲁》拼满一个大心之容器就可以提升一点血量上限,心之容器除了BOSS战获得之外,还分布在很多地方,下面小编就为大家带来一篇“AbdallahSmash026”分享的全心之容器获详情>>

阅读: 42
日期: 2019-06-20
黑暗之魂2灵魂容器怎么用 boss灵魂容器使用方法

《黑暗之魂2》是一款动作冒险游戏,游戏还是有 一定的上手难度,有些设定让许多玩家都摸不着头脑。有玩家问黑暗之魂2灵魂容器怎么使用?相信还有不少玩家也还不知道... 详情>>

阅读: 9
日期: 2019-04-14
《空洞骑士》全容器碎片获得方法介绍 容器碎片怎么获取?

1>空洞骑士容器碎片怎么获取?想必很多朋友都还不是很清楚吧,所以呢小编接下来给大家带来的就是空洞骑士全容器碎片获得方法介绍,需要的朋友还不快进来看看?详情>>

阅读: 108
日期: 2019-01-04
《上古卷轴5》空容器和锁定容器上没有钻石符号MOD

《上古卷轴5》空容器和锁定容器上没有钻石符号MOD补丁类型:游戏MOD补丁语言:简体中文更新时间:2018/07/0511:26:28补丁大小:1.4MB游戏标签:暴力冒险动作角色相详情>>

阅读: 5
日期: 2018-09-16
《空洞骑士》纯粹容器怎么打?纯粹容器招式分析

1>纯粹容器有威胁性的招式不少,导致许多玩家卡在这儿。今天呢小编给大家带来的就是空洞骑士纯粹容器招式分析,需要了解的还不快进来看看。详情>>

阅读: 41
日期: 2018-08-31
GTC2018:Nvidia 宣布支持 Kubernetes 容器的 GPU 加速

虽然等待了很长一段时间,但在今日的GTC大会主题演讲期间,NvidiaCEO黄仁勋还是宣布了一件令人欢欣鼓舞的事情——NvidiaGPU已经支持由Google孵育的Kubern详情>>

阅读: 11
日期: 2018-08-30
Docker Hello World容器运行报错的解决办法

费了好大力气从Docker官网下载了DockerCommunityEditor的安装镜像,Docker.dmg,总共将近500MB,双击进行安装:命令行里使用dockerversion查看版详情>>

阅读: 3
日期: 2018-08-30
用 Serverless 计算取代容器?

像Docker这样的容器技术非常强大,但技术人才难求。无服务器计算具备同样的优点,而且技术人才容易找到。通常,主流企业接受尖端技术的速度缓慢,从公有云到NoSQL技术都是初创公司和其它早期采用者们占详情>>

阅读: 3
日期: 2018-08-29
一个圆柱形玻璃容器底面直径是10厘米,把一块完全浸在这个容器的水中的铁块取出后,水面下降2厘米。这

小编为您搜罗的答案:容器底面直径:10÷2=5厘米铁块体积:3.14×5×5×2=157立方厘米详情>>

阅读: 34
日期: 2018-08-25
《黑暗之魂2》闪烁榍石和灵魂容器的获得方法

  闪烁的榍石是升级你们特殊装备的必要道具,在《黑暗之魂2》的游戏中,闪烁的榍石是十分稀有的。大部分商人也没有闪烁的榍石,更别说卖了。不过,在游戏中你可以培养它详情>>

阅读: 18
日期: 2018-08-22
Java容器Jetty7、8、9各大版本之间的区别?

小编为您搜罗的答案:Jetty是一个开源的servlet容器,它为基于Java的web内容,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式详情>>

阅读: 8
日期: 2018-08-19
微软Visual Studio 2017容器工具包扩大支持范围,容器内直接排错

微软在今年度开发者大会Build上,更新VisualStudio2017至15.7版本,强化排错以及诊断能力,同时也发布了VisualStudio201715.8预览版,开始在ASP.NE详情>>

阅读: 18
日期: 2018-08-17
(3分) 某同学在家做实验:在一个玻璃容器中加入100ml水,向水中...

小编为您搜罗的答案:试题答案:分子是在不断运动的????分子间有间隔??将一滴红墨水滴入到一杯蒸馏水中,一段时间后蒸馏水变红,证明分子是在不断运动的详情>>

阅读: 8
日期: 2018-07-25
MongoDB 4.0发布,支持无服务器和容器管理

为了满足现代IT架构的需求,MongoDB发布了MongoDB4.0,着眼于云和无服务器计算以及容器管理。此次发布标志着多文档ACID事务的普遍可用性,这是三年前MongoDB收购WiredTig详情>>

阅读: 11
日期: 2018-06-30
《辐射4》容器界面显示物品重量单位MOD

《辐射4》容器界面显示物品重量单位MOD补丁类型:游戏MOD补丁语言:简体中文更新时间:2015/11/1614:35:33补丁大小:148.0KB游戏标签:刺激冒险挑战相关补丁专题:详情>>

阅读: 52
日期: 2018-04-25
安卓容器app怎么用 容器app怎么修改机型

容器app是一款无限制多开客户端应用,这款容器app没有广告不用付费,通过容器app可让您尽情享受多开的便捷,并且容器软件还具有sd卡重定向功能,只需几个简单的操作就能详情>>

阅读: 21
日期: 2018-04-17
Implosion聚爆容器位置 Implosion所有容器位置详解 详解怎么玩

《聚爆implosion》游戏中有一关就是需要打破所有容器,但是不少的玩家都在说不知道容器的位置在哪。下面就来看看聚爆implosion所有容器位置介绍。最容易漏掉的应该就是因为视角关详情>>

阅读: 56
日期: 2018-03-31
精彩推荐
相关专题