Serverless AI训练营:课时5:云原生体系下 Serverless 弹性探索与实践(四)
课时5:云原生体系下 Serverless 弹性探索与实践(四)
首先介绍一下什么是 AppCDS ,它的意思是 app class date sharing,类数据是共享的机制。它可以获取到应用启动过程中依赖的 class list。并把它当成一个共享的类文件,通过这个类文件,应用这个,下次再启动的时候,就可以通过这个共享文件来进行启动。进而它不用自己再进行整个类触发,相当于复用其他的应用的类型的文件。
映射到 sE 的部署场景,应用启动初次肯定是需要启动一遍,应用启动后会生成对应的缓存文件。然后缓存文件可以保存到 NAS 中,在下一笔或者是重启应用的时候可以用这个缓存文件,这样它有缓存文件了,它就不用再执行冷启动操作,只用类的输入法操作了。借助这个能力,整体的冷启动的效率提升了45%。
7. 弹性效率:自动扩缩
除了刚才是对整个应用生命周期的优化,也对弹性组件自动扩缩进行了优化,整个弹性伸缩包括了几个步骤。首先是弹性指标获取,接下来是执行弹性决策,依据这个指标应该缩扩多少个。
然后是执行具体扩缩操作,实际上是是 pod 的创建,pod 的生命周期就是刚才说的那些。在自动扩缩方面做了哪些优化,首先,搞了流量透明拦截的方案。对于四层指标,现在已经达到了秒级,而对于系统指标,想借助流量透明拦截的方案来实现系统的指标的比如应用的等,这些指标的秒级的获取。同时,对于弹性决策采用了对多队列并发的 reconcile,同时实时监控队列的研究情况来实现整个自动扩缩的角色。
8. 弹性能力:架构
刚才说的都是一些弹性效率的优化,再讲一下这个 SE 整体的弹性能力。SE 弹性伸缩包括了强大的指标局面,工作策略配置以及完善的通知告警机制,还有全方位可观测能力。它支持多种的数据源,比如 k8s 原生的,以及现在原生的非常火的普罗米修斯。
还有阿里云内部的云产品,比如 CMSLB,还有外部的网络的 wes。通过这些外部的数据源提供的指标,比如一些技术监控或者监控指标,这里也列了一下。比如这个CPU内存、QPS、RT、TPC连接数、出入字节数、磁盘使用率、java 线程数、GC 次数、自定义指标等。这些都可以作为弹性伸缩的输入,然后对于输入,弹性指标进行拉取和预处理之后,会执行具体弹性策略。弹性策略有很多种,比如整体是快扩快缩或者快扩慢缩,只扩不缩,不扩或者 DRYRUN,相当于一个观测模式第八个模式,以及自适应扩缩。
自适应扩缩下面会予以展开,除了弹性策略,还有一些自定义的精细的弹性配置,可以配置弹性的整体的上下线,即最大扩多少,最少扩多少,以及相应的指标区间。可以维持指标区间的稳定的状态,只有大于那个区间的上限才太扩,低于那个区间的下限才缩。以及步长比例,即每次过缩获得步长的大小。
还有冷却、预热时间,相当于扩缩之后会有一段时间是不进行扩缩的,或者是对于预热时间相当于会对于像 CPU 指标存在毛刺,即应用刚启动的时候,CPU 可能突增了,但是这个实际上是一个毛刺现象,即不需要根据突增的值来进取过多,有一个预热事件。还有一个指标的采集周期、聚合逻辑,比如取最大去取平均的,还有也支持定时的弹性策略,比如支持 corn 表达式,后续也在事件驱动的方向,比如触发的方向进行探索。
然后通过配置弹性塑料以及自定义的弹性配置之后,会触发具体的弹性行为。执行实际增减,也会执行动态的气流来保证整体的在整个弹性过程中所有实例,它的访问的状态都是正确的。以及整体的伸缩,后续在执行伸缩之后,也会通过通知告警能力来把伸缩的情况通知到具体的可能负责人。以及全方位可观测能力,对于整体的决策时间决策,决策上下文,弹性记录,还有实例状态回溯,实例数 SLA 都做到了可监控。
9. 弹性能力:场景丰富度
然后在场景丰富度上,通过上述刚才说的弹性能力,也支持多种场景。这里列了四个场景,分别是定时弹性、指标弹性、混合弹性和自适应性弹性。首先是定时弹性,它比较适用于应用负载流量周期是用户预先可以感知的情况下。这样用户就可以配置应用,可以按时间的日期、星期进行周期性的操作。比如可以早八点到晚八点保持十个实际数来应对白天流量,而夜间可能较低,维持在两个实际数甚至给它缩零了,即没流量直接缩零了。
它多用于比较传统的像证券的医疗的政府或者是教育等行业。而指标弹性是可以配置期望指标的值。SE 会使整个应用的指标稳定在用户所配的指标值的规则内。并且默认的是采用快扩慢缩的方式来保证整体的稳定性。比如可以将CPU 升到60%,或者是 QPS设置到100,然后实际数设置为2到50,这样通过设置规则之后,完全就交给 SE 进行托管,保证应用的整体可能性。这种指标弹性它适用于突增流量的case。
多用于互联网或者是游戏或者社交平台等行业。同时,SE 也提供了混合弹性,它把定时弹性和指标弹性相结合了,可以配置不同时间、日期、星期的具体的指标规则,进而更加灵活的应对复杂场景的需求。比如可以早八点,可以周一到周五早八点,早晚八点,可以设置CPU目标值是60%,实际数是10到50,其他时间可以设置它的 CPU还是60%,但是时速是2到5等等,相当于可能知道整体的大概的流量是集中在某个时间段或者星期几,但具体设置多少个时数是没有一个大致的参考,可能会有拖动流量情况,这样就可以通过混合弹性来分别提升定时和指标弹性的优势,多用于互联网教育或者餐饮等行业。
同时,SE 对于这种突增流量的场景也比较开创性的提出了自适性弹性的功能。SE 针对流量突增场景进行优化,然后内部是有一个流量激增窗口来不断监测当前的流量的状态。
并且根据这个窗口来可以判断当前时刻是否出现了流量激增以及流量激增的强烈程度是如何的,并且根据强烈程度来执行扩缩,并且在原有的算法的扩缩的行为会加一定的冗余,来实现过多的效果。在激增模式下是不允许缩容的。这是 SE 支持的多种场景。
10. 弹性能力:稳定性
接下来说一下 SE 稳定性的竞争力。稳定性是 se 弹性能力过程中建设的非常重要的一环,它是保证用户应用在弹性过程中可以按照预期行为进行扩缩,并且保证整个过程的可能性,是实验的非常关注的重点。SE 弹性伸缩整体遵循了快扩慢缩的原则。通过了多级的平滑防抖来保证执行整体的稳定性。
同时对于指标激增的场景,借助自行能力进行体验的扩容。再看一下整体的四级平滑的机制。
一级平滑是对指标的获取的周期以及每次获取,每次请求对应的监控系统,它的请求的时间窗口以及请求的时间窗口内,这些数据的聚合逻辑都可以精确化的控制。
二级平滑是可以对指标的容忍区间、容忍度弹性区间进行配置,也就是区间内不扩不缩。
三级平滑是可以对单位时间内的扩缩的比例上下线进行配置。
四级平滑是对冷却时间和预热时间进行配合。
六、severless 弹性最佳实践
1.弹性最佳实践:弹性伸缩准备
最后说一下在 SE 上整体的弹性的最佳实践。虽然实践分为几个阶段,首先是采用准备阶段。采用准备阶段是 SE 弹性伸缩可以有效的解决瞬间流量的到来,来实现自动伸缩。
首先建议配置应用的监控检查和应用生命周期管理。它保证整个扩缩作过程中应用整体可能性,确保应用已经启动完了,比如 DB已经联系上了,专案件已经初始化了,完成了。这些才执行流量的接受,这是监控检查。