基础组件
(重要组件加粗):
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
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或通过经过验证的可扩展参考设计为客户端应用程序构建额外的可靠性。
同步异步的区别
异步有一步入队dequeue
的过程,然后在queue-worker中执行函数。异步通常基于事件、回调函数机制。
AlertManager
AlterManager触发自动扩缩容的步骤:
获取现有副本数
计算新的副本数
调用Provider接口,设置新的副本数。如faas-netes 调用Kubernetes的API
参考:
Last updated