本文是 serverless 入门与实践 的第9篇, 是学习笔记的第8篇
从今天开始学习<华为 Serverless 核心技术与实践>, 计划: 1篇前言 + 10篇/章 + 1篇总结, 此为第2篇
Serverless的基础知识、关键技术和生态现状
微服务面临的挑战
- 微服务的粒度仍然比较大
- 微服务开发仍有较高门槛
- 微服务基础设施管理、高可用和弹性仍然很难保证
- 基础设施的成本依然较高
什么是Serverless
- 2012年,时任Iron.io的副总裁Ken提出了Serverless的概念
- 2014年,AWS推出Lambda函数计算服务
- 2016年Google将其作为mBaaS(移动后端即服务)的Serverless解决方案推出,以及安卓应用开发的主流云服务
- 2021年,华为云将云函数、云数据库等核心构建类服务已面向全球HMS生态的开发者开放
Serverless的定义 -- 维基百科
- 云服务商按需分配计算机资源,开发者无须运维这些资源,不用关心容器、虚拟机或物理服务器的容量规划、配置、管理、维护、操作和扩展。
- Serverless计算无状态,可在短时间内完成计算,其结果保存在外部存储中。
- 当不使用某个应用时,不向其分配计算资源。
- 计费基于应用消耗的实际资源来度量。
目前,Serverless服务主要分为FaaS和BaaS
- 函数即服务(Function as a Service,FaaS)
- 后端即服务(Backend as a Service,BaaS)
Serverless关键技术
- 事件源(Event Sources)
- 触发器(Trigger)
- FaaS控制器(FaaS Controller)
- 函数实例(Function Instance)
- 函数编程模型(Programming Model)
- BaaS平台
- 函数编程模型
- 快速扩容
- 快速启动
- 高效连接
- 安全隔离
Serverless带来的核心变化
Serverless的技术创新
- Serverless是事件驱动架构的延伸
- Serverless是事件驱动架构的延伸
- Serverless是不可变基础设施的最佳实践
Serverless的其他优点
- 加快交付的速度
- 全功能团队构建更加容易
Serverless和微服务的差异
Serverless生态现状
- 平台
- 框架
- 事件总线
- 函数工作流
- 工具
平台
支持1∶1触发的AWS Lambda
AWS在2020年re:Invent上发布的一些新特性会加速这一趋势
- 计费单位改为1ms
- 内存以1MB为步长计费
- 最大支持6VCPU和10GB内存配置,并支持AVX2指令集
- 自定义容器
通过以下三种方式加速开发者向Lambda迁移
- 降低成本
- 扩大应用场景
- 降低容器应用迁移成本
Azure Function
支持数据绑定的Azure Function
Knative
Knative基于Kubernetes,主要由两大部分组成:Serving(应用容器运行,基于Istio能力实现负载均衡、流量管理及自动扩容)和Eventing(支持事件驱动的应用,对接云服务商或其他事件源)
OpenWhisk
支持多平台部署的OpenWhisk
OpenWhisk是IBM发起的开源Serverless平台,现已被捐献给Apache基金会
- 框架
- 跨平台开发框架Spring Cloud Function
- 跨平台部署工具Serverless Framework
- 2015年,个人开发者Austen Collins使用Node.js独立开发了Serverless Framework。
- 事件总线
- 云服务事件总线EventBridge
- 事件规范CloudEvents
- 函数工作流
- 基于JSON的函数工作流Step Function
- 基于事件溯源编排的Azure Durable Function
- 基于函数编排的OpenWhisk Composer: OpenWhisk抽象了一套编排的DSL接口
工作流(Workflow)是对工作流程及其各操作步骤之间业务规则的抽象及概括描述。在微服务架构下,通常会使用基于BPMN或更轻量化的工作流引擎来编排微服务
Serverless的挑战与机遇
云计算6大优点
- 无限计算资源按需呈现。
- 用户无须承担对服务器的运维工作。
- 按照使用的计算资源付费。
- 借助超大型数据中心的规模效益大幅降低成本。
- 通过资源虚拟化简化运维,提高资源利用率。
- 通过复用来自不同组织的工作负载,提高硬件利用率
挑战
- 函数生命周期有限,已加载的状态无法复用
- 数据迁移成本高,影响运行效率
- 启动性能不佳
- 函数不可寻址,无法直接通信
- 缺少异构硬件(如GPU/ARM等)支持
需要支持有状态的Serverless实现,使其更高效地应用于以下场景: CloudState Dapr
- 机器学习训练和推理:模型需要在内存中动态替换,推理要保证低时延。
- 实时分布式流处理:如实时预测和推荐,以及异常检测。
- 用户会话、购物车、缓存:如管理跨请求、可缓存并可持久化的会话状态。
- 分布式事务工作流:如Saga模式、工作流编排、回滚和补偿等。
- 共享协作的工作空间:如文档协作编辑、聊天室等。
- 分布式系统选举:其他标准的分布式系统的协议协调的场景。
总结
Serverless出现的时间不算晚,近年来随着移动应用、小程序、IoT等领域的发展,呈现飞速增长的态势。从这些应用场景来看,Serverless体现出相对微服务的一些独特优势。但受限于Serverless本身面临的一些挑战,在较长的一段时间内,微服务和Serverless两种开发方式将会共存,并且互相组合、渗透。例如,一些云服务商推出了Serverless容器服务的概念和产品形态,Azure Function也可以基于Kubernetes运行。无论发展过程如何,Serverless将会成为未来云时代默认的计算范式。