4. OpenFaaS组件

OpenFaaS组件分析

基础组件

重要组件加粗):

  • Gateway 网关

  • Provider 应用编排调度器提供方(我的理解)

  • WatchDog 函数监控

  • Queue-worker 消息队列服务

Queue-worker 消息队列服务,用于异步函数

其他组件:

  • Promethus 用于监控

  • AlterManager

  • Grafana 图表可视化

  • UI界面,Gateway内置的

  • 函数商店

以下依次分析基础组件:

Gateway 网关

  • 为函数调用提供路由,起到一个基础转发的功能

  • 内置UI界面,可访问函数商店

  • Promethus收集监控指标

  • 接受AlterManager通知,自动扩缩容

在上面的图中,

  • 用户通过faas-cli、UI或REST API请求访问OpenFaaS的Gateway网关 /function/<name>/ui;

  • 请求会被转发到Provider,如图中的Kubernetes;

  • Provider会调用函数,具体是通过Watchdog调用forked process

  • Prometheus从Gateway收集监控数据

  • AlertManager根据设置的报警规则,通知Gateway /system/alert自动扩缩容。

    • 函数可以通过使用faas-idler或REST API再缩容到0。

除了自动扩缩容,也可以手动调用扩缩容API。

Provider

目前官方支持的Provider有:

  • faas-netes- Kubernetes provider

  • faas-swarm - Docker Swarm provider

其他参考https://github.com/openfaas/faas/blob/master/community.md#openfaas-providers

OpenFaaS是少数支持Nomad的FaaS运行时

Provider封装提供的接口应该有:

  • List/Delete/Create 函数

  • 设置函数副本数

  • 获取函数副本数

部署函数的细节也是通过Provider提供的接口完成的

WatchDog 函数监控

经典的WatchDog,如下,每个请求都会fork一个函数进程执行。经典的WatchDog模式有很高的可移植性,但性能不高。

新的WatchDog项目of-watchdog,具有更高的性能,默认http模式。

此版本的监视程序为高吞吐量带来了新功能,并允许重用昂贵的资源,如数据库连接池或机器学习模型。主要区别在于能够在调用之间保持函数进程温暖,可以重复使用相同的进程来抵消fork进程时的延迟。

Queue-worker

Queue-worker组件提供消息队列服务,用于异步地处理事件。目前Kafaka还在PR中。

Queue-worker使用NATS和NATS Streaming。Gateway是发布者,Queue-worker是订阅者。

NATS消息传递支持在计算机应用程序和服务之间交换的数据分段为消息。这些消息由主题解决,不依赖于网络位置。这在应用程序或服务与底层物理网络之间提供了一个抽象层。数据被编码并构成消息并由发布者发送。该消息由一个或多个订户接收,解码和处理。

NATS使程序可以轻松地跨不同环境,语言,云提供商和内部部署系统进行通信。客户端通常通过单个URL连接到NATS系统,然后订阅或发布主题的消息。通过这种简单的设计,NATS允许程序共享公共消息处理代码,隔离资源和相互依赖性,并通过轻松增加处理消息量进行扩展,无论是服务请求还是流数据。

NATS核心提供最多一次的服务质量。如果订户没有收听主题(没有主题匹配),或者在发送消息时未激活,则不会收到消息。这与TCP/IP提供的保证级别相同。默认情况下,NATS是一种即发即弃的消息传递系统。如果您需要更高级别的服务,您可以使用NATS Streaming或通过经过验证的可扩展参考设计为客户端应用程序构建额外的可靠性。

同步异步的区别官网和之前的文档,还是之前的文档讲地清楚。

同步异步的区别

同步

异步

路由

/function/<name>

/async-function/<name>

函数执行

等待结果

立即返回202即时响应码

函数调用结束

明确知道处理结果

在Queue-worker中调用函数,默认情况下处理结果丢弃

异步有一步入队dequeue的过程,然后在queue-worker中执行函数。异步通常基于事件、回调函数机制。

在异步请求的headers中,加入X-Callback-Url可以在执行完成后回调通知。回调的URL请求还会设置其他请求头,标识哪一条异步请求、异步请求的处理状态、时间。

AlertManager

AlterManager触发自动扩缩容的步骤:

  • 获取现有副本数

  • 计算新的副本数

  • 调用Provider接口,设置新的副本数。如faas-netes 调用Kubernetes的API

参考:

Last updated