8

阿里云杨皓然:Serverless或将引领云的下一个时代

 1 year ago
source link: https://blog.csdn.net/m0_46700908/article/details/125670151
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
f82ef091cfccc4827944361ad73fab93.gif

嘉宾 | 杨皓然   整理 | 姜君泽

出品 | CSDN云原生

2022年6月14日,在CSDN云原生系列在线峰会第9期"Serverless峰会"上,阿里云Serverless研发负责人杨皓然分享了云的下一个十年,表示Serverless将会让用户以更小成本、更少代码,实现更高效率的开发迭代。

传统Server架构,在实现调度程序计算进程的同时,如果遇到进程资源过载、黑客入侵、数据量增多或者需要扩容服务器内存时,往往需要开发者对服务器进行管理处理,耗费大量时间。

而Serverless架构,开发者无需关心服务器管理的部分。Serverless由BaaS和FaaS组成,BaaS提供后端服务(如数据库存储、对象存储、API网关等),FaaS提供函数计算服务(如计算深度学习算法、机器学习算法等)。

0a311eff07b9725dadc04b29398f958a.png

Serverless入门

在介绍Serverless架构如何处理应用程序之前,先了解一下:软件工程的本质与次要的复杂度问题。

在软件开发中,我们可以把开发任务分为本质和次要两部分,其中本质部分是指如何解决这个软件的业务功能,称为本质复杂度;而次要部分是指如何把这个解决业务功能实施在系统上,可以理解为算法开发与算法部署,也叫次要复杂度。

下面通过一个简单的文件处理程序应用,用本质复杂度和次要复杂度来对比传统的Serverful和Serverless区别,进一步了解Serverless的架构和特性。

【任务:并行处理n个文件】

Serverful:

本质复杂度(Essential Complexity)

  • 实现文件处理程序

次要复杂度(Accidental Comlexity)

  • 在实施系统解决方案之前,需要考虑一些问题:

  • 需要多少台Server

  • 如果文件大小不同、处理时长不同,如何让Server负载不过载

  • 如果有更多文件,是否考虑要对Server进行扩容

  • 如果任务执行到一半,发觉处理的视频原文件是错误的,如何快速暂停或者终止任务

  • Server宕机如何处理

  • 如何确保所有任务被可靠执行,没有任何遗漏

  • ......

这些问题都需要考虑和处理,如果发生,会增加次要复杂度的工作量。

Serverless:

Serverless能帮助我们更容易实现分布式应用。如图1所示,在单机环境可以使用多线程并发处理多个文件。而在云的环境中,可以使用Serverless实现同样简洁的分布式并行任务处理。首先,编写文件处理程序代码(处理程序将在云函数的实例上执行,对应图1 Thread Pool 中的一个 thread)。然后,创建包含工作队列的云函数(Task Queue + Thread Pool),后续只需提交任务给云函数即可。

d82ae1416236558644776609e9ef8bdd.png

图1:线程池流程图

本质复杂度(Essential Complexity):

  • 实现文件处理程序

次要复杂度(Accidental Comlexity):

  • 实现和运行线程池

通过对比不难发现,Serverless在次要复杂度上,只需要很简单的步骤就可以实现系统实施,效率提升10倍。

Serverless的特质:

  • 使用消息队列、函数、对象文件等更高抽象原语设计解决方案

  • 使用Serverless计算服务,自动调度和启动实例,执行文件处理程序

  • 使用全托管对象存储服务,用于存储源和结果文件

  • 上传代码包/镜像,调用任务,查看结果

  • 查看任务状态、实例、请求级别的日志和指示,随时暂停/终止任务

总之,Serverless是一个弹性的服务架构,通过Serverless计算服务结合各种类型的后端服务,实现弹性、高可用、低成本的解决方案。

93b0e86722303697c279856abc500192.png

Serverless的典型场景与技术挑战

Serverless最适用的就是异步处理数据的场景,面对数据量较大的情况,用同步数据读取,需要等到数据全部读取完,才能后续的代码执行,而用异步处理数据的处理方式如图2所示。

b011eef9a2ed3d6b70e464db654a4082.png

图2:同步与异步处理数据方式

异步处理数据的场景有很多,比如:

  • 长耗时,消耗大量资源,容易出错的逻辑,适合于从主请求链路拆分出来,异步执行

  • 发送电子邮件/消息

  • 文档处理(转换格式,导出,……)

  • 音视频,图片处理(生成缩略图,加水印,鉴黄,……)

  • 调用外部三方服务

  • 数据清洗等

当前,理想的异步处理系统特性如下:

  • 统一资源池:

不同类型应用共享资源池,提高利用率

覆盖延时十毫秒的在线业务,倒数十小时离线业务

完备的隔离/流控能力

弹性可扩展:

系统的每个环节都具备水平扩展的能力

完备的弹性伸缩的负载均衡能力,满足动态、不可预期峰值的负载能力

实例启动速度快

开箱即用:

定时/延时触发任务

暂停/终止任务

可观测完备

业务方只实现异步处理逻辑

但现实的异步处理系统远不及理想那样,面对挑战,Serverless做出了应对和改进。

Serverless异步系统技术挑战1--可扩展性

以Slack异步任务架构pull模式为例,如图3所示,针对异步数据处理场景,会出现多个问题。

dd1d3a5b1889d22525e12982736325c3.png

图3:pull模式

  • 当任务入队速度持续超过出队速度,Redis实例内存有被打爆的风险。由于出队操作需要消耗Redis内存,所以没有手段让系统恢复正常

  • Worker无法独立于Redis实例扩展,增加Worker将加重Redis实例的负载

  • 受制于每个Redis实例的处理能力,不同的Worker和不同的Redis实例连接,增加了负载均衡的难度

  • K8s HPA等伸缩模式难以满足异步任务的要求,用户需要根据排队任务数等指标伸缩的能力

针对这些技术挑战,Serverless提出了三种可扩展性的方案。

 1. 解耦队列和Worker资源

引入请求分配器(dispatcher),解耦队列和Worker。Worker的伸缩取决于待处理的异步请求数和用户的资源配额,不受队列能力限制,如图4所示。

e25e4335cfcf4f2325b141e5ab9b45ba.png

图4:函数计算异步任务架构-push模式

队列/分配器资源管理

  • 根据队列和分配器节点的负载高低,进行节点的扩缩容

  • 扩缩容频率低

Worker资源管理

  • 扩容:实例并行处理请求数达到上限,CPU利用率超过一定阈值

  • 缩容:没有流量时先冻结实例,若一段时间持续没有流量,则销毁实例

  • 扩缩容频率高

 2. 自适应的请求分发

  • 分配器需要根据下游处理能力动态调整分发能力

  • 将请求处理函数的流控错误作为满负荷处理的标志

  • 自适应分发采用类似TCP拥塞控制中的AIMD算法,如图5所示

8a5e9fbd0a82591ea71be557f5ba83f6.png

图5:自适应分发模式

3. 基于Partition的负载均衡

  • 从资源和运维效率的角度,应用应当共享资源,因为大量应用都是长尾、稀疏调用的

  • 多租户环境对资源隔离提出了很高的要求,流量的路由和迁移能力非常重要。当应用流量快速增加时,通过负载分片和调度实现负载均衡,如图6所示

1adf7eecf356844750fdfa81d6b1c507.jpeg

图6:函数计算异步任务架构

Serverless异步系统技术挑战2--GB级镜像实例秒级启动

  • 典型负载模式:一次性提交大量任务,启动数百甚至数千实例处理

  • 共享存储带宽有限,大规模实例启动打满带宽

  • 共享存储延时10-20ms,比块存储慢10倍以上

针对这样的技术挑战,Serverless提出了解决思路:

  • 镜像中存在大量冗余数据,按需加载远端数据

  • 结合多种存储服务,构建层次化的缓存体系

  • 通过负载感知的方式,最大化缓存效果

GB级镜像实例秒级启动的架构如图7所示。

c839cd77b6212ed79d632c6c5e611493.png

图7:GB级镜像实例秒级启动架构

1b1a99897c842b6b2ae4988e9c1fa7fb.png

Serverless常见问题

问题1–Serverless架构新颖?

Serverless不是一项新技术,阿里云很早就将其广泛应用于数据库、大数据等,同时在阿里集团、在公有云有大量实践

问题2–Serverless应用需要大量改造,成本高

  • Serverless支持容器镜像打包应用

  • 有完整的微服务框架应用和迁移方案,实现零代码改造,迁移成本低

  • Serverless资源利用率高,能很好地降低成本

9cb81612cfeaafbef65bc1c06d3b2e09.png

总结

当前,Serverlss化形态的云产品越来越多,从而全面降低了用户使用云的成本,提升了开发者的研发效率,节约了软件开发人员花在服务器上部署系统方案上的时间,从而更加专注于业务逻辑的实现。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK