InfoQ

新闻

超越轮询?考虑PubSub、Push和MOM

作者 Gavin Terrill 译者 胡键 发布于 2008年8月1日 上午12时13分

社区
Architecture,
SOA
主题
数据访问,
消息传送,
性能和可伸缩性
标签
XMPP,
AMQP

OSCON '08大会上,Evan 'Rabble' Henshaw-PlathKellan Elliott-McCrea介绍了《超越REST?使用XMPP PubSub构建数据服务》。Robert Kaye对该幻灯片的报道如下:

Kellan谈到了FriendFeed,它是一个让使用者知道他们的朋友共享了新项目的网站。在这个例子中,Kellan指出:为了给45000名使用者检查更新,FriendFeed向Flickr轮询了290万次。而且在这45000名使用者中,在任意时刻只有6700名处于已登录状态。这当然是一种蹩脚的内容更新检查方式。Kellan说道:“轮询太逊了!”

解决这个问题的关键在于将标准REST Web服务抛在脑后,找出一种使用消息传递的方式,它是一种通知使用者内容变更的直接通信方式。

在这个上下文中,轮询意味着使用一种RESTful Web服务来为每个使用者获得(GET)更新。与之相反,PubSub(Publish/Subscribe,发布/订阅)是一种使用异步消息传递协议的架构性方法,其中发布者和任何订阅者都是解耦的。在需要向大量客户端发送更新通知的场合下,这些特征使得PubSub成为一种合适的可伸缩性选择。

在这个幻灯片中,Evan和Rabble描述了Jabber(一种基于XMPP[Extensible Messaging and Presence Protocol,可扩展消息传递和现场协议]的PubSub服务)的各种优势:

  1. XMPP工作在持久化连接之上
  2. 它是有状态的(SSL变得便宜)
  3. 被设计成为一个事件流协议
  4. 联邦和异步的天性
  5. 内置身份认证、安全和现场(presence)
  6. 为此构建和部署了Jabber服务器

该幻灯片引起了巨大反响。Kirk Wylie认为AMQP这样的基于MOM(Mesage Oriented Middleware,面向消息的中间件)的系统才是这儿真正需要的,而Joshua Schacter(del.icio.us创始人)也加入了论战的行列,并指出了一种更简单的方法。这个方法使用基于HTTP回调的技术:

简而言之,与频繁地轮询不同,客户端可以发送一个包含欲订阅资源(resouce)和交付更新的端点(endpoint)的普通HTTP请求到: http://your.app/subscribe?resource=/some/user&callback=http://my.app/endpoint

这样推断,端点当且仅当资源更新时才会收到RSS条目片断。出于安全考虑,交换要包含某种令牌,它可向合适的协议借鉴。订阅将在一段时间后失效,比方说,24小时,或将其作为一个参数传入。

评论者指出,这种系统早就存在了:Webhooks

Rabble提供了他关于使用回调的思考

那么,这里有两个问题,我们曾经考虑加入一页幻灯片来讨论ping back系统。显然,能够进行ping back/web hook似乎是个好模式,但也可能是反模式?

可以预见,创建一个大规模web hook系统,你将面临聚合器(aggregator)/爬行器(crawler)问题。使用XMPP绝对可行。这样,我们不仅实现了联邦功能,而且有着更好的接口。我们还有潜力可在其之上增加一些代理认证(auth)功能。

诸如Webhooks这类方法潜在地要比使用Jabber/XMPP简单得多,但是Blaine Cook认为这种复杂性是说得通的:

如果我们声称只需10行PHP脚本就可让系统可用,那么这一过程只能得到一个实现拙劣的输出消息队列。在中等规模(10000使用者,每人有50个联系人,1/5离线,每天2个帖子)情况下,你会看到每秒有2.3个远程HTTP请求,这种方法倒也并非一无是处。

尽管使用PubSub进行通知是一个优秀的架构方法,但是很多人对幻灯片的标题存有疑问。Dare Obasanjo对此概括得非常好,指出REST并非一个“金锤”(译注:比喻,意指手拿锤子,看到任何东西都是钉子。):

[因而],这个例子并非是指REST象Evan和Kellan的讲演标题暗示的那样不能进行伸缩,而是一个使用错误工具解决问题的例子。选择它的原因在于它碰巧能在其他场合很好的工作。

即使没有其他内容,这次讨论也突现了这一事实,考虑API消费者的使用模式在确定合适设计的过程中扮演了举重轻重的角色。

查看英文原文Beyond Polling? Consider PubSub, Push and MOM

深度内容

和Google互补的搜索引擎Wolfram|Alpha

Wolfram|Alpha与Google究竟是什么关系,Wolfram|Alpha自己是如何定位的?Wolfram|Alaph在多大程度上是语义网搜索呢?InfoQ中文站就等等这些问题采访了Wolfram研究公司中国区商务经理王翔。

SOA契约成熟度模型

本文说明了所推荐的契约版本管理设计策略是如何与SOA成熟度模型发生联系的。文章目的是为实现版本管理和可组合性提供一个路线图。

数据服务简介

Vijay Narayanan在这篇文章中对数据服务的几个方面进行了介绍,它们都是SOA实践者和数据架构师感兴趣的内容。本文对数据服务的几个方面进行了介绍,包括需求定义,基本原理和好处、范围、开发以及消费模式。

分块云计算

在本文中,Jimmy Nilsson描述了一种他在过去数年间观察到的一种正在缓慢成长的架构风格,他把这种风格称为“分块云计算”。

豆瓣网技术架构变迁

罗马不是一天建成的,豆瓣的技术架构也是随着用户规模的增长一直在持续变化中。在本次演讲中,豆瓣的首席架构师洪强宁将与大家一起分享从上线时的单台服务器架构开始一直到现在的豆瓣架构变迁历程。

融合思想:深入探索S#arp架构

Billy McCafferty展示了S#arp架构,它在ASP.NET MVC框架的基础上,荟萃了当今的最佳实践,应用在ASP.NET Web应用程序的架构设计中。

王雷谈开源以及新兴市场计划

中国作为新兴市场中的新兴市场,是Sun在美国之外实施SSE(SUN Startup Essentials)项目重点关注的地区。在QCon Beijing 2009期间,InfoQ中文站有幸对此项目的负责人王雷先生进行了采访,探讨了关于开源、新兴市场、SSE等话题。

使用HTML5构建下一代的Web Form

HTML5 是由 WHATWG发起的,最开始的名称叫做Web Application 1.0,而后这个标准吸纳了Web Forms 2.0的标准,并一同被W3C组织所采用,合并成为下一代的HTML5标准。