快速业务通道

Weblogic中的load banlance问题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22

Weblogic中的load banlance问题

时间:2010-12-25 BlogJava 走走停停又三年

在一个复杂的企业应用环境中,往往一个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的loa

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号