java应用服务器集群环境下代码编写关注点

 J2EE架构下,软件的部署环境为集群的情况很多,所以针对集群环境的软件开发非常重要,所以我们在编码过程中要超前思考,以免加大后期的工作量。

了解集群

什么是集群:

web应用服务器集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样。为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理。从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性。

集群技术的特点

高可靠性和高可用性:通过集群技术组成的系统,可以确保数据和应用程序对最终用户的高可用性和高可靠性,也就是说当主节点上的系统崩溃时,冗余节点就从替补角色转换到正式角色,并自动投入应用,从而保证了系统运行的不间断。或者检测某一个空闲服务器,将请求分发给它,对请求进行处理,而且这一过程对用户来说,是透明的,用户察觉不到!

稳定性和可伸缩性:在系统的处理能力需要增加的时候,除了通过增加集群中每个计算机节点的单机处理能力(如通过增加CPU数量、增加内存大小等手段)外,还可以通过增加集群节点数,即通过向群集添加新的计算机节点,使服务随着处理器的添加而伸缩,从而增大应用程序吞吐量,以达到增加系统的整体处理能力的目的,完成系统的扩容。

 

 

Web应用服务器集群结构图,下面例举了weblogic和websphere集群结构图

websphere集群架构图 

websphere集群架构图

weblogic集群架构图

weblogic集群架构图

排除网络设备,由上面两幅图可以观察到,应用服务器集群包含了三部分

1.Web服务器(Web Server)
Web服务器专门处理HTTP请求(request),应用的软件如Apache,IBM HTTP Server,或者自己写的代理服务等等。
2.应用程序服务器(The Application Server)
应用程序服务器是通过很多协议来为应用程序提供(serves)业务逻辑(business logic)。
3.关系数据库系统

4.消息中间件

备注:一定要清楚web服务器与应用程序服务的区别

 

由图我们来分析一下,集群环境下开发需要注意哪些地方?

1.Session,我们经常用session来封装用户的登录信息,那么如果集群环境下一台机器session中有,一台没用回发生什么样的情况呢?幸好各个应用服务器都有在集群环境下session复制的配置。如果配置请查阅对应的文档。另外web开发经常用到Webworkstrut2flex等技术,他们都对sesson的封装。他们是否也能复制呢?还要测试才行,当然理论上是可以的,呵呵!还有有的时候session保存到什么位置?也是个问题a)       内存,b)      文件 c)       数据库。根据实际情况来选择吧。

2.CacheCache我们经常使用(我这里只说对象级缓存),如:将一些经常用到的数据缓存到内存中。这种情况下和session有些类似。有的人实例化了一个包含HashMap的一个单例的对象,用来缓存数据,单机环境没什么问题,可是如果是集群环境呢?会怎样?所有我们引用分布式缓存或者集中式缓存,分布式缓存有很多种如ehcachejbosscacheoscache等,集中式缓存比较典型的就是memcached。选择分布式还是集中式根据项目的需要来定了。这里就不说了。

3. 线程、定时器,如:单机环境下我们写一个单线程,如用来像其他系统上传数据(这个数据部允许多次上传),如果程序发布在集群环境下回发生什么情况?呵呵。变成多线程了。多个计算机内的单线程同时上传数据。所以这个时候考虑的地方就很多了!!是选择故障转移还是负载均衡都是考虑的范围。定时器也雷同。可以参考spring quartz 集群解决方案。

4.JDBCJDBC注意的是数据库集群的情况,如weblogic集群架构图所示,编写程序时,获得JDBC链接可以这样写,

Connection con = null;

                         try {

                                        Class.forName("oracle.jdbc.driver.OracleDriver"); //JVM加载驱动类

                                        String url = "jdbc:oracle:thin:@(description =(address =

                                         (protocol = tcp)(host = 192.168.1.246)(port = 1521))(address

                                         =(protocol = tcp)(host = 192.168.1.248)(port =

                                         1521))(load_balance= yes)(connect_data =(service_name = twjk)))";

                                        String url = "jdbc:oracle:thin:@(description=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.1.158)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.1.159)(PORT = 1521))(load_balance=yes)(failover=yes))(connect_data=(service_name= racdb)))";

                                                      

                                        con = DriverManager.getConnection(url, "twjkdev", "twjk");

                                       

                         } catch (Exception e) {

                                        // TODO 自动生成 catch 块

                                        e.printStackTrace();

                         }

                         return con;

 

在服务器中配置数据源是不同的服务器配置也不一样。

     如在websphere中,配置数据源的URL选项可以加入如下代码

jdbc:oracle:thin:@(description=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.1.158)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.1.159)(PORT = 1521))(load_balance=yes)(failover=yes))(connect_data=(service_name= racdb)))

    程序自己选择使用的JDBC链接   

weblogic中是使用多数据源的方式来实现的,服务器有负载均衡和故障转移两项选择。

 

 

5. JMS

如:weblogic集群环境下有分布式主题,分布式队列,分布式队列与普通队列的区别?分布式队列与分布式主题的区别?点对点应用时,在集群环境下使用分布式主题还是分布式队列?

 

总结:关于集群应用,每个项目都有各自的特点,我的经验有限,也来个抛砖引玉吧!!如果有不正确的地方还请指教!!!!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值