实现层面

fission运行流程

image

  1. controller:对外提供api,通过fission CLI 控制内部组件
  2. router:用户发送http请求请求服务(调用函数)。收到请求,查看缓存(fiction与podurl间的映射)。对于调用过function,router会很快的拿到返回值;没调用过,向 poolmgr 请求一个新的实例。poolmgr 有一个空闲 pods 池,它会选择一个 pod,将函数加载进去(将请求发送到 pod 的容器中),并将 pod 地址返回给 router。
  3. 创建环境:对于用户创建的environment,poolmgr中有循环的线程自动在kubernetes中根据env的镜像创建包含三副本pod的deployment,每个pod中有两个container,一个使用env的镜像创建,另一个是fission中的辅助container,镜像是fission/fetcher。两个container共享一个volume。因为env是定义基础镜像,而一个env可能会关联许多function,所以需要fetcher根据具体的function在通用的container里运行不同的code。
  4. poolmgr还会定期清理“不活跃”的deployment,如env。还会定期删除不活跃的pod,让kubernetes自动创建新的、干净的pod供其他function使用。poolmgr提供的API只有两个,一个是根据function获取对应的service url,另一个是类似心跳API帮助维护缓存。因为router里也维护有function到service url的缓存,所以当function被调用时,router会通知poolmgr更新一下对应service对象的时间,避免被误删。

openwhisk运行流程

image

  1. nginx:处理用户发送(如调用函数操作等)将其转发(以及ssl终止)。
  2. contraller:是用户可执行操作( CRUD请求以及操作调用)的接口。
  3. CouchDB:存储操作(whisk数据库),身份验证(subjects数据库)。
  4. consul:服务发现组件,持续检查系统中可用执行者的运行状态来监视invoker,告诉contraller哪些invoker可用
  5. kafka:contraller和invoker只通过由 Kafka 缓冲和持久存储的消息进行通信。缓冲,减轻内存负担。确保消息不会在系统崩溃时丢失。
  6. invoker:启动Docker执行操作。对于每个操作调用,衍生一个 Docker 容器,将操作码注入。使用传递给代码的参数来执行代码,获取结果,然后销毁该容器
  7. 储存结果:存储在CouchDB终端 whisks 数据库中作为 ActivationId 下的激活

开发语言

fission
  • Go语言
openwhisk
  • scala语言

组件

fission
  • controller
  • router
  • executor
  • kubeWatcher
  • timer
  • MessageQueueMgr
  • storageSvc
  • builderMgr
openwhisk
  • nginx
  • contraller
  • CouchDB
  • consul
  • kafka
  • invoker

功能层面

组件

控制器

fission
  • controller,是fission对外提供管理API的组件。所有其他组件通过关注 controller 来更新负责追踪函数、HTTP 路由、事件触发器和环境镜像
openwhisk
  • contraller:是用户可执行操作(如CRUD请求以及操作调用)的接口。
  • consul:服务发现组件,持续检查系统中可用执行者的运行状态来监视invoker,告诉contraller哪些invoker可用
  • kafka:一种高吞吐量、分布式的发布/预订消息传递系统。contraller和invoker只通过由 Kafka 缓冲和持久存储的消息进行通信。可以减轻在内存中进行缓冲的负担并降低伴随的 OutOfMemoryException 风险,确保消息不会在系统崩溃时丢失。使用异步调用模型

请求响应

fission
  • router:收到请求,查看缓存(fiction与podurl间的映射)。对于调用过function,router会很快的拿到返回值;没调用过,向 poolmgr 请求一个新的实例。poolmgr 有一个空闲 pods 池,它会选择一个 pod,将函数加载进去(将请求发送到 pod 的容器中),并将 pod 地址返回给 router。

    openwhisk
  • API网关

服务发现组件

fission
  • router,与controller和poolmgr打交道,会监听 controller 中triggers的更新,动态的更新web service的route定义。
  • poolmgr 负责管理空闲的环境容器池、将函数加载到这些容器当中、以及杀死空闲的函数实例。
openwhisk
  • consul:服务发现组件,持续检查系统中可用执行者的运行状态来监视invoker,告诉contraller哪些invoker可用

触发器

fission
  • Http Trigger
  • Time Trigger
  • MQ Trigger
openwhisk
  • invoker:启动Docker执行操作,对于每个操作调用,都会衍生一个 Docker 容器,将操作码注入。使用传递给代码的参数来执行代码,获取结果,然后销毁该容器

  • cloudant

  • custom trigger
  • github
  • messahub
  • moblie push
  • priodic

数据存储

fission
  • etcd
openwhisk
  • CouchDB

函数

语言支持

fission
  • Binary
  • Go
  • .NET
  • .NET 2.0
  • NodeJS (Alpine)
  • NodeJS (Debian)
  • Perl
  • PHP 7
  • Python 3
  • Ruby
openwhisk
  • JavaScript
  • Python
  • Swift
  • PhP
  • Docker

函数上传支持

fission
  • 环境支持的语言
  • 任何兼容二进制的可执行文件和脚本
openwhisk
  • 环境支持的语言
  • Java 方法
  • 任何兼容二进制的可执行文件,包括打包为 Docker 容器的 Go 程序和定制可执行文件
源码形式
云端编译环境

####### 内容

####### 指令

二进制形式
本地编译环境要求

开发方式

fission
  • CLI
openwhisk
  • 浏览器开发
  • Cloud Functions CLI

启动方式

fission
  • 冷启动
openwhisk

函数操作

fission
  • 通过kubectl对pod进行操作
openwhisk
  • contraller:是用户可执行操作(如CRUD请求以及操作调用)的接口。
打包上传
调用方式
fission
  • 触发器关联
openwhisk
  • 触发器关联
  • Cloud Functions API
  • Cloud Functions CLI
  • iOS移动SDK
执行时间上限

运行环境

fission
  • k8s的pod
openwhisk
  • docker
运行环境的启动
fission
  • Pool-based executor(poolmgr):
  • New-deployment executor(newdeploy):创建一个Kubernetes部署、Service和HorizontalPodAutoscaler
openwhisk
运行环境的回收
fission
  • poolmgr定期清理“不活跃”的deployment,定期删除不活跃的pod,让kubernetes自动创建新的、干净的pod供其他function使用。(如何定期待查)
openwhisk

结果返回

fission
  • 直接返回
openwhisk
  • 储存在CouchDB的输出中

使用

事件

fission
openwhisk
  • package
  • 包含操作和订阅源
  • 绑定到包指定缺省参数

身份认证

fission
openwhisk
  • CouchDB:在whisk数据库中存储操作,subjects数据库用于身份验证与授权操作并装入操作

订阅源支持

全部属于某个触发器 T 的事件的流

fission
  • workflow?
openwhisk

发布自己的订阅源使用,创建订阅源体系结构:

  • Hook
  • 轮询
  • 连接

自动伸缩

fission
  • 自动伸缩
openwhisk

图形仪表盘

fission

不支持

openwhisk
  • 存在。用于监视活动摘要,活动日志,时间线以及过滤选项

项目发展现况

社区发展

fission
  • 3.2k star
openwhisk
  • 3k star

使用者

fission
  • Autodesk
  • cielo24
openwhisk

支持厂商

fission
  • Platform9
openwhisk
  • Apache/IBM

底层基础设施对接层面

组建部署方式

fission
  • 通过helm部署在kubernetes上
openwhisk
  • 通过 Ansible部署在docker中

function部署方式

fission
  • 以pod形式运行在kubernetes中
openwhisk
  • 运行在docker中

参考:

Comments

⬆︎TOP