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

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

OpenWhisk 简介

其系统架构如下所示:

OpenWhisk 流处理流程

对应的组件的功能如下:

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

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

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

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

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

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

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

macOS 搭建 OpenWhisk 环境

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

首先 clone 代码

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

然后于是虚拟机的目录:

cd openwhisk/tools/vagrant

接着执行 hello 命令

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

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

brew cask install virtualbox

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

$ brew cask install vagrant vagrant-manager    ==> Satisfying dependencies
==> Downloading https://releases.hashicorp.com/vagrant/2.0.1/vagrant_2.0.1_x86_64.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask vagrant
==> Installing Cask vagrant
==> Running installer for vagrant; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
==> installer: Package name is Vagrant
==> installer: Installing at base path /
==> installer: The install was successful.
?  vagrant was successfully installed!
==> Satisfying dependencies
==> Downloading https://github.com/lanayotech/vagrant-manager/releases/download/2.6.0/vagrant-manager-2.6.0.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask vagrant-manager
==> Installing Cask vagrant-manager
==> Moving App 'Vagrant Manager.app' to '/Applications/Vagrant Manager.app'.

再次执行:

$ ./hello
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/trusty64' could not be found. Attempting to find and install... default: Box Provider: virtualbox   default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/trusty64'  default: URL: https://vagrantcloud.com/ubuntu/trusty64
==> default: Adding box 'ubuntu/trusty64' (v20171205.0.1) for provider: virtualbox   default: Downloading: https://vagrantcloud.com/ubuntu/boxes/trusty64/versions/20171205.0.1/providers/virtualbox.box default: Progress: 11% (Rate: 2806k/s, Estimated time remaining: 0:04:16)

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

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

OpenWhisk 组件

直至:

    default: +++ cat /home/vagrant/openwhisk/ansible/files/auth.guest  default: ++ wsk property set --apihost 192.168.33.13 --namespace guest --auth 23bc46b1-71f6-4ed5-8c54-816aa4f8c502:123zO3xZCLrMN6v2BKK1dXYFpXlPkccOFqm12CdAsMgRU4VrNZ9lyGVCGuMDGIwP   default: ok: whisk auth set. Run 'wsk property get --auth' to see the new value.  default: ok: whisk API host set to 192.168.33.13    default: ok: whisk namespace set to guest   default: ++ wsk action invoke /whisk.system/utils/echo -p message hello --result  default: {  default:     "message": "hello" default: }  default: +++ date    default: ++ echo 'Mon Dec 11 12:09:23 UTC 2017: build-deploy-end'

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

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

$ vagrant@vagrant-ubuntu-trusty-64:~/openwhisk/bin$ wsk   ____      ___                   _    _ _     _     _    /\   \    / _ \ _ __   ___ _ __ | |  | | |__ (_)___| | __   /\  /__\   \  | | | | '_ \ / _ \ '_ \| |  | | '_ \| / __| |/ /   /  \____ \  /  | |_| | |_) |  __/ | | | |/\| | | | | \__ \   <   \   \  /  \/    \___/| .__/ \___|_| |_|__/\__|_| |_|_|___/_|\_\ \___\/ tm           |_| Usage:  wsk [command]   Available Commands: action      work with actions   activation  work with activations   api         work with APIs  help        Help about any command  list        list entities in the current namespace  namespace   work with namespaces    package     work with packages  property    work with whisk properties  rule        work with rules sdk         work with the sdk   trigger     work with triggers

使用 OpenWhisk 自建 Serverless 服务相关推荐

  1. Serverless 服务选型

    综述 近两年来,Serverless 概念在开发者中交流的越来越多,实践.服务.产品层出不穷. Serverless 的主题分享呈现爆发趋势,如在云原生领域颇具影响力的 KubeCon&Clo ...

  2. 云原生之上,亚马逊云科技发布多项容器与Serverless服务,持续发力现代化应用

    · 亚马逊云科技持续发力现代化应用领域,在中国区域新推多项容器与Serverless服务及功能 · 在中国区域推出Amazon ECS Anywhere.Amazon Lambda容器镜像功能以及Am ...

  3. OpenShift 4 之Knative(3) - 通过事件触发Serverless服务

    <OpenShift 4.x HOL教程汇总> 在Serverless的使用场景中很多是基于事件触发的,即当Kative通过Eventing机制接收到某类事件后调用后台的Kative Se ...

  4. 自建ngrok服务支持https访问

    前言 最近从事第三方平台代小程序实现业务开发,很多业务交互请求需要https,本地调试开发实现不了,不可能把部署到生产服务器调试,那又很不方便.我参考网上很多教程,很多不完整,不系统.我于是整理出完整 ...

  5. 云图说丨初识云速建站服务

    摘要:云速建站服务是一款帮助您搭建网站的华为云服务. 本文分享自华为云社区<[云图说]第252期 初识云速建站服务>,作者:阅识风云. 云速建站服务(Cloud Site-building ...

  6. 绿色数据中心基础设施建维服务认证实施政策背景

    为助力国家节能减排.数字经济转型以及双碳战略,2019年出台<工业和信息化部 国家机关事务管理局 国家能源局关于加强绿色数据中心建设的指导意见>意见指出以强化绿色设计.深化绿色施工和采购. ...

  7. 建站技术是一锤子买卖,而建站服务则是长久性的共赢吗?

    近年来,服务外包需要越来越多,业务也越来越多样化,特别是IT服务外包.随着资本市场的进入,人力成本的提升,素质教育与实际工作环境的脱钩,可谓是一将难求,所以很多公司或单位开始将目光关注到第三方专业的人 ...

  8. 支付宝小程序Serverless服务架构演进 | mPaaS 线下沙龙 CodeDay#1 分享实录

    文章概要: 随着云计算的深入,Serverless 这种全新的架构模式正在受到越来越多人的关注.通过 Serverless,开发者可以从繁杂的底层基础实施中解放出来,专心聚焦于业务实现,快速铺开业务. ...

  9. 支付宝小程序 Serverless 服务架构演进 | mPaaS 线下沙龙 CodeDay#1 分享实录

    文章概要: 随着云计算的深入,Serverless 这种全新的架构模式正在受到越来越多人的关注.通过 Serverless,开发者可以从繁杂的底层基础实施中解放出来,专心聚焦于业务实现,快速铺开业务. ...

最新文章

  1. CentOS7.5安装配置PostgreSQL10
  2. BT:胞外酶-化腐朽为神奇的催化剂
  3. 腾讯开源框架Angel推出3.0版本:全栈机器学习平台
  4. 关于地图添加大量marker点进行卡顿问题
  5. [C++STL]set容器用法介绍
  6. javaone_JavaOne 2012:在JVM上诊断应用程序
  7. Geometric Shapes - POJ 3449(多边形相交)
  8. 使用流进行通讯的一种可能犯的错误 (InputStream + OutputStream)
  9. js中两种定时器,setTimeout和setInterval的区别
  10. openstack vm实例pxe无法启动
  11. educoder 使用线程锁(lock)实现线程同步_Java8并发包源码分析:重入锁ReentrantLock和Condition实现原理...
  12. Horizon 桌面环境USB设备重定向问题
  13. JVM垃圾收集算法及垃圾收集器
  14. bandgap分析(原理、trimming、非线性、chopper)
  15. audio驱动之简单介绍
  16. sketch插件导出html,Sketch插件根据命名导出HTML片段Sketch Emmet
  17. MSDC 4.3 接口规范(17)
  18. 用Java实现网易云音乐爬虫(非selenium)
  19. 数一段字母中各个字母的个数
  20. C语言零基础——简单算术刷题系统

热门文章

  1. unreal——UnrealBuildTool : error : Unable to deleteXXXX
  2. httpd的MPM工作模式
  3. 印象笔记:部分Mac用户因为故障而丢失数据
  4. 如何安装打印机驱动程序?快速安装的方法
  5. 谈新手Java SE JDK 下载那个版本好!
  6. php使用amqp,php,_php的amqp应该怎样使用?,php - phpStudy
  7. 第九周项目——穷举法之三色球
  8. ecna 2017 J Workout for a Dumbbell (模拟)
  9. 全球及中国红外探测器芯片行业发展动态及投资应用前景调研报告2021-2027年
  10. jquery实现字数限制,超过部分...代替,后缀点击展开,点击后展开全文