OpenWhisk支持开放api, 任何用户都可以通过一个package中的feed的方式来暴露一个事件产生服务。关于如何发布自己的feed属于openwhisk的较高级话题。本文中,我们来说一下feed的架构和实现

目录

  1. Feed的基础模式

    • 1.1 Hooks
    • 1.2 Polling
    • 1.3 Connections
  2. Feed和Trigger的不同
  3. Feed Actions的实现
    • 3.1 使用Hooks实现Feeds
    • 3.2 使用Polling实现Feeds
    • 3.3 使用Connections实现Feeds

1、Feed的基础模式


创建一个feed包含三种基本方式: HooksPolling 和 Connections.

1.1 Hooks

在使用Hooks来实现feed的方式中, 我们使用一个由另一个服务提供的webhook来创建feed。我们配置一个webhook到一个外部的服务上(例如github hooks)。这样,外部服务会直接POST到一个URL来触发trigger。 这是目前实现“低频次feed”最简单的方式了。

1.2 Polling

在”Polling”的方式中, 我们使用一个 action 定期的轮询一个endpoint来获取新的数据。 这种方式很容易构造, 但也很显然,events的频次会受到轮询的时间间隔的影响。

1.3 Connections

在 “Connections” 的方式中, 我们在某个地址启了一个独立的服务来维护与feed产生源的长连接。长连接实现的方式可以是
long polling也可以是消息推送的方式等。在openwhisk内部cloudant变化的feed就是connection的方式来实现的。

2、Feed和Trigger的不同


Feeds和triggers感觉上有点相似,但是在技术概念上其实是不同的。

  • 在OpenWhisk是用系统中“流”的方式来处理events的。
  • 一个trigger从技术上来说,是一个event的类的名称。每个event精确属于某个trigger; 我们可以把“trigger”类比成消息订阅系统中的一个“主题”. 一个 T -> A 的rule 代表:当一个trigger T触发的event到达了, 就调用 action A
  • feed指的是一个events的流,这些events都属于某个trigger T。每个feed都被一个Feed action控制,这个action处理了组成这个feed的事件流的创建、删除、暂定和恢复. Feed action通常通过一个rest api与产生events的外部服务交互。

3、Feed Actions的实现


Feed action 其实就是一个普通的 OpenWhisk action, 但它可以接收如下参数:

  • lifecycleEvent: 这个值是 ‘CREATE’, ‘READ’, ‘UPDATE’, ‘DELETE’, ‘PAUSE’, ‘UNPAUSE’中的一个。
  • triggerName: trigger的“全名”, 包括了namespace等信息。
  • authKey: openwhisk用户的基本认证,看看是否有触发这个trigger的权限。

Feed action当然也可以包含其它参数,用来更好的管理feed。例如处理cloudant变化的feed action会包含‘dbname’‘username’, 等参数.

当用户用CLI加上—feed参数来创建一个trigger时, 系统会自动调用这个feed action,并带上之前的参数.

举个例子, 假设用户创建一个mycloudant绑定到cloudant这个package, 并使用了username和password 作为绑定参数. CLI命令如下:

wsk trigger create T --feed mycloudant/changes -p dbName myTable

其实系统会做如下操作:

wsk action invoke mycloudant/changes -p lifecycleEvent CREATE -p triggerName T -p authKey <userAuthKey> -p password <password value from mycloudant binding> -p username <username value from mycloudant binding> -p dbName mytype

如上面的代码所示,叫做changes的feed action处理了这些参数,它接受所有需要从Cloudant创建一个events流的action,并导向trigger T.

对于 Cloudant changes feed来说, 这个action直接与cloudant trigger对话,我们实现了一个基于长连接的架构。接下来,我们还会讨论其它几种架构。

当然,相似的feed action操作还包括 wsk trigger deletewsk trigger update 和 wsk trigger get.

3.1 使用Hooks实现Feeds

如果一个事件的生产者支持webhook/callback那么我们能很轻易的就创建一个feed。

这样我们不必在OpenWhisk外实现一个长时间存活的服务。 所有的feed管理自然就是无状态的OpenWhisk feed actions, 第三方的webhook api就替我们实现了。

Webbook可以直接POST请求到例如如下的URL地址上:

POST /namespaces/{namespace}/triggers/{triggerName}

这个POST请求会被解释成一个JSON文档,最后定义成触发事件。OpenWhisk rules传递这些trigger的参数来运行一个actions作为这个event的结果。

3.2 使用Polling实现Feeds

我们可以完全基于OpenWhisk,创建一个OpenWhisk action来定时轮询一个feed源,而不用与外部服务建立长连接。

对于webhook不可用,但又不需要大处理量和低延迟的场景来说, polling 就是一个很好的选择。

创建一个基于polling的feed, 步骤如下:

  1. 使用 whisk.system/alarms feed 创建一个周期性的 trigger (T) 。
  2. 开发者创建一个 pollMyService action 来轮询远程服务和返回新的时间。
  3. 创建一个rule: T -> pollMyService.

这样,我们就完全基于OpenWhisk实现了一个轮询的trigger,而不用创建其它服务。

3.3 使用Connections实现Feeds

上面的两种实现方式都比较简单。 然而,如果你想要一个高性能的feed, 那么就只能用长连接或者long-polling等技术来实现了。

因为OpenWhisk actions都是短时运行的, action不能管理一个长连接到第三方服务。所以我们必须创建一个独立的服务 (在 OpenWhisk之外) 来保持长时运行。 我们把它叫做 provider services, 一个provider service可以维持到第三方的长连接,从而来处理源源不断的事件。

Provider service可以提供一个REST API来允许OpenWhisk 的feed action来控制feed。Provider service常常在event provider和OpenWhisk之间扮演一个代理的角色, 它从第三方接受到时间然后通过trigger发送给openwhisk。

Cloudant changes feed 就是经典的例子 — 它创建一个 cloudanttrigger 服务,在 Cloudant notifications长连接和OpenWhisk triggers之间传递消息。

其实 alarm feed 也是用类似的方式来实现的。

基于连接的架构是要处理高性能的选择, 但它的消耗也比polling和hook的方式要大。大家在实现的时候可以根据场景考虑采取的方案。

OpenWhisk feeds的模式和实现相关推荐

  1. Spring boot项目(问答网站)之timeline的推拉两种模式

    Timeline介绍 所谓timeline就是当用户打开主页看到的随着时间轴发生的一系列时间的整合,主要包含: 关注用户的最新动态 热门推荐 广告推荐整合等等. 推.拉模式 推模式: 当一个用户关注了 ...

  2. 大淘宝服务端技术干货沉淀和总结

    网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...

  3. python 各种模块学习

    from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...

  4. 如何开发一个Feeds流系统——写扩散模式为例

    一.了解Feeds流 在学习如何开发Feeds流应用前,我们需要先了解什么是Feeds流. 1. 什么是Feeds流 Feeds流是一个持续更新并展示给用户的信息流.它将用户主动订阅的若干消息源组合在 ...

  5. 微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨

    sns系统,微博系统都应用到了feed(每条微博或者sns里的新鲜事等我们称作feed)系统,不管是twitter.com或者国内的新浪微博,人人网等,在各种技术社区,技术大会上都在分享自己的feed ...

  6. 荣耀9igoogle模式_iGoogle个性化主页的6种替代方法

    荣耀9igoogle模式 iGoogle has less than a year to go before it's shut down for good on November 1, 2013. ...

  7. rss聚合模式案例_RSS的完整形式是什么?

    rss聚合模式案例 RSS:真正简单的联合 (RSS: Really Simple Syndication) RSS is an abbreviation of Really Simple Syndi ...

  8. 管道过滤模式 大数据_大数据管道配方

    管道过滤模式 大数据 介绍 (Introduction) If you are starting with Big Data it is common to feel overwhelmed by t ...

  9. Windows上帝模式——隐私浏览必备

    所谓的Windows上帝模式,就是一个可以快速地打开各种设置功能的文件夹. 上帝模式的来源 先来说下上帝模式的来源,它可以被追溯到2007年的一篇帖子: *图片来自网络 国外一网友在论坛www.mer ...

最新文章

  1. 最全19000+国外AE模板合集包
  2. 职场:5种幼稚表现,好多工作十年的人还在犯
  3. Photometric Stereo 初體驗
  4. pytorch mseloss bceloss 对比
  5. TypeScript class 的参数属性 parameter properties
  6. xshell怎么让程序后台运行_使程序在Linux下后台运行
  7. 若依单体版本代码生成模块使用教程
  8. c语言 __FILE__,__DATE__,__TIME__ (宏)
  9. PHP程序员如何突破成长瓶颈(php开发三到四年)
  10. PHP 获取访问来源
  11. 面试被问如何保证缓存与数据库的双写一致性?这篇帮你搞定
  12. Silverlight常见问题解决方法
  13. 数据结构、栈和队列、树和二叉树
  14. 西安交通大学城市学院的计算机类专业,西安交通大学城市学院计算机系2020级专业分流会...
  15. autojs网络验证,权朗网络验证源码
  16. C语言的fgets() 与 gets()
  17. ES初探之——shard和replica
  18. 鬼吹灯之龙岭迷窟 4192
  19. 某移动端防作弊产品技术原理浅析与个人方案构想
  20. 微信小程序(4)——视图容器之moveable-view和moveable-area

热门文章

  1. MV:频域的噪音和过滤
  2. 2021年机械员-通用基础(机械员)考试及机械员-通用基础(机械员)理论考试
  3. 卡梅隆大学计算机排名,2022卡梅隆大学全美排名多少(研究生院)
  4. 基于vs2019的静态链接库的创建与使用(超详细)
  5. 什么是底层架构_厉害!阿里技术专家发布1500多页计算机底层架构原理解析宝典|现代汽车|计算机|原理|操作系统|存储器...
  6. 父母不会用手机 App?中老年群体的app应用产品
  7. 干货 :集成学习入门介绍
  8. VirtualBox简体中文版下载安装使用图解教程
  9. java 数字 字母 递增_JAVA流水号生成规则(按默认规则递增,数字不够添加字母递增,位数不够自动加1)...
  10. 某dewu(毒)数据接口研究