转载

七种WebSocket框架的性能比较

前一篇文章 使用四种框架分别实现百万websocket常连接的服务器 介绍了四种websocket框架的测试方法和基本数据。 最近我又使用几个框架实现了websocket push服务器的原型,并专门对这七种实现做了测试。 本文记录了测试结果和一些对结果的分析。

这七种框架是:

  • Netty
  • Undertow
  • Jetty
  • Vert.x
  • Grizzly
  • spray-websocket
  • nodejs-websocket/Node.js

测试环境

使用三台C3.4xlarge AWS服务器做测试。 一台作为服务器,两台作为客户端机器, 每台客户端机器启动10个client,一共20个clientC3.4xlarge的配置如下:

型号 vCPU 内存 (GiB) SSD 存储 (GB)
c3.large 2 3.75 2 x 16
c3.xlarge 4 7.5 2 x 40
c3.2xlarge 8 15 2 x 80
c3.4xlarge 16 30 2 x 160
c3.8xlarge 32 60 2 x 320

服务器和客户端机器按照上一篇文章做了基本的优化。

以下是测试的配置数据:

  • 20 clients
  • setup rate设为500 * 20 requests/second = 10000 request /second
  • 每个client负责建立50000个websocket 连接
  • 等1,000,000个websocket建好好,发送一个消息(时间戳)给所有的客户端,客户端根据时间戳计算latency
  • 如果服务器setup rate建立很慢,主动停止测试
  • 监控三个阶段的性能指标: setup时, setup完成后应用发呆(idle)时,发送消息时

测试结果

Netty Vert.x Undertow Jetty Grizzly Spray Node.js
Setup时 cpu idle: 90%
minor gc: Few
full gc: No
Setup完成后 cpu idle: 100%
memory usage: 1.68G
server free memory: 16.3G
发送消息时 cpu idle: 75%
minor gc: few
full gc: No
Message latency (one client)  count = 50000    min = 0    max = 18301   mean = 2446.09 stddev = 3082.11 median = 1214.00   75% <= 3625.00="" 95%="" <="8855.00" 98%="" 99%="" 99.9%=""> 
正文到此结束
Loading...