WEB开发网
开发学院软件开发Java Weblogic中的load banlance问题 阅读

Weblogic中的load banlance问题

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:在一个复杂的企业应用环境中,往往一个application server无法承担所有的服务请求,Weblogic中的load banlance问题,所以很多企业都为此架起了多个服务器实例,这些服务器实例结合在一起,直接将session作为数据,post到proxy端,可以组织成一个强健的企业运行环境,它易于扩展、支持l

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

1 2 3 4 5  下一页

Tags:Weblogic load banlance

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接