什么是serverless
serverless的全称是serverless computing无服务运算,又被称为函数即服务(faas),是云计算的一种模型,以paas为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来提供,国内外比较出名的产品有Tencent Serverless、AWS Lambda、Microsoft Azure Functions 等
什么是 Knative
knative 是谷歌开源的 serverless 架构方案,旨在提供一套简单易用的 serverless 方案,把 serverless 标准化。目前参与的公司主要是 Google、Pivotal、IBM、Red Hat,2018年7月24日才刚刚对外发布,当前还处于快速发展的阶段,主要是为了解决容器为核心的serverless应用的构建、部署和运行的问题
Knative优势
开发者只需要编写代码或者函数,以及配置文件然后运行build和deploy就能把应用自动部署到集群
其他事情都是Knative平台自动处理,这些事情包括
- 自动完成代码到容器的构建
- 把应用(或者函数)和特定的事件进行绑定:当事件发生时,自动触发应用(或者函数)
- 网络的路由和流量控制
- 应用的自动伸缩
和标准化的 FaaS 不同,knative 期望能够运行所有的 workload : traditional application、function、container。
knative 核心概念和原理
为了实现 serverless 应用的管理,knative 把整个系统分成了三个部分
- Build:构建系统,把用户定义的函数和应用 build 成容器镜像
- Serving:服务系统,用来配置应用的路由、升级策略、自动扩缩容等功能
- Eventing:事件系统,用来自动完成事件的绑定和触发
Build 构建系统
build 的功能是把用户的代码自动化构建成容器镜像,初次听起来很奇怪,有了 docker 之后有一个 Dockerfile 不就能构建容器了吗?为什么还需要一个新的 Build 系统?
Knative 的特别之处在于两点:一是它的构建完成是在 kubernetes 中进行的,和整个 kubernetes 生态结合更紧密;另外,它旨在提供一个通用的标准化的构建组件,可以作为其他更大系统中的一部分。
正如官方文档中的说的那样,更多是为了定义标准化、可移植、可重用、性能高效的构建方法
Serving:服务系统
serving 的核心功能是让应用运行起来提供服务。虽然听起来很简单,但这里包括了很多的事情
- 自动化启动和销毁容器
- 根据名字生成网络访问相关的 service、ingress 等对象
- 监控应用的请求,并自动扩缩容
- 支持蓝绿发布、回滚功能,方便应用方法流程
knative 是建立在 kubernetes 和 istio 平台之上的,使用 kubernetes 提供的容器管理能力(deployment、replicaset、和 pods等),以及 istio 提供的网络管理功能(ingress、LB、dynamic route等)
因为 kubernetes 和 istio 本身的概念非常多,理解和管理起来比较困难,knative 在此之上提供了更高一层的抽象(这些对应是基于 kubernetes 的 CRD 实现的)。
Eventing:事件系统
serving 系统实现的功能是让应用/函数能够运行起来,并且自动伸缩,那什么时候才会调用应用呢?除了我们熟悉的正常应用调用之外,serverless 最重要的是基于事件的触发机制,也就是说当某件事发生时,就触发某个特定的函数。
事件概念的出现,让函数和具体的调用方能够解耦。函数部署出来不用关心谁会调用它,而事件源触发也不用关心谁会处理它。
Knative 目前的状态
knative 是 2018 年 7月才刚刚对外开放,虽然内部已经开发一段时间,但是目前还处于非常早前的阶段(从支持的事件源和 bus就能看出来)。目前代码还不稳定,很多实现都是 hard-coded。
knative 也是脱产于 google 和 CNCF,因此整个社区运行方式和目标与之前的 kubernetes 以及 istio 非常相似。社区根据组件分成多个 Working Group,每个 Group 独立负责自己的功能,所有的开源活动(文档、视频、代码)都是开放的。另外,CloudEvents 作为 knative 依赖的标准,目标也是成为 CRI、CNI、CSI 这种类似的标准。
knative 社区目前非常活跃,已 github.com/knative/serving
项目为例,一个月已经有 600+ star,目前有 60+ contributor,900+ commits,而且入门的文档和教程都已经非常全面。