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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、apache服务器配置。 我们下载安装的是httpd-2.2.17-win32-x86-no_ssl.msi,安装完成后,我们需要配置一下,由于jwchat是用javacript去和openfire进行通讯的,所以他们之间的通讯是基于http的,但是由于浏览器为了安全性是不允许javascript跨域访问的。我们必须通过别的技术来绕过这限制,所以我们采取apache服务器的重定向功能去突破这个限制。 安装完成后进入到apache的安装目找到conf文件夹下的httpd.conf文件,用记事本打开,把下列几个配置项放开(默认被注释掉了) 1、LoadModule rewrite_module modules/mod_rewrite.so 2、LoadModule proxy_module modules/mod_proxy.so 3、LoadModule proxy_http_module modules/mod_proxy_http.so 然后再在本配置文件的末尾加入如下几行配置 ServerName blzc.com <Directory /var/jwchat> Options +Indexes +MultiViews </Directory> AddDefaultCharset UTF-8 RewriteEngine on ProxyPass /jwchat/http-bind/ http://blzc.com:7070/http-bind/ 在此有必要对proxyPass的参数做些说明 “/jwchat/http-bind/”:jwchat就通过访问http://域名/jwchat/http-bind/地址去和openfire通讯,apache接到请求后就会重新定向到http://blzc.com:7070/http-bind/ “http://blzc.com:7070/http-bind/”:被重新定向的地址,也就是我们的openfire的http访问地址。7070端口是openfire的默认访问端口,当然我们也可以进入openfire进行配置。 二、openfire的配置 安装好openfire后进入web式的管理界面,选择服务器-》服务器管理器-》系统属性 在里边添加两个属性 xmpp.httpbind.client.requests.polling = 0 xmpp.httpbind.client.requests.wait = 10 三、部署jwchat jwchat解压后的文件内容放到apache访问目录/jwchat文件夹下, 然后打开config.js文件,把相应的内容修改为如下的形式 var SITENAME = "blzc.com";//你要访问openfir的域名 name:"Native Binding", description:"Ejabberd's native HTTP Binding backend", httpbase:"/jwchat/http-bind/",//访问openfire的地址 type:"binding", servers_allowed:[SITENAME] 最后再把jwchat文件夹考到apache的htdocs文件夹下,重新启动服务,然后访问http://localhost/jwchat即可。 若出现“authorization failed”,则可能是SSL不支持的原因,需要修改jsjac.js,在if(this.has_sasl) 前面加上this.has_sasl=false;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值