BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Comet: 上万的并发用户、亚秒级的响应时间

| 作者 Alexander Olaru 关注 0 他的粉丝 ,译者 沙晓兰 关注 0 他的粉丝 发布于 2008年2月2日. 估计阅读时间: 6 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

以反向Ajax著称的Comet,主要目标在于通过借助HTTP1.1中持久连接的特性,使得客户端可以即时获知服务器端所发生的状态变化。正如Infoq.com之前提到过的那样,和Comet类似的,还有很多其他所谓的“推送技术(push technologies)”也在试图实现同样的目标。

Greg Wilkins和他在Webtide的团队瞄准了测量Comet的延展性的目标进行了一系列的测试(Webtide是由开源项目Jetty web服务器的主要技术开发员组成的一家公司)。根据测试结果,他们发表了在测试中的一些发现。更具体地说,这些测试涉及到在Jetty上运行实现了Bayeux协议的Dojo Cometd应用。除了在服务器上运行Cometd以外,他们在客户端机器(1-3台之间)同样也运行Cometd,从而服务器和客户端共同生成相当于两万个用户的负载。同时,服务器和客户端机器都采用Amazon EC2虚拟服务器的大实例(Large Instances)。测试结果的以图表的形式总结如下:


以下是从这些测试中得到的值得强调的几个要点:

  • 即使在同时面对两万个用户时,该技术都能达到亚秒级响应时间(sub-second latency)。但是,在响应时间和吞吐量两者间仍然存在着权衡取舍的需要。对于5000个用户,如果响应时间达到100毫秒,吞吐量是每秒2000条信息。如果将响应时间延长到250毫秒,吞吐量则提高到每秒3000条信息。
  • 在测试中使用的应用程序仅是一个能够支持每个房间200个用户的聊天室程序。“在每个测试中,负载是定时间隔地向10个随机选取的聊天室突发50字节的载荷。发送的时间间隔是选定的,这样一来可以保证服务器CPU的状态基本稳定在10%到50%的空闲”。
  • Greg指出“一台机器无法生成或者处理和20000个各自拥有计算机和网络设施的用户同样的负载”。为了尽可能的弥补这个不足之处,一部分测试(见上图中绿色圆圈)通过3台不同的机器模拟用户来完成。
  • 对于使用3台客户端机器来完成的测试,关于响应时间的测量是从模拟了1000个用户的机器上获得。尽管测量不是完全精确,但是Greg指出,他们从处理剩下的20000个用户的其他两个客户端所观察到的响应时间的上限值相当于在一台客户端机器上运行测试时所观察到的响应时间。
  • 捆绑了Jetty6.1.7的Cometd demo仍然需要一些修改。其中一些修改和减轻服务器端线程池的lock starvation相关,另外一些则牵涉到启动步骤的修改。

正如在评论以及Greg之前的一篇文章中提到的那样,Jetty能够异步将消息推向客户端,因而面对同样数目的客户所需资源要少的多。在这些测试中所应用到的对线程池的修改代码现在可以下载,并且Greg告诉Infoq说这些修改代码将囊括在Jetty下一个发布版本中。他也补充提到Webtide正在通过负载均衡调度器来运行类似的测试,不久将会发布更多的测试结果。

另外一个能够突出Comet延展性的很有意思的方法是Lightstreamer所采用的方法。它的实现是基于一个不依赖于底层应用或web服务器的独立服务器。一些web/应用程序服务器,扩展以后像流引擎(streaming engine)那样工作,这些服务器基于的是"一线程一连接模式(one-thread-per-connection model)"。相对来说,Lightstreamer将服务器可以维持的连接数与服务器所能使用的连接数进行解耦,因而可以扩展面向非常大数量的用户。

在和Infoq的对话中,Alessandro Alinone —— Lightstreamer的CTO表示,他们在金融领域已经有客户了,在产品中实现了“平均有10000个并发用户以及平均每个用户每秒钟3-5个更新的频率。”他补充说“Lightstreamer通过一个OEM协定在TIBCO Ajax消息服务中作为核心引擎使用。因此,TIBCO前端的一些很有意思的产品方案正在急剧增长中。”

除了服务器之外,Lightstreamer的后端构架包括:

  • 一个数据适配器——插件模型,连接Lightstreamer需要集成的数据资源。它能够使用任何技术来集成数据,但是一个异步数据种子(例如JMS,TIB/RV,MQ)要避免通向客户端的异步数据链断掉。
  • 一个元数据适配器——插件模型,为Lightstreamer服务器提供元数据的推送(push)方案。

客户端,浏览器像通常一样从web服务器得到静态网页,但是它可以收到从Lightstreamer服务器推向它的即时更新。这些更些的消费者可能是一套和大多数浏览器兼容并且和大部分第三方AJAX框架和工具箱共存或集成的Lightstreamer JavaScript库。即时更新也可以通过Lightstreamer推向Flash/Flex应用程序,也可以推向使用Java或.NET开发的桌面应用程序。

查看原文:Comet: Sub-Second Latency with 10K+ Concurrent Users

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT