页面加载中...

Serverless开源技术研究周报@20220527

| 云原生 | 0 条评论 | 150浏览

本周主要关注了两个事情:

  1. knative的作者在原生技术峰会上对knative的介绍:
  2. 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的一些黑科技,如下:

image-20220527114855975

让我看到的亮点是:istio不再是knative的必选项了(istio is optional ),至于knative为什么不再将istio作为默认的网关入口,可能还得需要研究下,一个说法是istio可能过重,knative需要更少的外部依赖。

再说knative-function,两位作者在峰会上阐述了knative-function原理以及演示部分功能。

基本上faas该有的都具备,什么多语言呀、命令行工具都是有的,亮点主要在这几个:

  1. 与springboot的无缝集成,
  2. 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注解)

image-20220527121602520

该图是knative-function的技术图,从func创建->部署->服务->URL 以及eventing相关的组件:

image-20220527115242666

以下是会议ppt的部分截图,重点也是关注到同步和异步函数这块的逻辑:.

image-20220527120659879

image-20220527120802858

Dapr在openfunction中的应用

openfunction团队在dapr官网上发布了一篇文章:《How Dapr helps to build a cloud-agnostic FaaS platform》,该文章阐述了dapr如何应用在openfunction。重点阐述了在openfunction的架构中,dapr的位置以及应用场景。

image-20220527113211236

总体来说,dapr在openfunction中有这两个作用:

  1. dapr+keda实现了函数的异步运行时;
  2. 作为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本身可以作为编程语言对接中间件的中间层,降低不同语言与后端中间件的耦合度,如:

image-20220527113036709

所以,这种方式非常适合faas与baas的对接:

image-20220527113118959

Dapr 相当于 FaaS 访问 BaaS 的一个统一的接口:

image-20220527113148407

发表评论

最新评论

    来第一个评论吧!