仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1181|回复: 18
打印 上一主题 下一主题

[学习教程] JAVA网页设计揭开J2EE集群的奥秘面纱(二):WEB层集群完成仓酷云

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:35:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。前文汇总和PDF下载:揭开J2EE集群的奥秘面纱
4WEB层集群完成
WEB层集群是J2EE集群的主要且基础的功效。WEB集群手艺包含WEB负载平衡和HTTPSession生效转移。
4.1WEB负载平衡
J2EE供应商完成WEB负载平衡有很多体例。基础上,都一个负载平衡器被拔出到扫瞄器和WEB服务器之间,以下图所示。



<br>
WEB负载平衡

负载平衡器能够是一台硬件,如F5负载平衡器,或仅仅是另外一台有负载平衡Plug-Ins的WEB服务器,一个复杂的带ipchains的Linuxbox能够很好的完成负载平衡。不论接纳哪一种手艺,负载平衡器都有以下特征:
4.1.1完成负载平衡算法
当客户哀求到来时,负载平衡器必要决意将怎样分发到背景服务器。盛行的算法是Round-Robin、Random和WeightBased。负载平衡器全力使每台服务器实例都取得不异的负载,可是上述算法没有一个能够取得幻想的负载不异,由于它们仅仅是根据发送到特定服务器的哀求的个数。一些严密的负载平衡器完成了特别的算法。它在分发哀求之前将检测服务器的事情负载。


  • 安康检测
当一台服务器生效了,负载平衡器应该检测出生效其实不再将哀求分发到这台服务器上。一样,它也要检测服务器是不是恢复一般,并恢复分发哀求。


  • 会话胶粘
几近一切的WEB使用程序都有一些会话形态,多是复杂的记着用户是不是上岸,或是包括你的购物车信息。由于HTTP自己是无形态的,会话形态应该存在服务器的某个中央并与你以后扫瞄会话相干联,如许当你下次再哀求不异WEB使用程序的页面时能够很简单的从头猎取。当负载平衡时,最好的选择就是将特定的扫瞄器会话分发到前次不异的服务器实例中,不然,使用程序大概不克不及准确事情。
由于会话形态存储在特定WEB服务器的内存中,“会话胶粘”关于负荷平衡十分主要。可是,假如个中某台服务器实例由于某种缘故原由生效了(好比关机),那末这台服务器的会话形态将要丧失。负载平衡器应该检测到这个生效其实不再将哀求分发给它,但这些哀求的会话形态都由于寄存在生效的服务器中而丧失了一切信息,这就将招致毛病。会话的生效转移因而而生。
4.2HTTPSession生效转移
几近一切盛行的J2EE供给商都在他们的集群产物中完成了HttpSession生效转移,用来保证当某台服务器生效后会话形态不会丧失,使客户端哀求能被准确处置。如所示,当扫瞄器会见有形态的WEB使用程序(第1,2步),这个使用程序大概在内存创立了会话对象用于保留信息以供前面的哀求利用,同时,发送给扫瞄器一个独一的HTTPSessionID用于标识这个会话对象(第3步),扫瞄器将这个ID保留Cookie中,并当它下次再哀求统一WEB使用程序的页面时,会将Cookie发回给服务器。为了撑持会话生效转移,WEB服务器将在必定的时分把会话对象备份到其他中央以避免服务器生效后丧失会话信息(第4步)。负载平衡器检测到这个失利(第5,6步),并将后续的哀求分发到装有不异使用程序的服务器实例中(第7步),因为会话对象已备份到其他中央了,这个新的服务器实例能够恢复会话(第8步)准确地处置哀求。



<br>
HTTPSession生效转移

为了完成上述功效,HTTPSession生效转移将带来以下成绩:


  • 全局HTTPSessionID
如上所述,HTTPSessionID用于在特定的服务器实例中标识独一的内存会话对象,在J2EE平台,HTTPSessionID依附于JVM实例,每一个JVM实例具有几个使用程序,每一个使用程序都为分歧的用户管着很多会话,HTTPSessionID是在以后JVM实例用于会见相干会话的关头。在会话生效转移的完成中,请求分歧的JVM实例不克不及发生两个不异的HTTPSessionID,这是由于当生效转移产生时,一个JVM的会话将要备份并恢复到另外一其中,如许,必需创建全局HTTPSessionID发生机制。


  • 怎样备份会话形态
怎样备份会话形态是区分J2EE服务器优劣的关头要素。分歧的供给商有分歧的完成,在后续部分我再具体注释。


  • 备份的频次和粒度
会话的备份是损耗功能的,包含CPU,内存,收集带宽和写进磁盘和数据库的I/O,备份的频次和备份对象的粒度将严峻影响功能。
4.2.1数据库备份体例
几近一切的J2EE集群产物都同意选择将你的会话对象经由过程JDBC备份到干系数据库中。如所示,这类体例可让服务器实例十分复杂的在准确的工夫序列化会话内容并写到数据库中。当产生会话转移时,另外一台可用的服务器接过已生效的服务器事情,从数据库中恢复一切的会话形态。序列化对象是关头点,它使得内存会话数据能够耐久化和传输。要懂得更多有关Java对象序列化常识,请参考http://java.sun.com/j2se/1.5.0/docs/guide/serialization/index.html。



<br>
备份会话数据到数据库

因为数据库买卖长短常高贵的,这类办法次要弱点是当在会话中保留大批的或年夜的对象时限定了伸缩性,年夜多半利用数据库会话耐久化的服务器产物都倡始只管削减用HTTP会话存储对象,但这限定了你的使用程序的架构和计划,出格是你要利用HTTP会话缓存用户数据时。
数据库的体例也有一些长处:


  • 复杂,简单完成。分别的哀求处置和会话备份处置使集群更好办理和强健。
  • 会话能够生效转移就任何一台服务器,由于数据库是共享的。
  • 当全部集群生效时,会话数据仍旧幸免。
4.2.2内存复制体例
由于功能的缘故原由,一些J2EE服务器(Tomcat,Jboss,WebLogic,WebSphere)供应了另外一种完成:内存复制



<br>
对会话形态举行内存复制

基于内存的会话耐久化将会话信息保留在一台或是多台备份服务器中,而不是保留数据库中。这类体例由于功能高而十分盛行。同数据库体例比拟,间接在原服务器和备份服务器之间收集通讯长短常轻量的。同时注重在利用体例中,数据库体例中的“恢复”阶段是不必要的,由于在备份后,一切会话数据都已存在备份服务器的内存中了,已能够处置哀求。
“JavaGroups”是以后Tomcat和Jboss集群所利用的通讯层。JavaGroups是用于完成牢靠组通讯和办理的工具包。它供应了诸如“构成员协定”和“动静播送”等中心特征,这些都对集群的事情十分有效。有关JavaGroups的信息,请参考:http://www.jgroups.org/javagroupsnew/docs/index.html。
4.2.3Tomcat体例:多服务器复制
内存复制也存在很多分歧的体例,第一种办法就是将会话数据复制到集群中的一切结点,Tomcat5接纳的就是这类体例。



<br>
多服务器复制

如所示,当一个服务器实例的会话改动后,将备份到其他一切的服务器上。当一台服务器生效后,负载平衡器能够选择其他任何一台可用的服务器实例。但这类体例限定了伸缩性,假如集群中有良多的服务器实例,那末收集通讯的价值就不克不及被疏忽,这将严峻下降功能,而且收集也将成为体系的瓶颈。
4.2.4WebLogic,Jboss和Websphere的体例:对等服务器复制
因为功能和伸缩性的缘故原由,WebLogic,Jboss和Webshpere接纳了其他体例完成内存复制。每台服务器恣意选择一台服务器备份其内存中的会话信息。如0所示。
在这类体例中,每台服务器都有一台本人的对等服务器,而不是其他一切的服务器,这类体例打消在集群中到场过量服务器实例的话影响伸缩性的成绩。



<br>
0对等服务器复制

只管这类体例完成生效转移有很高的功能和伸缩性,但它仍有一些限定:


  • 它给负载平衡器带来了更多的庞大性。当一台服务生效后,负载平衡器必需晓得那台服务是这台己生效服务器的对等备份服务器。这将减少了负载平衡器的选择局限,同时有些硬件也不克不及满意这类请求。
  • 除处置一般的哀求外,服务器还将卖力复制的义务。因为备份会话数据的义务也必要占用CPU的周期,以是每台服务器的哀求处置才能也下降了。
  • 在没有产生生效转移的时分,备份服务器上大批用于备份的内存是个华侈。同时这也将增添了JVMGC的包袱。
  • 集群中的服务器实例组成了复制对。如许,当会话地点主服务器生效后,负载平衡器将会话转移到备份服务器,使备份服务器处置两倍的哀求,这将形成备份服务器的功能成绩。
为了克制下面的4点成绩,分歧的软件供给商接纳了分歧的办法,WebLogic接纳的复制对不是对每台服务器,而是对每一个会话。当一台服务器实例生效后,会话数据己经分离备份到多个备份服务器上,使生效的负载匀称地散布。
4.2.5IBM的体例:中心形态服务器
Websphere接纳分歧的体例完成内存复制:备份会话信息到中心的形态服务器,如1所示:



<br>
1中心形态服务器复制

这与数据库的办理计划十分相似,分歧的地方在于公用的“会话备份服务器”取代了数据库服务器,这类体例分离了数据库和内存复制两种体例的长处。


  • 将哀求处置和会话备份处置分隔利用集群加倍强健。
  • 一切的会话数据都备份到公用的服务器上,无需服务器华侈内存用于备份其他服务器的会话。
  • 由于会话备份服务器是在服务器之间共享的,一切生效后能够转移就任何一台服务器上,如许年夜多半据软硬件负载平衡器都可使用,更主要的是当一台服务器生效后,负载将匀称的散布到一切实例上。
  • 与分量级的数据库毗连比拟,使用服务器与备份服务器之间Socket通讯是轻量的。如许就比数据库的办理计划有更好的功能和更好的伸缩性。
但是,因为有恢复生效服务器会话数据的这么一个阶段,因而其功能一定不如两台服务器间接复制办理计划,别的,多出来一台备份服务器也增添了办理的庞大性。也大概因为单台备份服务器形成功能瓶颈。
4.2.6Sun的体例:特别数据库



<br>
2特别数据库复制

SunJES使用服务器接纳了其余体例完成会话生效转移,如2所示,它看上往很像数据库的体例,由于它接纳干系数据库存储会话并经由过程JDBC会见一切会话数据。可是JES外部所利用的干系数据库称为HADB,已为会见会话做了出格优化,而且将几近一切的会话数据存在内存中。如许,你能够说它更像中心形态服务器的体例。
4.2.7功能要素
思索以下成绩:一台WEB服务器中大概运转着很多WEB使用,它们中每个都大概被成百的并发用户会见,而每一个用户城市发生扫瞄器会话用于会见特定的使用。一切会话信息都将备份以燕服务器生效后能转移到其他服务器实例中。更糟的是,会话会因为一次次的产生以下情形而变更,包含创立、生效、增添属性、删除属性、修正属性值。乃至是甚么都没变,但因为有新的会见而使最初会见工夫变了(由此判别甚么时分生效会话)。因而,功能在会话生效转移的办理计划中是个很年夜的要素。供给商一般会供应一些可调的参数改动服务器举动,使之顺应功能需求。
4.2.7.1备份机会
当客户真个哀求被处置后,会话随时改动。因为功能要素,及时备份会话是不明智的。选择备份频次必要均衡。假如备份举措产生得太频仍,功能将急剧下落。假如两次备份的距离太长,那末在这距离之间服务器生效后,良多会话信息将会丧失。不论一切的体例,包含数据库和内存复制,上面是决意备份频次的经常使用的选项。


  • 按WEB哀求
在WEB哀求处置停止后,产生呼应之前保留数据。这类体例可以包管在生效后备份的会话数据是最新的。


  • 按流动的工夫距离
会话在背景按流动的工夫距离保留。这类体例不克不及包管备份的会话数据是最新的。但因为不需在每次哀求以后备份数据,因此有更好的功能。
4.2.7.2备份粒度
当备份会话的时分,你还必要决意几会话形态必要保留。以下是分歧产物一切接纳的经常使用的战略。


  • 全部会话
每次都将保留一切会话。这类体例为准确保留散布式WEB使用的会话供应了最好包管。这类体例复杂,内存复制和数据库存储体例都默许接纳这类体例。


  • 修正过的会话
当会话被修正事后,则备份全部会话。当“session.setAttribute()”或“session.removeAttribute()”被挪用后,则以为会话被修正过。必需包管这些办法挪用才修正会话属性,这并非J2EE标准后请求的。但倒是准确完成这类办法所必要的。备份修正过的会话削减了会话存储的数目,那些仅仅是读取会话属性的哀求将不会触发会话备份的举措。这将带来比备份全部会话更好的功能。


  • 修正过的属性
仅仅是保留被修正过的会话属性而不是全部会话。这将最小化备份的会话数据。这类体例带来最好的功能及最小的收集通讯。为了包管这类体例事情的准确性,必需根据以下的要点。起首,只能经由过程挪用“setAttribute()”办法修正会话形态,而且会话数据要被序列化和备份。其次,确保属性之间没有交织援用。每一个独一的属性键值下的对象图应该被自力地序列化和保留。假如两个自力的键值下的对象存在交织援用,它们将不克不及够准确的序列化和反序列化。比方3所示,在一个内存复制的集群中,会话中存有“student”和“school”对象,同时“school”对象含有到“student”对象的援用,某一个时分“school”被修正后备份到备份服务器中。在序列化和反序列化以后,在备份服务器的被复原的“school”对象的版本将包括全部对象图,包含其援用的“student”对象。可是“student”对象能够被自力的修正,当它被修正后,仅仅只要它本人被备份。在序列化和反序列化以后,在备份服务器中复原“student”对象,但在此时,它将丧失与“school”对象的毗连。只管这类体例有最好的功能,但上述限定将影响WEB使用程序的架构和计划。出格是必要用会话保留缓存的庞大的用户数据。



<br>
3会话复制中的交织援用

4.2.8其他生效转移的完成
如后面章节所提到的,当会话备份时粒度关于功能十分主要。但是,以后的一些完成,不论是数据库存储仍是内存复制,都将利用Java对象序列化手艺来传输Java对象。这就打了个年夜印子,影响体系的功能,并给WEB使用程序的架构和计划带来良多的限定。一些J2EE供给商便寻觅一些出格的手腕来更加轻量地,小印子地完成WEB集群,供应细粒度的散布式对象共享机制用于进步集群的功能。
4.2.8.1Jrun的Jini手艺
Jrun4将它的集群办理计划构在Jini手艺之上。Jini为散布式盘算而生,它同意在一个单一的散布式盘算空间内创立“团结”的设备或组件。Jini供应查找,注册,租用平分布式体系服务,这对集群情况十分有效。另外一种称为JavaSpace的手艺构建于Jini之上,它供应了一些用于完成集群十分有代价的特征,如对象处置,共享,迁徙等。要懂得有关Jini和JavaSpace更多的信息,请参考http://java.sun.com/products/jini/2_0index.html
4.2.8.2Tangosol的散布式缓存
TangosolCoherence供应了一个散布式数据办理平台,它能够嵌进到年夜多半盛行的J2EE服务器顶用于完成集群情况。TangosolCoherence同时也是供应了散布式缓存体系用于在分歧的JVM之间无效地共享Java对象。要懂得有关Tangosol更多的信息,请参考http://www.tangosol.com
来自:http://blog.csdn.net/esoftwind/archive/2006/10/19/1341120.aspx译者:ESoftWind

java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.
飘灵儿 该用户已被删除
沙发
发表于 2015-1-21 10:39:31 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-1-21 11:19:03 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
地板
发表于 2015-1-28 05:40:07 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
小妖女 该用户已被删除
5#
发表于 2015-2-5 11:32:49 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
老尸 该用户已被删除
6#
发表于 2015-2-11 13:19:59 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
蒙在股里 该用户已被删除
7#
发表于 2015-3-1 19:44:32 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-10 12:46:23 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
谁可相欹 该用户已被删除
9#
发表于 2015-3-12 15:09:40 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
金色的骷髅 该用户已被删除
10#
发表于 2015-3-17 20:54:41 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
若天明 该用户已被删除
11#
发表于 2015-3-18 14:26:50 | 只看该作者
是一种使用者不需花费很多时间学习的语言
再现理想 该用户已被删除
12#
发表于 2015-3-20 14:20:33 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
兰色精灵 该用户已被删除
13#
发表于 2015-3-21 15:25:42 | 只看该作者
是一种突破用户端机器环境和CPU
冷月葬花魂 该用户已被删除
14#
发表于 2015-3-22 05:09:02 | 只看该作者
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
精灵巫婆 该用户已被删除
15#
发表于 2015-4-3 03:08:10 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
再见西城 该用户已被删除
16#
发表于 2015-4-8 17:45:08 | 只看该作者
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
灵魂腐蚀 该用户已被删除
17#
发表于 2015-4-13 20:16:34 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
莫相离 该用户已被删除
18#
发表于 2015-4-16 04:10:08 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
柔情似水 该用户已被删除
19#
发表于 2015-4-23 04:45:38 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 07:42

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表