Apache Mina 与 Openfire 不得不说的故事

关注 Apache Mina 已经有些时日了,也用 Mina 做了不少实验,尤其喜欢其简洁优雅的接口以及对 Spring 和 JMX 的良好集成。简而言之, Mina 是一个高性能的 Java 异步网络通讯框架。当前已有多个开源项目使用 Mina 构建底层 I/O 设施,或是正将底层 I/O 设施转用 Mina 实现。对于后者,据传多半会有大幅的性能提升,比较典型的一个例子是开源 XMPP 服务器 Openfire ,其官方站点在一篇题为“ Scalability: Turn it to Eleven ”的 Blog 中声称在改用 Mina 作为其网络 I/O 框架后,性能提升了 11 倍之多。具体的数据有两个版本,皆令人印象深刻,分别是:

1. 单机单 JVM 同时支持 17,000 在线 XMPP 客户端。
2. 在启用了单个 Connection Manager 的情况下,可同时支持多达 33,000 个在线 XMPP 客户端

解释一下:目前看来,这篇 Blog 发表于 2006 年 12 月 19 日,并且在发表之后至少有过一次更新,我所见到的第一个版本的原文目前已无法考证,因此第一个版本的数据是我凭记忆写下来的,可能与原文有所出入。在更新后的版本中,原数据被更新为添加了 connection manager 支持后的评测数据。原文如下:

So far we've hit 33k concurrent users with a single connection manager, running on a (old) Sun 280R server. CPU usage in the connection manager and core Wildfire server both hovered around 7% each. Those numbers are a pretty huge improvement over the previous version of Wildfire, which was barely able to hit 7500 concurrent users with maxed out CPU and memory usage. We're also only part way through the optimization process. The goal for the 3.2 release is to demonstrate 100k concurrent users on a single domain.

解释一下,所谓的 connection manager ,是一种作用类似于整流器的服务器,大致的作用就是将外部的海量客户端发起的 TCP 连接汇总为少数的连至后台业务逻辑服务器的 TCP 长连接,从而使后台业务逻辑服务器能够处于较为稳定的网络环境并专注于业务逻辑处理。因此使用 connection manager 这样的整流服务器确实可以提高单台业务逻辑服务器所能够承受的并发客户端数目。

不过 Openfire 团队在这里却有些含糊其辞:

首先,尽管自打一开始在 Blog 的评论中就有人希望 Openfire 团队公开具体的运行环境和配置以帮助调校自己的服务器性能,但看起来 Openfire 团队并没有打算将之公布。于是,从实验验证的角度上看,他人难以重现,从而也就难以验证这组数据。

其次,在第二版的数据中, Openfire 团队声称只是用一个 connection manager 便轻松达到了支持 33k 并发用户的性能,这是很可疑的。诚然,上文解释过 connection manager 的整流作用确实可以提高整个集群的并发支持能力,但一般而言,这是在多台 connection manager 对应一台业务逻辑服务器的情况下达到的。如果只使用单个 connection manager 实例,那么实际上跟没有使用差不了多少,因为集群的并发性能仍然受制于这单个 connection manager 所能承受的最高并发用户数。换言之,产生第二版数据的测试环境上的那个 connection manager 应该独立承担这 33k 个并发用户。然而,截至本文发文时止,从 Openfire 官方站点来看,当前与 Openfire 配套使用的 Connection Manager 的并发性能似乎与这个期望值仍有较大差距,摘录 官方站点原文 如下:

Each connection manager should handle at least five thousand concurrent users. Experimental support for non-blocking connections is under development, which will greatly increase the number of connections that each connection manager module can support.

可见,这里只说每个 connection manager 至少可以支撑 5k 个并发用户,与我们的期望值 33k 差的还是蛮远。不知是不是 Openfire 团队雪藏了什么能够大幅提高 Openfire 服务器集群性能的秘密武器呢?

不过不管怎样,如果你在使用 Java 进行并发网络应用开发, Mina 绝对是一个值得推荐和学习的优秀工具!

你可能感兴趣的:(Apache Mina 与 Openfire 不得不说的故事)