`

Apache Mina 与 Openfire 性能

阅读更多

<转自http://rhythm-zju.blog.163.com/blog/static/31004200801504318444/>

 

关注 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 绝对是一个值得推荐和学习的优秀工具

分享到:
评论

相关推荐

    MINA框架源码

    Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便 apache mina apache mina 利的框架。当前发行的 MINA ...

    openfire即时消息处理

    Apache MINA是Openfire底层通信处理的关键,这是一个网络应用框架,专注于简化高性能、高可靠性的网络应用开发。MINA通过Java NIO(非阻塞I/O)提供了对TCP/IP、UDP/IP以及其他传输协议的支持,并具有过滤器机制、...

    目前最详尽的openfire介绍

    Openfire采用了Apache MINA框架来处理网络通信,MINA是一个强大的网络应用程序框架,旨在简化高性能和高可靠性网络应用的开发。MINA通过Java NIO提供跨不同传输类型(如TCP/IP、UDP/IP)的统一API,同时支持串口通讯...

    openfire处理消息流程,及openfire详细信息.docx

    Apache MINA 是 Openfire 采用的网络应用程序框架,它为开发者提供了异步、事件驱动的网络编程接口,支持多种传输协议,如 TCP/IP、UDP/IP、串口通信以及虚拟机内部通信。MINA 的特性包括统一的 API、过滤器机制、...

    openfire开发资料

    Apache MINA 是Openfire底层通信处理的基础,它是一个网络应用框架,基于Java NIO(Non-blocking Input/Output)设计,提供了异步、事件驱动的网络编程接口。MINA 支持多种传输协议,如TCP/IP、UDP/IP,甚至串口通信...

    openfire综合介绍

    Openfire与Spark和Smack一起,构成了一个完整的XMPP解决方案。 Spark是Openfire的客户端实现,它提供了一个用户友好的界面和插件架构,使得开发者可以轻松扩展其功能,而无需直接修改源代码。这有助于保持项目的...

    openfire消息机制和源码分析

    5. Apache MINA是一个提供高性能和高可靠性网络应用框架的Java库,它使用Java NIO框架来实现网络通信。MINA能够为TCP/IP、UDP/IP等不同类型的传输提供统一的事件驱动的异步API。它还提供了过滤器功能、多线程模型、...

    openfire综合介绍.doc

    在Openfire中,Apache MINA被用作网络应用程序框架,它提供了一种异步事件驱动的NIO(非阻塞I/O)机制,简化了高性能、高可靠性的网络应用开发。MINA支持多种传输协议,包括TCP/IP、UDP/IP,甚至串口通信,并且具备...

    XMPP与MINA

    而MINA(Multipurpose Infrastructure for Network Applications)是Apache软件基金会的一个网络应用框架,用于构建高性能、高可用性的网络服务器。MINA提供了异步I/O模型,适用于TCP和UDP通信,能够简化网络编程,...

    Openfire源码分析

    **MINA**是Apache组织下的一个高性能网络应用开发框架,它提供了基于Java NIO的异步事件驱动API,支持多种传输协议,如TCP/IP、UDP/IP等。MINA的设计旨在帮助开发者轻松构建高性能和高扩展性的网络应用。 ![MINA]...

    openfire3.10.2缺少的jar包

    Openfire的运行依赖于多个第三方库,如JavaMail、Apache MINA、Smack等,这些库通常以jar包的形式存在。当这些jar包丢失或版本过旧时,可能会出现以下问题: 1. **服务启动失败**:如果Openfire的核心组件或依赖库...

    openfire所需要的jar包

    此外,还有可能包含XMPP协议解析和处理的库,如Smack或Apache MINA,这些库负责解析XML流并实现XMPP协议栈。 `openfirejar`这个压缩包文件很可能包含了所有Openfire运行所必需的JAR文件,包括但不限于上述提到的`...

    Mina 框架研究与实现

    这一框架已被广泛应用于多个领域,如Red5项目中的RTMP协议实现、SubEtha.SMTP项目中的SMTP协议、Apache Qpid项目中的AMQP协议,以及Openfire项目中的XMPP协议等。这些实例充分展示了Mina框架在不同场景下的强大适用...

    Mina状态机介绍和实例

    MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本

    Android XMPP 即时通讯 Openfire二次开发资料,非常齐

    Apache MINA 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。Openfire 的通信处理基于 Apache MINA 框架实现,提供了一个通过 Java NIO 在不同的传输例如 TCP/IP 和 UDP/IP 上抽象...

    XMPP 协议讲解 openfire 结构分析以及插件开发指南

    Apache MINA是一个高性能和高可靠性网络应用程序框架,基于Java NIO实现,提供了统一的API支持不同的传输类型。它支持SSL/TLS加密,并集成了模拟对象单元测试和JMX管理能力,使得开发高性能网络应用更为容易。 在...

    mina-1.1.7.tar(1).gz稳定版

    MINA框架的应用比较广泛,应用的开源项目有Apache Directory、AsyncWeb、Apache Qpid、QuickFIX/J、Openfire、SubEthaSTMP、red5等。MINA框架当前稳定版本是1.1.6,最新的2.0版本目前已经发布了M1版本。

Global site tag (gtag.js) - Google Analytics