作者 | 刘宇(江昱)
前言:OpenWhisk 是一个开源、无服务器的云平台,能够在运转时容器中通过履行扩展的代码响应各种事情,而无须用户关怀相关的基础设施架构。
OpenWhisk 简介
OpenWhisk 是基于云的分布式事情驱动的编程服务。OpenWhisk 供给一种编程模型,将事情处理程序注册到云服务中,以处理各种不同的服务。其能够支持数千触发器和调用,能够对不同规模的事情进行响应。
OpenWhisk 是由许多组件构建的,这些组件让 OpenWhisk 成为一款优异的开源 FaaS 平台。
Apache OpenWhisk 组件结构
OpenWhisk 布置
实验机器操作体系为 Ubuntu 18.04 Desktop。运用 GitHub 上所供给的 incubator-openwhisk 进行装置,假如本机没有装置 Git,需求先装置 Git:
apt install git
接下来克隆 repo 到本地目录:
git clone https://github.com/apache/incubator-openwhisk.git openwhisk
克隆完结之后,显现如图所示。
Apache OpenWhisk 项目 Clone
进入 OpenWhisk 目录,而且履行脚本。OpenWhisk 是由 Scala 开发的,运转需求装置 Java 环境。下面的脚本实现了 Java 环境的装置,以及其他的所需求的软件:
cd openwhisk && cd tools/ubuntu-setup && ./all.sh
Apache OpenWhisk 装置装备如图所示。
Apache OpenWhisk 装置装备
OpenWhisk 运用 ansible 进行布置,环境变量界说在 ansible/environments/group_vars/all 下:
limits:
invocationsPerMinute: "{{ limit_invocations_per_minute | default(60) }}"
concurrentInvocations: "{{ limit_invocations_concurrent | default(30) }}"
concurrentInvocationsSystem: "{{ limit_invocations_concurrent_system | default
(5000) }}"
firesPerMinute: "{{ limit_fires_per_minute | default(60) }}"
sequenceMaxLength: "{{ limit_sequence_max_length | default(50) }}"
上面程序界说了 OpenWhisk 在体系中的约束。
- invocationsPerMinute 表明同一个 Namespace 每分钟调用 Action 的数量。
- concurrentInvocations 表明同一个 Namespace 的并发调用数量。
- concurrentInvocationsSystem 表明体系中所有 Namespace 的并发调用数量。
- firesPerMinute 表明同一个 Namespace 中每分钟调用 Trigger 的数量。
- sequenceMaxLength 表明 Action 的最大序列长度。
假如需求修改上述的默认值,能够把修改后的值添加到文件 ansible/environments/local/group_vars/all 的结尾。例如,Action 的最大序列长度为 100,能够将 sequenceMaxLength: 120 添加到文件的结尾。
接下来,为 OpenWhisk 装备一个耐久存储的数据库,有 CouchDB 和 Cloudant 可选。以 CouchDB 为例,装备环境:
export OW_DB=CouchDB
export OW_DB_USERNAME=root
export OW_DB_PASSWORD=PASSWORD
export OW_DB_PROTOCOL=http
export OW_DB_HOST=172.17.0.1
export OW_DB_PORT=5984
在 openwhisk/ansible 目录下,运转脚本,如图所示。
ansible-playbook -i environments/local/ setup.yml
履行脚本进程
接下来运用 CouchDB 布置 OpenWhisk,确保本地已经有了 db_local.ini。在 openwhisk/ 目录下履行布置命令:
./gradlew distDocker
假如布置进程中出现问题(如下图所示),可能是没有装置 npm 导致的,此时能够履行如下指令。
布置进程可能报错示例
apt install npm
稍等片刻,能够看到 Build 成功页面,如图所示。
Build 成功示例
接下来进入 openwhisk/ansible 目录:
ansible-playbook -i environments/local/ couchdb.yml
ansible-playbook -i environments/local/ initdb.yml
ansible-playbook -i environments/local/ wipe.yml
ansible-playbook -i environments/local/ apigateway.yml
ansible-playbook -i environments/local/ openwhisk.yml
ansible-playbook -i environments/local/ postdeploy.yml
履行脚本进程如图所示。
图片履行脚本进程
布置成功后,OpenWhisk 会在体系中启动几个 Docker 容器。咱们能够通过 docker ps 来检查:
docker ps --format "{{.Image}} \t {{.Names }}"
装置成功后的容器列表如图所示。
装置成功后的容器列表
开发者工具
OpenWhisk 供给了一个一致的命令行接口 wsk。生成的 wsk 在 openwhisk/bin 下。其有两个属性需求装备。
- API host 用于布置 OpenWhisk 的主机名或 IP 地址的 API。
- Authorization key(用户名或密码)用来授权操作 OpenWhisk 的 API。
设置 API host,在单机装备中的 IP 应该为 172.17.0.1,如图所示。
./bin/wsk property set --apihost '172.17.0.1'
设置 API host
设置 key:
./bin/wsk property set --auth `cat ansible/files/auth.guest
权限设置如图所示。
图片设置权限
OpenWhisk 将 CLI 的装备信息存储在 ~/.wskprops 中。这个文件的位置也能够通过环境变量 WSK_CONFIG_FILE 来指定。
验证 CLI:
wsk action invoke /whisk.system/utils/echo –p message hello –result
{
"message": "hello"
}
体会测验
创立简略的动作(action),代码如下:
# test.py
def main(args):
num = args.get("number", "30")
return {"fibonacci": F(int(num))}
def F(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return F(n - 1) + F(n - 2)
创立动作:
/bin/wsk action create myfunction ./test.py --insecure
函数创立如图所示。
创立函数
触发动作:
./bin/wsk -i action invoke myfunction --result --blocking --param nember 20
得到成果,如图所示。
履行函数
至此,咱们完结了 OpenWhisk 项目的布置以及测验。