Openwhisk 概览

Openwhisk 概览

1. Openwhisk架构
openwhisk架构图

openwhisk是一个事件驱动的计算平台,也被用在serveless和fass领域,来响应事件调用。事件通常包括:
数据库记录的修改
IoT传感器数据上传
GitHub代码仓库的新提交
HTTP调用
这些内部或者外部的事件通过trigger和rules,最终到达actions来响应这些事件。
Actions 通常是一些代码片段, 或者是在一个 Docker container里的二进制文件。Actions在OpenWhisk里

通常在触发器触发的时候才会被调用。通过OpenWhisk API, CLI, or iOS SDK,也可以绕过trigger直接调用action。Action还可以组成Chain被顺序调用。

开发者可以用packages来实现与外部服务和事件的对接。Package是一些 feeds的组合。Feed是一段外部事件引发触发器的代码。

2. Openwhisk组件
openwhisk的数据走向和主要组件如下图所示:
在这里插入图片描述
组件及其功能解释:
(1)nginx
nginx是整个系统的入口, 是一个Http反向代理服务器。主要用于SSL链接认证和把合适的请求传给下一个组件—Controller。

(2)Controller
Controller其实是一组用scala实现的rest api,用于openwhisk内部对象的CURD(增删改查)和Action调用。使用者POST一个HTTP请求过来,Controller把它转化成Action的调用。Controller是Openwhisk的一个核心组件。

(3)CouchDB
CouchDB被用在了三个地方:
Authentication and Authorization: 用户权限的验证,通过存在CouchDB里的数据来查看用户是否存在和是否有对Action的调用权限。
Getting the action:从CouchDB中加载Action,包括Code和参数等。
Storing the results:action的运行结果也是存在CouchDB里的。

(4)Load Balancer
Load Balancer是Controller的一部分, 全局监控Invokers的健康状态。Load Balancer知道哪些Invokers可用,并从中选择一个来执行Action调用。

(5)Kafka
kafka为openwhisk提供了消息队列,从而提供了以下功能:
防止系统奔溃时,调用丢失
提供队列执行,防止系统过载
所有controller发出来的action调用,都要转化成消息在kafka里排队等到执行。

(6)Invoker
Invoker 是openwhisk最核心的部分,它执行了Action的code。Invoker也是用scala实现的,是优化系统性能的最核心部分。

举一个action执行的例子:例如我们有个基于Node.js的action, Invoker会启动一个Node.js容器, 注入Action的代码, 然后执行和提取结果,并保存日志,最后销毁这个Node.js容器。

发布了3 篇原创文章 · 获赞 0 · 访问量 644

猜你喜欢

转载自blog.csdn.net/weixin_45502294/article/details/99718195