Serverless 工程实践 | 自建 Apache OpenWhisk 平台-阿里云开发者社区

开发者社区> 阿里巴巴云原生小助手> 正文

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 导致的,此时可以执行如下指令。

image.gif5.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

image.gif设置权限


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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
3996 0
Serverless 工程实践 | 传统 Web 框架迁移
在 Serverless 这种新的架构或者说是新的编程范式下,使用全新的思路来做 Serverless 应用是再好不过的了,但实际并非如此。原生的 Serverless 开发框架是非常少的。以 Web 框架为例,目前主流的 Web 框架均不支持 Serverless 部署,所以将传统框架更简单、更快速、更科学地部署到 Serverless 架构上就是一个值得探讨的问题。
131 0
《软件工程方法与实践》—— 1.5 软件工程开发方法学
在软件工程学科中,方法学用来表示一套涵盖整个软件生产过程的技术的集合。目前使用得较广泛的软件工程开发方法学,分别是结构化开发方法学和面向对象开发方法学。
1869 0
Serverless 工程实践 | 细数 Serverless 的配套服务
上文说到云计算的十余年发展让整个互联网行业发生了翻天覆地的变化,Serverless 作为云计算的产物,或者说是云计算在某个时代的表现,被很多人认为是真正意义上的云计算,关于“Serverless 是什么”这个问题,其实是可以通过不同角度来分析的。
262 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3951 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5663 0
PostgreSQL BTree索引的工程实践
PostgreSQL BTree索引的工程实践
45 0
Serverless 工程实践 | Serverless 应用优化与调试秘诀
本文将以阿里云函数计算为例,提供了在线调试、本地调试等多种应用优化与调试方案。
157 0
首度公开!OceanBase存储系统架构的演进历程及工程实践
OB君:作为一款100%自研的分布式数据库,OceanBase历经了近十年的发展历程。近十年来,OceanBase的存储架构经历了多次演进,以解决业务越来越复杂苛刻的存储需求。本文整理自赵裕众(花名陈群)在2019 SACC中国系统架构师大会中的演讲。
2985 0
AOE工程实践-银行卡OCR里的图像处理
AOE工程实践-银行卡OCR里的图像处理 作者:杨科 近期我们开发了一个银行卡 OCR 项目。需求是用手机对着银行卡拍摄以后,通过推理,可以识别出卡片上的卡号。 工程开发过程中,我们发现手机拍摄以后的图像,并不能满足模型的输入要求。
1743 0
1206
文章
0
问答
来源圈子
更多
专注Serverless、微服务、函数计算等
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载