项目是dorado+spring+ibatis,在做的时候完全没有考虑集群的问题
现在要做集群,代码上是否要做什么修改呢
另外,我考虑的2个问题,一个是Spring的单例bean,应该怎么处理?
另外ibatis的cache,如果在集群中复制这些cache?

解决方案 »

  1.   

    1、有些单例类由于集群会失效,建议改成存储过程实现
    2、集群有内存复制的选项
    3、需要注意负载均衡问题
    4、建立集群后,如果有一些要获取客户端IP代码需要修改,因为都会取到代理的IP
    5、集群内存复制要注意数据的序列化问题,没有序列化的数据时不能做到内存复制的,另需要考虑防止到内存数据大小,块太大可能会导致内存复制失败
      

  2.   

    Web集群中使用内存复制策略
    weblogic.xml 如下<!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"><weblogic-web-app>        <session-descriptor>                        <session-param>  <param-name>PersistentStoreType</param-name> 
        <param-value>replicated</param-value>                 </session-param>                 </session-descriptor></weblogic-web-app>
      

  3.   

    一: Programming Considerations for Clustered Servlets and JSPs 集群环境中的Servlet/JSP编程时注意事项: 1. Session Data Must Be Serializable 
       Session中存储的对象必须是可序列化的。 2. Use setAttribute to Change Session State 
       调用session对象的setAttribute方法,session对象和它的attributes会在集群中复制到其他服务器中。所以,对session中的attribute对象的任何更改后,都应该调用setAttribute方法来同步其他服务器的session。   这个同步过程是通过in-memory replication来实现的。 3. Consider Serialization Overhead 
       考虑拷贝的开销。拷贝过程中序列化开销是应该考虑的,如果对象数据很大,更应该考虑性能问题。 4. Control Frame Access to Session Data 
       尽量限制前台用FrameSet来访问session,因为多个Frame的请求,对于服务器来说,可能是分离的,但是对客户端来说,确应该是一个独立session。这样,如果每个frame都访问或者修改session,则会发生逻辑性的错误。二: Session复制/备份 1. 通过前端代理(例如apache)访问集群中的JSP/Servlet时 注意: 
    客户端浏览器写有两个cookie:primary,scondary分别对应集群中的A,B两个Server。 
    A Server上存有客户Session数据(Primary State), B Server保存A Server的session备份(Secondary State)。 如果A Server出故障,前端代理会根据cookie自动路由到B Server,这样B就变成新的Primary Server, 同时系统会将Session State备份到Server C上,Server C也就变成了Secondary Server了。 通过负载均衡硬件访问集群中的JSP/Servlet 
      

  4.   

    做了weblogic集群,连session复制都没弄就上线了,-_-