一个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数据丢失。
查看大图请点击这里
–end–

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







Comment from andy
Time 2010年05月30日 at 12:41 下午
写的不错,表扬。