写点什么

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

  • 2008-02-01
  • 本文字数:1823 字

    阅读完需:约 6 分钟

以反向 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

2008-02-01 03:055976
用户头像

发布了 71 篇内容, 共 23.9 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

UI 自动化中的分层设计

霍格沃兹测试开发学社

大数据培训需要注意哪些方面

小谷哥

房产|1月全国70城房价出炉!疫情放开后你关心的城市房价有何变化

前嗅大数据

大数据 数据分析 房产

避坑指南|监控宝网站监控的常见问题及解决方法

云智慧AIOps社区

监控 告警 监控宝 监控告警 监控指标

实力见“证”:Tapdata 技术创新与发展潜力广受认可

tapdata

Migrate your data into databend with DataX

Databend

一款好的低代码开发平台应该是什么样?

YonBuilder低代码开发平台

多云和混合云场景下的 API 管理:挑战与选择

API7.ai 技术团队

api 网关 APISIX

渲染农场优势是什么_云渲染农场怎么用?

Renderbus瑞云渲染农场

云渲染 云渲染农场 Renderbus云渲染农场

测试开发之路--UI 自动化设计军规

霍格沃兹测试开发学社

IDC发布《2022中国大模型发展白皮书》,文心大模型能力全面领先

飞桨PaddlePaddle

大模型 文心

软件测试 | 参数化测试用例的使用

测吧(北京)科技有限公司

测试

Tapdata Connector 实用指南:数据入仓场景之数据实时同步到 BigQuery

tapdata

使用大恒USB工业相机PythonSDK进行逐帧率图片采集

Python 数据采集 摄像头 大恒SDK

虚幻引擎UE4如何实现打包后播放片头?其实超简单!

3DCAT实时渲染

虚幻引擎 ue

接口调试时如何请求一个需要登录才能访问的接口

代码没有BUG

接口调试 API测试 apipost

分享7个刺激的老司机网站,别轻易点开

引迈信息

程序员 面试 前端 摸鱼

Python获取磁盘、文件夹大小信息(一)

Python 文件夹数据获取

参加java培训学习怎么样

小谷哥

测试开发之路--UI 自动化常用设计模式

霍格沃兹测试开发学社

测试开发之路--UI 自动化常用设计模式 (二)

霍格沃兹测试开发学社

热点面试题: 常用位运算方法

Immerse

JavaScript 前端面试题 #热点问题 前端javascript

【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍

3DCAT实时渲染

Unity Unity3D 游戏开发引擎

软件测试 | Capability使用进阶

测吧(北京)科技有限公司

测试

零基础学习前端培训需要多久

小谷哥

关于工具软件:Apipost和Apifox哪个更好用看这篇就够了

代码没有BUG

Apifox 接口调试 API测试 apipost

Python+Opencv读取高帧率USB摄像头问题

Python 数据读取 摄像头

Python获取磁盘、文件夹大小信息(附邮件发送)(二)

Python 文件夹数据获取

软件测试 | 属性获取与断言

测吧(北京)科技有限公司

测试

Web前端开发最好用的几个WebGL框架

2D3D前端可视化开发

JavaScript 前端开发 WebGL webgl框架

Comet: 上万的并发用户、亚秒级的响应时间_Java_Alexander Olaru_InfoQ精选文章