从零自建FaaS平台(2): OpenWhisk

本文涉及的产品
简介: OpenWhisk 是一个开源、无服务(Serverless)的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无需关心相关的基础设施架构。OpenWhisk 是基于云的分布式事件驱动(event-based)的编程服务。

OpenWhisk简介

OpenWhisk 是一个开源、无服务(Serverless)的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无需关心相关的基础设施架构。OpenWhisk 是基于云的分布式事件驱动(event-based)的编程服务。OpenWhisk 提供一种编程模型——将事件处理程序注册到云服务中——以处理各种不同的服务,可以支持数千触发器和调用,可以对不同规模的事件进行响应。

OpenWhisk是由许多组件构建

这些组件,让OpenWhisk成为了一款优秀的开源FaaS平台

OpenWhisk部署

实验机器操作系统:Ubuntu 18.04 Desktop系统。

使用 Apache 提供在 github 上的 incubator-openwhisk 进行安装,如果本机没有安装Git,需要先安装Git:

apt install git

接下来克隆 repo 到本地目录:

git clone https://github.com/apache/incubator-openwhisk.git openwhisk

克隆完成:

进入到OpenWhisk目录,并且执行脚本。Openwhisk 是由 Scala 开发,运行需要安装 Java 环境,下面的脚本实现了 java 环境的安装,以及其它的所需要的软件:

cd openwhisk && cd tools/ubuntu-setup && ./all.sh

对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 SUCCESSFUL:

接下来进入到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 地址
  • Authorization key 用户名或密码用来授权操作 OpenWhisk 的 API。

设置 API host,在单机配置中的 IP 应该为 172.17.0.1。

./bin/wsk property set --apihost '172.17.0.1'

设置 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项目的部署以及体验测试。

相关实践学习
基于函数计算一键部署掌上游戏机
本场景介绍如何使用阿里云计算服务命令快速搭建一个掌上游戏机。
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
1月前
|
人工智能 Serverless API
在函数计算上部署专属的Agent平台
Agent及Agent平台的相关概念和应用价值已经在《智能体(Agent)平台介绍》 文章进行了介绍,接下来我们要进行实际的操作,在阿里云函数计算上快速获取专属的Agent平台-AgentCraft
83208 7
在函数计算上部署专属的Agent平台
|
2月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
7721 132
|
3月前
|
人工智能 Serverless API
AI 绘画平台难开发,难变现?试试 Stable Diffusion API Serverless 版解决方案
为了帮助用户高效率、低成本应对企业级复杂场景,函数计算团队正式推出 Stable Diffusion API Serverless 版解决方案,通过使用该方案,用户可以充分利用 Stable Diffusion +Serverless 技术优势快速开发上线 AI 绘画应用,期待为广大开发者 AI 绘画创业及变现提供思路。
87316 4
|
3月前
|
前端开发 JavaScript 小程序
亚马逊云科技 Build On -Serverless低代码平台初体验-快速完成vue前端订单小程序
亚马逊云科技 Build On -Serverless低代码平台初体验-快速完成vue前端订单小程序
48 0
|
4月前
|
机器学习/深度学习 运维 安全
阿里云 ACK One Serverless Argo 助力深势科技构建高效任务平台
阿里云 ACK One Serverless Argo 助力深势科技构建高效任务平台
101176 8
|
4月前
|
运维 中间件 Java
淘宝权益玩法平台的Serverless化实践
淘宝权益玩法平台的Serverless化实践
225 0
|
7月前
|
关系型数据库 MySQL Serverless
使用函数计算挂载NAS并搭建照片管理平台
本场景主要介绍如何基于函数计算、数据库RDS和文件存储NAS一键部署相册应用。
751 0
|
9月前
|
监控 Cloud Native Oracle
Serverless是什么?如何使用?有哪些优势?国内外有哪些Serverless平台?
Serverless 是云计算的一种模型。以平台即服务(PaaS)为基础,无服务器运算提供一个微型的架构,终端客户不需要部署、配置或管理服务器服务,代码运行所需要的服务器服务皆由云端平台来提供, Serverless computing(无服务器运算,又被称为函数即服务 Function-as-a-Service,缩写为 FaaS),以 Amazon Lambda 为典型服务。
|
11月前
|
缓存 运维 监控
《2023云原生实战案例集》——04 互联网——网易云音乐 基于函数计算FC创建音视频算法处理平台
《2023云原生实战案例集》——04 互联网——网易云音乐 基于函数计算FC创建音视频算法处理平台