当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

Weblogic中的load banlance问题[Java编程]

赞助商链接



  本文“Weblogic中的load banlance问题[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

在一个复杂的企业利用环境中,常常一个application server无法承当全部的服务恳求,所以很多企业都为此架起了多个服务器实例.这些服务器实例结合在一同,可以组织成一个健旺的企业运行环境,它易于扩大、支持load banlance, 支持fail over, 可以做到backend server的failure关于客户是透明的.这样的一个企业环境就是我们常说的Cluster.Weblogic Cluster供应了多种load banlance的大概, 比方web application恳求处理,可以通过proxy来实现(e.g. apache, HttpClusterServlet, IIS), 差别的J2EE Component在Weblogic有差别的load banlance实现.下面我们来一一看看,

1: Http恳求通过proxy实现的load banlance

当客户端通过proxy拜候Cluster中的业务页面时,proxy通过自身的算法(round-robin)来实现load banlance.当然这些恳求要求是从差别的客户端(大概不带session的同一客户端的恳求)发动的.关于同一客户端,假如页面中利用了 session, 那么Weblogic 通过session粘连来实现同一客户端的恳求会被dispatch到primary server上.假如primary server无法供应服务,那么恳求会被dispatch到其他server上.session粘连可以通过以下几种方法实现:

1.1:browser支持cookie的话,weblogic会把jsession id写入到cookie中,下次恳求提交的时刻jseeion id会被提交到proxy端,proxy通过jseeion id 来决意恳求的dispatch.

1.2:browser不支持cookie,server端在处理返回页面时,调用response.encodeURL()来将session id附在url上.

1.3:post-data方法,直接将session作为数据,post到proxy端.

我们来看看weblogic供应的HttpClusterServlet是若何实现load banlance的,

public synchronized Server next() {
       if (list.size() == 0) return null;
       if (index == -1) index = (int)(java.lang.Math.random() * list.size());
       else index = ++index % list.size();
       Object[] servers = list.values().toArray();
       return (Server) servers[index];
}

HttpClusterServlet保护一个managed servlet list,每当一个恳求被dispatch到某个managed server后,server list的index加1,这样在下次dispatch恳求的时刻,恳求将会被dispatch到server list中的其他server上去.逻辑很简单,但基本也实现了load banlance功效.

2:InitialContext的load banlance

我们知道,每次我们需求获得jdbc connection, jms connection,ejb stub这类RMI Object的时刻,我们都要初始化一个上下文,问题是我们初始化上下文的时刻,衔接的毕竟是哪个managed server?

初始化上下文的时刻,我们需求供应一个provider url, 以下:

PROVIDER_URL = "t3://localhost:7011";

这种写法很简单,直接衔接7001对应的server, 但假如写法以下呢?

CLUSTER_PROVIDER_URL="t3://localhost:7011,localhost:7021";

这时刻,load banlance就又来了.10个客户端(weblogic server大概thin client)new 10个InitialContext的话,这10个客户端将55辨别衔接到后端的两台server上去.实际上客户端在new InitialContext的时刻,weblogic会成立一个T3衔接到对应的managed server上(RJVMConnection),注意这个RJVMConnection是个长衔接,在同一个JVM中,连向同一managed server的衔接只有一个.即假如一个客户端,持续new 10个 InitialContext, 这10个Context实际上是同一对象,weblogic server这时根本不会和后端的server通讯,因为对象已经在client JVM中有了.

new InitialContext的load banlance算法基本和proxy的算法一样,都是保护一个server list, 通过index递增的办法实现.差别的是:在衔接某个managed server的connection碰到peer gone的时刻, proxy可以recover server list, 而jndi context的load banlance算法例不能.也就是说假如后端有三个managed server, server1, server2相继呈现弊端的话,全部客户端的context将城市衔接到server3, 即便server1, server2可以恢复过来,后续恳求也不会衔接到他们,除非server3后来呈现问题.

值得一提的是:context全部的相关操作时server affinity的,而非load banlance.比方:2个客户端辨别new了个context, 辨别衔接到server1和server2上,衔接到server1的context,做了10次lookup,那么这10次操作,都在server1上完成,不会在server2上作任何操作.所以说jndi级别的load banlance不是绝对均衡的.


  以上是“Weblogic中的load banlance问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 配置BEA WebLogic 8.1 JDBC衔接
  • WebLogic利用DB的Java控件访谒数据库
  • 把WebLogic EJB程序迁移到JBoss上
  • 在Weblogic上配置Hibernate为JNDI
  • JBuilder+WebLogic实现教材管理系统
  • Jbuilder6.0+Weblogic6.0完成EJB开公安置
  • 以weblogic为服务器开辟会话EJB
  • WebLogic8.1的中文问题办理办法
  • WebLogic UDDI Client API实例学习(一)
  • WebLogic UDDI Client API实例学习(二)
  • Weblogic中因为IP变更招致SubCoordinator not available,Transa
  • 关于在weblogic中异步伐用webservice
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .