Serverless下的动态缩扩容(基础知识篇)

441次阅读  |  发布于4年以前

一、基础知识


Serverless 是前端圈近两年比较火热的词汇,本文主要介绍一下Serverless下动态缩扩容相关的一些基础知识。

1.1 Docker

容器技术(Docker)技术的飞速发展带来了云技术平台的新一轮变革。Docker英文翻译:码头工人。也有翻译成集装箱。我们传统的应用,通过Docker的技术,打包成一个集装箱。就如同外贸生意中,无论什么商品打包成集装箱统一进行运输,而无需再关注商品本身的形状结构(无需关注编程时的语言类型)。Docker的本质是建立在Linux的Cgroup、Namespace等技术上的虚拟化技术;

关于如何将我们的NodeJS应用Docker化,Node官网上有下面这篇文章,比较简单大家可以参考一下:

https://nodejs.org/en/docs/guides/nodejs-docker-webapp/

用了Docker技术后,我们就能无缝迁移到具备容器基础运行环境的平台上面。

这时候,我们可以发现Docker已经能给我们带来很大的便利性。当然通过结合CI和CD方式,我们也能将我们的Docker技术应用的程度应用的更好。

1.2 K8s

如果更进一步,我们可以通过容器的编排工具进行容器编排。容器编排有kubernetes和Docker swarm、mesos。Kuberrnetes凭借着“先进的设计理念”和开源生态所落地的“用户二次创新”能力,已然成为了业内主流的容器编排方案,K8s抽象出CRDS和对应的API。其内部通过controller等监听etcd的crds资源的变化而执行不同的操作。

二、弹性缩扩容

由于业务需求在不断变化(QPS),应用资源的在线负载也处于动态的变化中(其中比如我们熟知的CPU,内存,网络等)。这时候,传统的固定的容量规划,必然会随着历史的潮流,变成动态随着QPS变化而变化。而不是固定设置在比如16台机器上。

2.1 缩扩容链路

首先跟我们前端做监控系统类似,要形成一个完整的链路。缩扩容的链路,首先通过“监控系统”采集指标;然后将采集的指标聚集到“指标服务器”,提供指标数据。最后,缩扩容组件,依据提供的指标触发缩扩容动作。

2.2 伸缩场景

伸缩场景中,由于应用的类型多种多样,他们对于云资源的需求也会不同。比如常见的应用类型可分为在线负载型、离线任务型、定时任务型和特殊场景性。比如在线负载型往往会对弹出时间敏感、机器学习等离线任务型会对价格敏感、定时任务对调度敏感、自定义伸缩和超算等异构场景对弹出稳定性敏感等。

2.3 不同维度的缩扩容

从缩扩容的对象为维度,缩扩容方案可以分为应用和集群节点的弹性缩扩容。比较好理解,就是我们应用压力大了,则扩展我们的应用数量。那我们应用数量上来了,集群节点,也就是物理机也要多,这时候也要扩物理机器的数量。

从资源的伸缩方向来分析,大致分为垂直和水平。垂直:变成分配单POD更好的内存、CPU。水平:分配更多数量的POD。比如当无法解决有状态应用类型的资源供给,则我们可以先通过垂直扩展。

从弹性缩扩容动作触发层面分析,分为:CA(Cluster Autoscaler)、HPA(Horizontal Pod Autoscaler)、CPA(Cluster Hroportional Autoscaler)、VPA(Vertical Pod Autoscaler)、AR(Addon Resizer)。CA怎么理解:就是动态增减物理机的数量。HPA:动态增减应用的pod数量。CPA:例如K8S里面有组件来控制pod数量、比如我们自定义的监控组件(要管理的东西数量多了,这些组件不会随着动态变化,那也就凉凉了)。VPA:每台POD的不同规格的CPU或者内存。Addon Resizer则具备根据集群中节点的数量来调整负载的资源请求数,目前尚不成熟。

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8