Serverless 工程实践 | 自建 Apache OpenWhisk 平台

简介: OpenWhisk 是一个开源、无服务器的云平台,可以在运行时容器中通过执行扩展的代码响应各种事件,而无须用户关心相关的基础设施架构。

OpenWhisk 简介

OpenWhisk 是基于云的分布式事件驱动的编程服务。OpenWhisk 提供一种编程模型,将事件处理程序注册到云服务中,以处理各种不同的服务。其可以支持数千触发器和调用,可以对不同规模的事件进行响应。

OpenWhisk 是由许多组件构建的,这些组件让 OpenWhisk 成为一款优秀的开源 FaaS 平台。

1.png

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

克隆完成之后,显示如图所示。

2.png

Apache OpenWhisk 项目 Clone

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

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

Apache OpenWhisk 安装配置如图所示。

3.png

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

4.png

执行脚本过程

接下来使用 CouchDB 部署 OpenWhisk,确保本地已经有了 db_local.ini。在 openwhisk/ 目录下执行部署命令:

./gradlew distDocker

如果部署过程中出现问题(如下图所示),可能是没有安装 npm 导致的,此时可以执行如下指令。

5.png

部署过程可能报错示例

apt install npm

稍等片刻,可以看到 Build 成功页面,如图所示。

6.png

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

执行脚本过程如图所示。

7.png

执行脚本过程

部署成功后,OpenWhisk 会在系统中启动几个 Docker 容器。我们可以通过 docker ps 来查看:

docker ps --format "{{.Image}} \t {{.Names }}"

安装成功后的容器列表如图所示。

8.png

安装成功后的容器列表

开发者工具

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'

9.png

设置 API host

设置 key:

./bin/wsk property set --auth `cat ansible/files/auth.guest

权限设置如图所示。

10.png

设置权限

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

函数创建如图所示。

11.png

创建函数

触发动作:

./bin/wsk -i action invoke myfunction --result --blocking --param nember 20

得到结果,如图所示。

12.png

执行函数

至此,我们完成了 OpenWhisk 项目的部署以及测试。

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php弹幕技术轮询,PHP实现长轮询消息实时推送功能代码

入口文件index.html反ajax推送.send{color:#555;text-align: left;}.require{color:blue;text-align: right;}.content_box{text-align: center;margin: 20px;border: 1px solid #ddd;padding: 20px;}消息框12发送连接$(function(){//发送消息$(#btn_send).click(function(){va…

阿里云消息队列 RocketMQ 5.0 全新升级:消息、事件、流融合处理平台

简介: RocketMQ5.0 的发布标志着阿里云消息从消息领域正式迈向了“消息、事件、流”场景大融合的新局面。未来阿里云消息产品的演进也将继续围绕消息、事件、流核心场景而开展。 从“消息”到“消息、事件、流”的大融合 消息队列作为当代应用的通信基础设施&…

Gartner发布2022年政府行业重要业务趋势:数字化与创新、基础设施等

供稿 | Gartner 出品 | CSDN 云计算 时至2022年,政府领导人继续面临疫情带来不断变化的挑战,包括社会和经济领域的不确定因素。在2020年至2021年这段刚开始应对疫情的时期,为了满足公民服务和远程办公的需求,全球数字化程度呈指数…

随机段子api php,给博客添加一个名言段子语句随机播放的功能(集成Hitokoto)

之前浏览张戈的博客,发现他的文章页点赞下方有个很有意思的东西,一列显示一段句子,刷新一下会重新生成另外一个,主要包含段子、台词等有意思的话。余斗的博客不少内容都是参考张戈博客,虽然发现这个有趣的玩意很久了&a…

实践分享丨构建云上私有池(虚拟IDC)的5种方案详解

简介: 云上私有池系列终篇终于来了,本文将重点介绍构建云上的私有池(虚拟IDC)的多种方案和各自的优缺点,并给出相关的性价比优化建议。 本文作者:阿里云技术专家李雨前 摘要 围绕私有池(虚拟…

2021云栖大会开源引力峰会发布的战略合作,Grafana服务到底是什么?

简介: 这几天关注云栖大会的小伙伴一定会发现阿里巴巴合伙人、阿里云高级研究员蒋江伟(小邪)在云栖大会开源引力峰会的演讲中,特别提到了一个叫 Grafana 服务的产品,并特意花费一页 PPT 介绍了这一次合作。到底是一个什…

因为一个循环,CPU搞了个新技术

作者 | 轩辕之风O 来源 | 编程技术宇宙 好久不见,我叫阿Q,是CPU一号车间的员工。我所在的CPU有8个车间,也就是8个核心,咱们每个核心都可以同时执行两个线程,就是8核16线程,那速度杠杠滴。 我所在的一号车间…

AI圈内卷?天池团聚请来专家集体“问诊”

简介: 近期杭州云栖大会上出现了一个“数据博物馆”,最吸引眼球的“展品”,竟是行业大规模开源数据集。不仅数量多达上百个,还覆盖零售、文娱、工业、医疗、自然科学等数十个行业。既有来自真实业务场景的商品数据,也不…

2021双11上云狂欢节 | 爆款产品底价全面开售

一年一度的双11狂欢节终于来啦!怎样用最少的钱获得最多的福利?下面这份攻略收藏好,这波活动快冲! 双11主会场:http://click.aliyun.com/m/1000304310/ 01 领取双11上云加油包 阿里云官网已实名认证的注册会员用户皆可…

针对场景化痛点,锐捷网络推出极简光 2.X,以太全光网再下一城

极简光 2.X 方案,旨在针对各行业的需求和痛点找到更合适的解法,为各行业的客户呈现更为适配的新产品。 出品 | CSDN云计算 光进铜退趋势之下,全光网在快速发展。 不过,更进一步在各个行业技术实施中,用户的痛点则多种多…

轻博客框架 php,DouPHP轻博客 v1.6 Release 20200925

DouPHP轻博客系统,基于PHPMYSQL架构的,可以使用它快速搭建一个博客系统。DouPHP轻博客系统功能特点操作简单后台简约明了,从使用者而不是开发者的角度出发设计后台功能布局,完全不需要使用手册就可以轻松进行日常内容编辑工作。功…

阿里云GanosBase升级,发布首个云孪生时空数据库

简介: GanosBase是李飞飞带领的达摩院数据库与存储实验室联合阿里云共同研发的新一代位置智能引擎;本次重磅升级为V4.0版本,推出首个云孪生时空数据库。 作者 | 谢炯 来源 | 阿里技术公众号 导读: GanosBase是李飞飞带领的达摩院…

演进实录|不同阶段的企业如何搭建监控体系?

简介: 企业业务发展越来越迅速,对 IT 的要求也愈发严苛且复杂。这不仅仅体现在运维团队架构与工作流程上,也体现在工具选型与平台搭建上。 今天我们好好聊一下工具选型与平台搭建思路与实践关键点。来看看阿里云会给出如何的最佳实践&#xf…

用过留痕,谁动了我的档案?

本篇文章暨 CSDN《中国 101 计划》系列数字化转型场景之一。 《中国 101 计划——探索企业数字化发展新生态》为 CSDN 联合《新程序员》、GitCode.net 开源代码仓共同策划推出的系列活动,寻访一百零一个数字化转型场景,聚合呈现并开通评选通道&#xff0…

php在线考试系统模板下载,PHPEMS在线模拟考试系统 v6.1

PHPEMS在线模拟考试系统主要用于构建在线考试系统,如驾照、英语等练习系统。一、系统功能:1、强化训练测验,对知识点进行单独联系2、随机组卷练习,系统自动抽取题目进行练习3、手工组卷联系,通过教师平台手工组卷形成考…

媒体声音|阿里云数据库:一站式全链路数据管理与服务,引领云原生2.0时代

简介: 引领云原生数据库技术持续创新 这几年,云原生已成为阿里云的另一个标签,不仅最早布局云原生技术,拥有大量客户实践,更打造出丰富的云原生产品家族。尤其是数据库产品线,已进入云原生2.0阶段&#xf…

数据增长浪潮下,PCIe 6.0的问与Rambus的答

作为历史上使用最广泛、可扩展性最强的互联技术,PCIe标准自21世纪初正式创立以来,它便一直作为数据中心和计算应用芯片间数据传输的行业标准而存在。而在近几年间,随着全球数据量的爆发式增长,PCIe标准的更迭自3.0到4.0的“七年之…

阿里巴巴首席技术官程立:我们相信并正在践行的“好科技”

简介: 10月21日,阿里巴巴集团首席技术官程立出席2021年云栖大会技术*可持续发展论坛,并发表《科技创新和未来生活》的主题演讲,谈及科技创新的价值,以及阿里巴巴相信并正在践行的“好科技”,本文是程立的分…

Serverless 架构模式及演进

简介: Serverless 架构从使用技术上有计算,数据存储,消息通信,我们可从运维性,安全性,可靠性,可扩展性,成本几个角度来衡量架构的优劣。本文会介绍一些常见的业务场景,探…

Kubernetes 的自动伸缩你用对了吗?

作者 | AddoZhang来源 | 云原生指北本文翻译自 learnk8s 的 Architecting Kubernetes clusters — choosing the best autoscaling strategy[1],有增删部分内容。TL;DR: 在默认设置下,扩展 Kubernetes 集群中的 pod 和节点可能需要几分钟时间。了解如何调…