本周主要关注了两个事情:
- knative的作者在原生技术峰会上对knative的介绍:
- openfunction发了一篇介绍dapr在openfunction中应用的文章。
knative 云原生技术峰会
关于本次峰会的大致介绍,可见knative一个作者的博客:Knative OSS Weekly #40 – Salaboy (Open Source Knowledge),该博客里附带我本文截图的视频(可能需要科学上网)。
上周,在西班牙某城市举办了 KubeCon&CNCF 的技术交流峰会,knative的作者之一(salaboy)重点介绍了knative function。
knative-function目前处于沙箱(sandbox)阶段,即研发试验中,尚未整合进Knative项目中。开源地址:knative-sandbox/kn-plugin-func: Kn plugin for functions. (github.com)
不过呢,也介绍了knative的一些黑科技,如下:
让我看到的亮点是:istio不再是knative的必选项了(istio is optional ),至于knative为什么不再将istio作为默认的网关入口,可能还得需要研究下,一个说法是istio可能过重,knative需要更少的外部依赖。
再说knative-function,两位作者在峰会上阐述了knative-function原理以及演示部分功能。
基本上faas该有的都具备,什么多语言呀、命令行工具都是有的,亮点主要在这几个:
- 与springboot的无缝集成,
- jdk的 Function 、Consumer、Supplier 等函数表达式都可以作为编程模型。
这里还需要提到一点,knative项目最开始的贡献者,其中就包括spring的爹privotal。 并且spring native官网也将多处将knative作为上云的demo,比如这个knative-docs/docs/serving/samples/cloudevents/cloudevents-spring at cloudevents-spring · dsyer/knative-docs (github.com)。
峰会上演示了一个demo,可以看出,编写一个knative的函数是非常简单的:(uppercase这个方法行还有个@Bean注解)
该图是knative-function的技术图,从func创建->部署->服务->URL 以及eventing相关的组件:
以下是会议ppt的部分截图,重点也是关注到同步和异步函数这块的逻辑:.
Dapr在openfunction中的应用
openfunction团队在dapr官网上发布了一篇文章:《How Dapr helps to build a cloud-agnostic FaaS platform》,该文章阐述了dapr如何应用在openfunction。重点阐述了在openfunction的架构中,dapr的位置以及应用场景。
总体来说,dapr在openfunction中有这两个作用:
- dapr+keda实现了函数的异步运行时;
- 作为faas与baas交互之间的中间层。
异步运行时
openfunction也使用了Knative-serving,但是knative-serving有一个问题,就是目前他只支持同步的运行时。所以异步的运行时,openfunction的解决方案是结合kead+dapr。 怎么做的呢?
首先,使用kead来完成函数的触发和自动缩放,需要注意的是:kubernetes的hpa支持1-N的缩放,并且只能根据系统指标(比如cpu、内存)来进行缩放。而keda可以解决hpa的痛点,keda可以实现0-1的缩放,此外,支持多指标的缩放,比如根据请求量、并发量进行缩放。
然后呢,使用dapr。为不同的事件源输入类型 绑定不同类型的dapr,来完成事件的输入,可以是简单的http事件类型,也是是发布订阅模式的事件类型。函数处理的结果再输出到Dapr输出绑定或发布订阅的组件。
OpenFunction Async runtime
- Uses KEDA to trigger and autoscale async functions.
- Fetch input event from various Dapr input binding or pubsub components.
- Send functions output to Dapr output binding or pubsub components.
调用的中间层
dapr本身可以作为编程语言对接中间件的中间层,降低不同语言与后端中间件的耦合度,如:
所以,这种方式非常适合faas与baas的对接:
Dapr 相当于 FaaS 访问 BaaS 的一个统一的接口:
发表评论