一个J2EE集群下山寨架构

30 五月, 2010 (10:38) | J2EE服务器, 性能, 架构设计 繁体 English    DeliciOus    分享到新浪微博
作者: H.E. | 您可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://www.javabloger.com/article/j2ee-jiqun.html
豆瓣读书 向你推荐有关 J2EE服务器性能架构设计、 类别的图书。

我的废话:1.生命在于折腾,作为技术实践的目标是采用更廉价的成本,带来更高的计算能力。2.本文纯属口水,无牵涉到我现在的雇主和将来雇主公司的技术内幕话题,纯粹个人观点。
 
目前我们通常的手段把集群的服务器最前端放置一台Apache或者Ngixn作为一个负载均衡策略的机器,但是经过前段时间的压力测试测试,发现最后的瓶颈落在了2个话题上:
1、网络的带宽
2、前置的Apache或者Ngixn

出现这样的问题,针对第二点,让我有了新的想法。

口水一下:网上传说中 Ngixn 比 Apache强N多倍,但是经过我的多次反复压力测试,并非如此,并没有传说中的那么大的差距,所以我需要告诉大家一下。(很多时候还是需要自己去做论证)。
 
现在我想到的一个新的解决方案,也是一个山寨方案,因为光是采用LVS对session不好管理,大家不要我笑啊,有问题尽管抛砖,呵呵。
不用Apache或者Ngixn当前置机器,改成iptables+ipvsadm+heartbeat  等技术组合成一套ip轮询策略(可集群),并进行负载均衡。
 
以前用Apache在最前端的 http上做转发和session管理,现在我将转发改成tcp/ip协议,从理论上来说将会比原来的效率高很多,而且对机器的配置要求也会低很多,这样说明最前端的设备将会能支持更多的并发请求,而且将来我们满足更多的广泛应用,比如:针对我们将来遇到的项目,可以支持 imap(Qmail/Postfix) 邮件服务器集群方案,MySQL N+1负载均衡的廉价解决方案,这为我们将来在非web应用层上做大规模集群、负载均衡 计算打下基础。
 
当然,我们还可以采用HA-Proxy的方案,针对邮件服务器集群和MySQL负载均衡也是很不错的解决,并且现在已经能在公司的pc机器上跑起来,那么为什么要需要采用上面我说的那种方案,因为iptables+IP策略比HA-Proxy更靠近底层协议,更直接,会带来更高的效率。
 
下面再来介绍一下这个方案:
1.首先最前端将会有2个机器采用heartbeat 技术做集群(双机备份),防止其中一台机器down掉
2.在最前端采用iptables+ipvsadm做 TCP/IP的转发策略发送到指定的机器,对外提供一个虚拟的ip地址,如果其中一台机器down掉,ipvsadm将会自动踢出,复活后自动加入。
3.J2EE/Servlet 服务器如果接受到转发的请求中包含session会话,将通过容器中自己开发的Servlet 过滤器程序进行管理,放入最后端的存储服务器 MySQL的内存表或者Memcached、MongoDB 等,总之基于内存存储的服务器。
4.最后端的存储服务器将会做双机备份,防止用户的session数据丢失。
 

整个架构如图所示:
  http://www.javabloger.com/images/2010-05/iptable_webapp_session_mysql.png

查看大图请点击这里
 
–end–

 

豆瓣读书  向你推荐有关 J2EE服务器 性能 架构设计、 类别的图书。



Creative Commons License
本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。

评论

Comment from andy
Time 2010年05月30日 at 12:41 下午

写的不错,表扬。

评论

评论也是有版权的!




5331