Serverless 工程实践 | 自建 Apache OpenWhisk 平台
简介: 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=CouchDBexport OW_DB_USERNAME=rootexport OW_DB_PASSWORD=PASSWORDexport OW_DB_PROTOCOL=httpexport OW_DB_HOST=172.17.0.1export 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.ymlansible-playbook -i environments/local/ initdb.ymlansible-playbook -i environments/local/ wipe.ymlansible-playbook -i environments/local/ apigateway.ymlansible-playbook -i environments/local/ openwhisk.ymlansible-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.pydef 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 工程实践 | 自建 Apache OpenWhisk 平台的更多相关文章
- Serverless 工程实践|自建 Apache OpenWhisk 平台
作者 | 刘宇(江昱) 前言:OpenWhisk 是一个开源.无服务器的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无须用户关心相关的基础设施架构. OpenWhisk 简介 Open ...
- Serverless 工程实践 | Serverless 应用优化与调试秘诀
作者|刘宇 前言:本文将以阿里云函数计算为例,提供了在线调试.本地调试等多种应用优化与调试方案. Serverless 应用调试秘诀 在应用开发过程中,或者应用开发完成,所执行结果不符合预期时,我 ...
- Serverless 工程实践 | 零基础上手 Knative 应用
作者|刘宇 前言:Knative 是一款基于 Kubernetes 的 Serverless 框架.其目标是制定云原生.跨平台的 Serverless 编排标准. Knative 介绍 Knative ...
- webpack 从入门到工程实践
from:https://www.jianshu.com/p/9349c30a6b3e?utm_campaign=maleskine&utm_content=note&utm_medi ...
- China .NET Conf 2019-.NET技术架构下的混沌工程实践
这个月的8号.9号,个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会,同时分享了技术专题<.NET技术架构下的混沌工程实践>,给广大的.NET开发小伙伴介 ...
- 深入理解 ProtoBuf 原理与工程实践(概述)
ProtoBuf 作为一种跨平台.语言无关.可扩展的序列化结构数据的方法,已广泛应用于网络数据交换及存储.随着互联网的发展,系统的异构性会愈发突出,跨语言的需求会愈加明显,同时 gRPC 也大有取代R ...
- 从工具、工具箱到数字化软件工厂——DevOps 设计理念与工程实践专场 | CIF 精彩看点
西方经典管理理论认为,组织效率可以归为劳动效率.组织效率和人的效率.美国管理学家泰勒所著的<科学管理原理>被德鲁克誉为"20 世纪最伟大的发明",劳动效率说认为分工提升 ...
- panguan(判官):一个自研的任务执行引擎的工程实践
来某厂接近半年了,几乎没写过C++代码,说实话还真的有点手生.最近刚好有一个需求,然而我感觉我也没有办法用C++以外的语言去实现它.于是还是花了几天时间用C++完成编码,这是一个简单的任务执行引擎,它 ...
- 公司简介 - CCDI悉地国际-工程实践专业服务的引领者
公司简介 - CCDI悉地国际-工程实践专业服务的引领者 关于悉地国际 CCDI悉地国际(以下简称"CCDI")创立于1994年,是在城市建设和开发领域从事综合专业 ...
- Linux开源模块迁移概述暨交叉编译跨平台移植总结--从《嵌入式Linux驱动模板简洁和工程实践》
本文摘录<嵌入式Linux驱动模板简洁和工程实践>一本书"开发和调试技术". Linux强大的是,有那么多的开源项目可以使用.通常非常需要可以通过寻找相关的源模块被定义 ...
随机推荐
- TP6框架--EasyAdmin学习笔记:列表调用搜索,开发常见问题记录
这是我写的学习EasyAdmin的第五章,这一章我给大家分享下列表调用搜索的相关知识,并记录说明下开发时碰到的常见问题 首先说明下如何在页面中调用layui的搜索,效果如下: 代码如下: define ...
- 记录--服务端推送到Web前端有哪几种方式?
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 这个问题? 这个问题一般会出现在面试题里面,然后回答一些诸如轮询.WebSocket之类的答案.当然,实际开发中,也会遇到类似别人给你赞了 ...
- Web Audio API 第2章 完美的播放时机控制
Web Audio API 第2章 完美的播放时机控制 相较于 标签, Web Audio API 拥有低延迟精确定时模型. 低延时对于游戏或交互式应用来说非常重要,因为交互操作时要快速响应给用户的听 ...
- C# 日志监控软件 基于 FileSystemWatcher 02
基于上一篇<C# 日志监控软件 基于 FileSystemWatcher>改进 using System; using System.Collections.Generic; using ...
- KingbaseES 可更新的视图
可更新视图 可简化视图可自动更新:系统将允许在视图上使用 INSERT.UPDATE 和 DELETE 语句,就像在常规表上一样.如果视图满足以下所有条件,就是可简化视图,则视图可自动更新: 该视图的 ...
- 冒泡排序【Java】
1 public class Paixu { 2 public static void main(String args[]) { 3 int myNum[] = {2,6,4,1,5}; 4 //从 ...
- #莫比乌斯反演,期望#CF1139D Steps to One
题目 每次随机选一个 \(1\) 到 \(m\) 之间的数加在数列末尾, 数列中所有数的 \(\gcd=1\) 时停止,求数列期望长度.\(m\leq 10^5\) 分析 求期望长度的一种方法就是枚举 ...
- #高精度,卡特兰数#洛谷 2532 [AHOI2012]树屋阶梯
题目 分析 设\(dp[n]\)表示大小为\(n\)的树屋阶梯方案数,如何不算重也不算漏 考虑在左下角填充一个尽量大的矩形,一共有\(n\)种方法, 然后剩下的两头就可以用前面的结果表示 也就是\(d ...
- OpenHarmony父子组件双项同步使用:@Link装饰器
子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定. 说明: 从API version 9开始,该装饰器支持在ArkTS卡片中使用. 概述 @Link装饰的变量与其父组件中的数 ...
- OpenAtom OpenHarmony分论坛圆满举办,生态与产业发展迈向新征程
7月27日,2022开放原子全球开源峰会OpenAtom OpenHarmony分论坛在北京成功举办.本次论坛以"万物互联,使能千行百业"为主题,OpenHarmony共建单位.生 ...