使用 OpenWhisk 自建 Serverless 服务

原创 2017年12月13日 00:00:00

在尝试了使用 AWS 开发 Serverless 应用之后,我便想尝试使用 OpenWhisk 框架来搭建自己的 Serverless 服务。

Apache OpenWhisk(http://openwhisk.org/)是一个由IBM和Adobe驱动的开源项目,它是一个健壮的FaaS平台,可以部署在云或数据中心内。相比其他serverless项目,OpenWhisk是一个健壮的、可扩展的平台,支持数千并发触发器和调用。

OpenWhisk 简介

其系统架构如下所示:

640?wx_fmt=png&wxfrom=5&wx_lazy=1OpenWhisk 流处理流程


对应的组件的功能如下:

  • Nginx 暴露HTTP(S)端点给客户端。

  • Controller 充当系统的守门员、系统的协调者,它将决定请求最终采取的路径。

  • CouchDB 护和管理系统的状态。

  • Consul 作为系统每个组件可访问的单一数据源。 同时,consul还提供服务发现功能,使控制器发现调用操作的实体。

  • Apache Kafka 用于构建实时数据管道和流应用程序。

  • Invoker 使用 Scala实现,它是处理执行过程的最后阶段。

  • Docker, 几乎所有的 OpenWhisk 组件都打包和部署为容器。

macOS 搭建 OpenWhisk 环境

官网的指引很简单,但是中间还是遇到一些环境问题。

首先 clone 代码

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

然后于是虚拟机的目录:

  1. cd openwhisk/tools/vagrant

接着执行 hello 命令

  1. $./hello

  2. ./hello: line 8: vagrant: command not found

便提示 vagrant 没有安装。Vagrant 只是一个虚拟机管理和配置工具,为了安装 vagrant,还需要先安装 virtualbox 虚拟机:

  1. brew cask install virtualbox

然后安装 vagrant,顺便也 可以安装 vagrant-manager

  1. $ brew cask install vagrant vagrant-manager

  2. ==> Satisfying dependencies

  3. ==> Downloading https://releases.hashicorp.com/vagrant/2.0.1/vagrant_2.0.1_x86_64.dmg

  4. ######################################################################## 100.0%

  5. ==> Verifying checksum for Cask vagrant

  6. ==> Installing Cask vagrant

  7. ==> Running installer for vagrant; your password may be necessary.

  8. ==> Package installers may write to any location; options such as --appdir are ignored.

  9. Password:

  10. ==> installer: Package name is Vagrant

  11. ==> installer: Installing at base path /

  12. ==> installer: The install was successful.

  13. ?  vagrant was successfully installed!

  14. ==> Satisfying dependencies

  15. ==> Downloading https://github.com/lanayotech/vagrant-manager/releases/download/2.6.0/vagrant-manager-2.6.0.dmg

  16. ######################################################################## 100.0%

  17. ==> Verifying checksum for Cask vagrant-manager

  18. ==> Installing Cask vagrant-manager

  19. ==> Moving App 'Vagrant Manager.app' to '/Applications/Vagrant Manager.app'.

再次执行:

  1. $ ./hello

  2. Bringing machine 'default' up with 'virtualbox' provider...

  3. ==> default: Box 'ubuntu/trusty64' could not be found. Attempting to find and install...

  4.    default: Box Provider: virtualbox

  5.    default: Box Version: >= 0

  6. ==> default: Loading metadata for box 'ubuntu/trusty64'

  7.    default: URL: https://vagrantcloud.com/ubuntu/trusty64

  8. ==> default: Adding box 'ubuntu/trusty64' (v20171205.0.1) for provider: virtualbox

  9.    default: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20171205.0.1/providers/virtualbox.box

  10.    default: Progress: 11% (Rate: 2806k/s, Estimated time remaining: 0:04:16)

然后挑个网速好的时间,比如早上(经过测试晚上的下载速度比较慢),等它下载完。下载完后,便自动开始在虚拟机里搭建 OpenWhisk 环境,如安装 Docker、Git 等等的操作。

最麻烦的是等待 Docker 安装拉各种镜像。OpenWhisk系统由许多组件构建而成:

0?wx_fmt=pngOpenWhisk 组件

直至:

  1.    default: +++ cat /home/vagrant/openwhisk/ansible/files/auth.guest

  2.    default: ++ wsk property set --apihost 192.168.33.13 --namespace guest --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP

  3.    default: ok: whisk auth set. Run 'wsk property get --auth' to see the new value.

  4.    default: ok: whisk API host set to 192.168.33.13

  5.    default: ok: whisk namespace set to guest

  6.    default: ++ wsk action invoke /whisk.system/utils/echo -p message hello --result

  7.    default: {

  8.    default:     "message": "hello"

  9.    default: }

  10.    default: +++ date

  11.    default: ++ echo 'Mon Dec 11 12:09:23 UTC 2017: build-deploy-end'

我们就顺利地运行了我们的 hello world。

你也可以 ssh 到机器上: vagrant ssh,然后运行 wsk 命令试试:

  1. $ vagrant@vagrant-ubuntu-trusty-64:~/openwhisk/bin$ wsk

  2.        ____      ___                   _    _ _     _     _

  3.       /\   \    / _ \ _ __   ___ _ __ | |  | | |__ (_)___| | __

  4.  /\  /__\   \  | | | | '_ \ / _ \ '_ \| |  | | '_ \| / __| |/ /

  5. /  \____ \  /  | |_| | |_) |  __/ | | | |/\| | | | | \__ \   <

  6. \   \  /  \/    \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\

  7.  \___\/ tm           |_|

  8. Usage:

  9.  wsk [command]

  10. Available Commands:

  11.  action      work with actions

  12.  activation  work with activations

  13.  api         work with APIs

  14.  help        Help about any command

  15.  list        list entities in the current namespace

  16.  namespace   work with namespaces

  17.  package     work with packages

  18.  property    work with whisk properties

  19.  rule        work with rules

  20.  sdk         work with the sdk

  21.  trigger     work with triggers


版权声明:本文为博主原创文章,未经博主允许不得转载。

在Bluemix 使用OpenWhisk & Node-red 開發Event-Driven 應用系

2016/2/22 IBM Bluemix 已宣布推出开源的 OpenWhisk,有了OpenWhisk,开发者对于前端的触发 (trigger) 事件,后端不需安装 Server,只要开发一小段的J...
  • chenjaulin
  • chenjaulin
  • 2016年07月04日 02:00
  • 1368

BaaS云架构核心模式之Serverless架构 - 用服务代替服务器(Martin Fowler)

摘要: Martin Flower在2016.6.17号发表了一篇博客: [《Serverless Architectures》](http://martinfowler.com/articles/s...
  • yunqishequ1
  • yunqishequ1
  • 2016年07月08日 16:08
  • 3231

什么是Serverless无服务器架构?

Serverless不代表再也不需要服务器了,而是说:开发者再也不用过多考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。Serverless是一种构建和管理基于微服务架构的完整流程,允许你在...
  • libing13810124573
  • libing13810124573
  • 2016年06月21日 11:50
  • 1497

亚马逊AWS的Serverless架构

亚马逊AWS的Serverless架构作者:chszs,未经博主允许不得转载。经许可的转载需注明作者和博客主页:/chszsServerless平台允许运行应用...
  • chszs
  • chszs
  • 2017年03月03日 15:56
  • 2194

自建Ngrok服务与使用方法

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。可以被使用来进行微信借口的本地调试。在ng...
  • y534560449
  • y534560449
  • 2016年12月07日 15:02
  • 700

自建Ngrok服务与使用方法

首先安装GO环境,http://www.haiyun.me/archives/1009.html 1 2 3 4 cd /usr/local/src/ git clo...
  • a7082633
  • a7082633
  • 2017年10月24日 16:01
  • 137

自建Ngrok服务与使用方法

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放。可以被使用来进行微信借口的本地调试。在ng...
  • donglynn
  • donglynn
  • 2017年04月18日 10:42
  • 1947

自建Ngrok服务与使用方法

自建Ngrok服务与使用方法   ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和...
  • xiaobing_122613
  • xiaobing_122613
  • 2017年01月20日 15:48
  • 198

01 阿里CDN从自建到服务

  • 2015年09月22日 16:42
  • 1.15MB
  • 下载

自建CDN应对大流量拒绝服务

  • 2013年01月15日 11:04
  • 856KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 OpenWhisk 自建 Serverless 服务
举报原因:
原因补充:

(最多只允许输入30个字)