J2EE架构下,软件的部署环境为集群的情况很多,所以针对集群环境的软件开发非常重要,所以我们在编码过程中要超前思考,以免加大后期的工作量。
了解集群
什么是集群:
web应用服务器集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样。为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理。从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性。
集群技术的特点
高可靠性和高可用性:通过集群技术组成的系统,可以确保数据和应用程序对最终用户的高可用性和高可靠性,也就是说当主节点上的系统崩溃时,冗余节点就从替补角色转换到正式角色,并自动投入应用,从而保证了系统运行的不间断。或者检测某一个空闲服务器,将请求分发给它,对请求进行处理,而且这一过程对用户来说,是透明的,用户察觉不到!
稳定性和可伸缩性:在系统的处理能力需要增加的时候,除了通过增加集群中每个计算机节点的单机处理能力(如通过增加CPU数量、增加内存大小等手段)外,还可以通过增加集群节点数,即通过向群集添加新的计算机节点,使服务随着处理器的添加而伸缩,从而增大应用程序吞吐量,以达到增加系统的整体处理能力的目的,完成系统的扩容。
Web应用服务器集群结构图,下面例举了weblogic和websphere集群结构图
websphere集群架构图
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开发经常用到Webwork,strut2,flex等技术,他们都对sesson的封装。他们是否也能复制呢?还要测试才行,当然理论上是可以的,呵呵!还有有的时候session要保存到什么位置?也是个问题a) 内存,b) 文件 c) 数据库。根据实际情况来选择吧。
2.Cache,Cache我们经常使用(我这里只说对象级缓存),如:将一些经常用到的数据缓存到内存中。这种情况下和session有些类似。有的人实例化了一个包含HashMap的一个单例的对象,用来缓存数据,单机环境没什么问题,可是如果是集群环境呢?会怎样?所有我们引用分布式缓存或者集中式缓存,分布式缓存有很多种如ehcache,jbosscache,oscache等,集中式缓存比较典型的就是memcached。选择分布式还是集中式根据项目的需要来定了。这里就不说了。
3. 线程、定时器,如:单机环境下我们写一个单线程,如用来像其他系统上传数据(这个数据部允许多次上传),如果程序发布在集群环境下回发生什么情况?呵呵。变成多线程了。多个计算机内的单线程同时上传数据。所以这个时候考虑的地方就很多了!!是选择故障转移还是负载均衡都是考虑的范围。定时器也雷同。可以参考spring quartz 集群解决方案。
4.JDBC,JDBC注意的是数据库集群的情况,如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集群环境下有分布式主题,分布式队列,分布式队列与普通队列的区别?分布式队列与分布式主题的区别?点对点应用时,在集群环境下使用分布式主题还是分布式队列?
总结:关于集群应用,每个项目都有各自的特点,我的经验有限,也来个抛砖引玉吧!!如果有不正确的地方还请指教!!!!
- 大小: 25.3 KB
- 大小: 51.2 KB
- 大小: 51.9 KB
分享到:
相关推荐
在Java应用服务器集群环境下进行代码编写时,需要注意多个关键点以确保软件的高效、稳定和可扩展性。首先,理解集群的基本概念至关重要。集群是指一组同时运行相同Web应用的服务器,对外表现为单一服务,旨在提高...
当我们谈论“Java客户端测试Redis集群”,这涉及到几个关键的知识点: 1. **Redis集群基础**:Redis集群提供了数据分布和容错能力,通过将数据分散到多个节点来实现水平扩展。每个节点负责一部分键的空间,并且通过...
2. **应用部署**:编写Java代码,打包成WAR或EAR文件,部署到应用服务器。 3. **API使用**:利用JSP、Servlet、EJB、JSF等API实现应用功能。 4. **测试与调试**:进行单元测试、集成测试,确保应用在服务器上的正常...
"Red5边源服务器集群部署"是一个关键的技术话题,它涉及到如何利用Red5开源流媒体服务器来构建分布式系统,提高服务的稳定性和性能。Red5是一款基于Java开发的流媒体服务器,能够支持RTMP、HLS、RTSP等多种协议,常...
Java-web环境是开发和部署基于Java技术的Web应用程序的基础架构,它主要由多个组件组成,以支持服务器端的编程和应用服务。这个压缩包“Java-web环境所需软件”显然是为了提供一套完整的Java Web开发和运行环境。...
总的来说,这个Java编写的系统提供了一种有效的方式,通过编程接口或图形界面,对Linux服务器集群进行集中管理和监控,节省了IT运维人员的时间和精力。要使用这个系统,你需要了解Java编程、Linux基础知识以及如何在...
在WebSocket+Java服务器中使用Mina框架,首先需要理解以下几个关键概念: 1. **IoSession**:Mina的核心组件,代表一个连接,存储了关于连接的各种信息,如读写缓冲区、事件处理器等。 2. **Filter Chain**:Mina...
并发处理是游戏服务器的另一个关键点。Java的线程模型和并发工具类库(如ExecutorService、Semaphore、CountDownLatch等)提供了强大支持。为了处理成千上万的并发玩家,服务器需要有效地管理资源,避免线程饥饿和...
Tcp服务端与客户端的JAVA实例源代码 2个目标文件 摘要:Java源码,文件操作,TCP,服务器 Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多...
### Java面试中的分布式集群关键技术:MongoDB与Redis #### 心跳机制详解 在分布式系统中,为了确保各个节点间的连接稳定性和及时发现并处理断线情况,通常会使用心跳机制来保持通信链路的活跃状态。心跳机制的...
这些是商业级的Java应用服务器,它们提供了更多的企业级特性,如负载均衡、集群、事务管理等。 除了JDK和服务器软件,文档中还提及了与Java相关的其他资源,例如O'Reilly出版社提供的Java学习书籍,如《Thinking in...
Java编写的游戏服务器是一种基于Java语言实现的后端系统,它主要负责处理游戏客户端...以上内容涵盖了Java游戏服务器开发的关键点,通过研究"Swing_Server-master",开发者可以深入了解如何在实际项目中运用这些知识。
以上只是Java服务器高级编程的一些核心知识点,实际开发中还需要结合具体的应用场景和业务需求,灵活运用这些技术,并不断学习新的框架和最佳实践,以提升系统的稳定性和效率。同时,持续关注Java社区的最新动态,...
【Java 高级培训文档(下)】是一个针对中高级Java程序员设计的学习资源,它包含了丰富的J2EE技术、源代码实例以及相关的开发资料。这个压缩包文件旨在帮助开发者提升在Java领域的专业技能,尤其在企业级应用开发方面...
《Tomcat与Java Web开发技术详解》是一本深入解析Tomcat服务器及Java Web开发的经典著作,作者孙卫琴以其丰富的经验和深入的理解,为读者呈现了Java Web应用在Tomcat上的实现过程。书中涵盖了大量的实践案例和详尽的...
Java EE 5 SDK通常搭配应用服务器一起使用,如GlassFish或JBoss,开发者可以在这些服务器上编写、测试和部署应用程序。应用通常被打包成WAR(Web Archive)或EAR(Enterprise Archive)文件,然后通过应用服务器的...
Apache Tomcat是一款广泛应用的开源Java应用服务器,特别用于运行Servlet和JSP应用程序。这个压缩包“apache-tomcat-7.0.88-windows-x64”是专门为Windows 64位操作系统设计的Tomcat 7.0版本的安装文件。 在Java...
游戏服务器框架是构建在线游戏平台的关键组成部分,它负责处理玩家的连接、游戏逻辑、网络通信以及数据存储等任务。在这个基于 Java 13 的实现中,我们深入探讨如何利用 Java 的特性和工具来构建高效、稳定且可扩展...
此外,了解如何在Linux环境下部署和管理Java应用也是极其重要的。 #### 2. 深入理解JVM Java虚拟机(JVM)是运行Java程序的核心组件,深入了解其工作原理对提高代码质量和系统性能至关重要。具体来说,这包括以下几...
Java后端开发是软件开发领域中的一个重要组成部分,它主要负责处理服务器端的逻辑,与数据库交互,以及提供API供前端应用调用。本压缩包"Java后端学习笔记代码"显然是一个针对Java后端开发的学习资源集合,包含了...