- 浏览: 197227 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
Kesin97:
不错 很有用。选择性锁也不太影响性能。
sqlserver的updlock锁 (转) -
fox-idea:
学习
用PC作数据库服务器的容灾问题 -
xwei78:
话说这个下载地址不太好找啊,我去oracle网站转了好一会才找 ...
oracle10g官方客户端配置
构造Cluster是架构师们实现Scalability与High Availability 的最直接用药。所以大家很多都会无意中使用Cluster的思想去设计自己的服务器。其实Java EE里的Clustering已经做得很熟很烂,大家如果烂熟各家vendor对Web,EJB,JNDI,JMS,WebService....的Cluster实现,再思考自己的烂摊子时,思路便快捷清晰,少很多与同僚们的无谓争论。
JavaEE Cluster的经典范文是Sun的王昱写于2005年的Uncover the hood of J2EE Clustering Preface,更可贵的是dev2dev上的JadeYuan兄弟将它高质的翻成了中文。
一、所谓集群
目的就是以负载均衡(Load Balance)与失败转移(Failover) 实现可扩展性(Scalability)和高可靠性(High Availability),主要实现的功能:
Load Balance 算法主要有轮循、权重(根据服务器硬件配置的不同)和随机三种,但更酷的做法是基于负载(直接查探或者服务器主动报告它们的负载)。
Health Check心跳系统与发现协议。Server一般会主动定期多播报告自己状态,也会Ping对方来问候平安。比如Weblogic每10秒会向全世界发送一次心跳,如果有30秒没有收到某个服务器的心跳了(考虑到多播可能会丢失数据包)就可视对方为阵亡。
Session Replication 因为服务器会记录与特定用户的会话信息,Balancer应该把同一用户的请求定位到同一台服务器上。如果该服务器失效,就把该用户和会话信息转移到新服务器上。
除了Scalability 与High Availability,一个集群还应该对已有代码影响最小,对性能影响最小,配置与部署简单,以及运行时可监控。
二、Web层群集
Balancer无非Apache/IIS插件,balance Servlet,硬件四层交换机三类,而讨论的重点在Session 信息的Replication 实现上,简单的分有全部服务器冗余备份,三三两两互为冗余备份,中央备份服务器三种模式。
1.多服务器全冗余备份
Tomcat的最为粗糙,最没有扩展性的做法,不提。Sun的怪怪的replacate的内存数据库法HADB可能也属于这种范畴。
2.三三两两互为冗余备份
Weblogic, Jboss and WebSphere 的做法,好主流。A会有B的数据,B会有C的数据,C会有B的数据,如果A出错,就会由C接替A的工作。这种做法的弊端是:
1.要控制failover到备份服务器,Balancer的实现复杂度高。
2.如果A出错,C就要瞬时承载A、C的操作,很可能将它压垮,针对这点,Weblogic的做法是针对每个session而不是每个Server选择备份服务器,把主备服务器A、B的名字写在用户Cookie里,如果A失效后,Balancer会根据cookie将用户转到服务器B。
3.相对没有cluster的方案,需要花额外的时间和内存。
文中没讲的Geronimo使用的WADI,应该也属于这种类型,不过更为灵活,详见Geronimo 叛逆者: 加入集群功能第1部分 和 第2部分。
3. 中央备份服务器
N+1模式,一个中央Server存放所有的Session,如果一台Server死了,接管的Server就从中央服务器restore相关数据。可以用数据库(很多应用服务器都支持的最简单,但最慢的模式),也可以采用内存。这种方式好处是cluster服务器上不需要冗余内存,可以failover到任意服务器,cluster服务器全死了中央服务器都不死。坏处就是如果中央服务器死了...如果中央服务器的内存不够了.....另外,多了个restore的步骤。
使用内存备份session时,Tomcat/JBoss使用的JavaGroups 是一个很好的工具,它的" Group membership protocols" and "message multicast"特性都非常有用。
另外,无论使用内存还是数据库,都需要串行化Java对象,性能损耗厉害,所以JRun 就采用了Jini架构 ,而Tangosol Coherenc ,Terracotta这些Data Grid方案都提出了自己的session备份做法,整天显示着比传统方案快多少多少。Data Grid分布式缓存本身就是很Enterprise的功能,下篇blog再详述。
三、EJB集群
从stub 调用实际EJB对象时,有三种方法实现负载均衡和fail over:
- Smart Stub.在stub内维护有效列表,实现负载均衡逻辑,进行实效检测,BEA Weblogic and JBoss 采用。
- IIOP Runtime Library ,Sun的JES 算法,把算法从客户端的stub移到客户端的IIOP Runtime
- Interceptor Proxy,IBM做法,把算法移到了服务端,Location Service Daemon (LSD)。
在JNDI查找EJBHome,EJBHome Stub查找生成EJB实例,调用EJB方法三种时候都可以实现负载均衡,对statefull,stateless,entity bean,又有不同的做法。
EJB需要具有幂等性(在部署描述符中声明)才能failover。
四、其他集群
JMS集群,可以有多个broker组成集群(JBoss,如果要持久化Message,就要把原来嵌入式的数据库改为共享模式),activeMQ还支持多个消费者组成集群,但每个消费者负责同一类的任务,比如订单队列的处理,Server A只处理图书类的订单,或只处理《Programming Ruby 2nd》的订单。
数据库集群有Oracle的RAC,但JDBC本身的failover能力很低,一旦connection 中断,resultset等对象都会失效,Weblogic的连接池会尝试重连。
五、走的更远
Weblogic9/10的广域网群集和服务器迁移(有些服务在群集中只能有一个实例在运行,如果该实例失效,迁移到下一个实例)功能。
如果只要单纯的load balance,不要fail over的话,使用纯硬件如F5已经足够,不需要在软件上做任何事情。
群集有两种模式,一种是只在入口的Web层进行负载均衡,一种是Web层和对象层(EJB)分别进行负载均衡。
六、Cluster的神话
1.Failover可彻底避免错误
JBoss的文档用了整整一章来警告你,真的需要http session复制吗?没有http session可以使效率提高很多,而有了的话,并不能避免所有错误。失败转移只能在两次调用间产生作用,在调用时产生的错误是无法恢复的,除非这是个幂等操作(如单纯的get(),而不是put(),无论如何重复操作结果都是一样的),否则,如果A上承载100用户,失败时有20个用户正在进行处理,则只有80个用户能逃出生天平安转移到B。
2.小心编写可集群的程序
1.http session要放能serilaze的对象,对象不要太大,变更时要显式的setAttribute().
2. 注意Cache的使用。如果每个JVM独立使用Cache,会否不一致,如果进行同步,注意开销。
3.不能使用静态变量,如在线用户数,要搞成分布式的 Cache。
4.外部资源如文件系统(一台机器上没有另外一台机器的文件),存成DB或者使用SAN
5.特别服务:如timer服务,基于事件的服务
发表评论
-
Glassfish性能调优 转
2013-02-02 00:30 760GlassFish是目前主流的Java EE应用服务器之一, ... -
ant设置代理
2012-08-24 12:36 816在built.xml文件里添加如下配置 <tar ... -
java(Web)中相对路径,绝对路径问题总结 转
2012-08-03 16:10 1021前言: 前一段时间, ... -
JMS开发
2012-07-05 08:24 723在编写JMS客户端程序之 ... -
Nginx+Tomcat+Memcached集群Session共享 转
2012-03-05 18:45 1358环境: windows 7 + nginx-1.1. ... -
jsp中的session机制
2012-01-12 16:32 832摘要:虽然session机制在 ... -
类实例化
2011-07-08 08:40 621学习JAVA这门面向对象的语言,实质就是不断地创建类,并把类实 ... -
http客户端 转
2011-05-10 10:50 692import java.net.*; impo ... -
android sqlite使用--转ibm
2011-02-28 14:50 854SQLite 介绍 SQLite 一个非常流行的嵌入式数据库 ... -
java计算阶乘
2010-12-31 18:12 1499第一个用java计算阶乘的方法:这是利用简单的循环相乘制造的阶 ... -
使用Java NIO编写高性能的服务器 转
2010-10-20 10:48 620从JDK 1.4开始,Java的标准库中就包含了NIO,即所谓 ... -
java nio 转
2010-10-20 10:47 564首先了解下所谓的java ni ... -
java io 流 转
2010-10-20 09:09 774一、流的概念 流(stream)的概念源于 ... -
java.util.concurrent 多线程框架实例 转
2010-10-19 21:32 559JDK5中的一个亮点就是将Doug Lea的并发库引入到Jav ... -
我的项目的结构和配置文件
2006-06-27 17:33 688学习java有段时间了,最近自己根据网上的资料 ... -
ibatis 使用动态表
2006-06-29 23:50 882自从ibatis 2.0.9以后,ibatis支持动态表 ... -
JAVA-学习-网络资源
2006-07-05 00:00 717SUN中国技术社区 ... -
Swing的Jtable类(转载)
2006-07-05 13:25 8481 t ... -
Java的文件与磁盘操作(转载)
2006-07-06 00:05 8881 如何获得某一个目录下的文件列表? 1 ... -
使用FileUpload组件实现文件上传(转载)
2006-07-06 00:15 688文件上传在web应用中非常普遍,要在 ...
相关推荐
博文链接:https://andyao.iteye.com/blog/125711
掌握K-means聚类的思路和使用条件 了解层次聚类的思路和方法 理解密度聚类并能够应用于实践 DBSCAN 密度最大值聚类 掌握谱聚类的算法,初步理解谱聚类的内涵
。。。
。。。
。。。
。。。
。。。
。。。
本项目旨在开发一种新型的深度学习模型,利用多模自编码器(Multi-modal Autoencoders)技术,实现高效的多视角数据聚类。该模型将通过整合来自不同源的多种数据类型(如文本、图像、声音等),以更全面地捕捉数据的...
学习大数据相关组件使用,学习Spark基本组件的使用,包括Spark Streaming流数据计算,Spark GraphX图数据计算,Spark MLlib机器学习(ALS推荐,朴素贝叶斯情感分析,KMeans聚类分析) 1、资源内容:云计算大作业包括流...
【完整课表】 1-1.机器学习简介-上课版part1(共31页...10 聚类分析(共74页).ppt 12 特征选择(共36页).ppt 13 Sparse-SDM10(共133页).pdf 14 机器学习总结(共25页).ppt 15 Overview of ensemble(共31页).ppt
汇报PPT,主要介绍了几篇深度学习领域->对比学习方面的论文,对于MOCO,simCLR两种典型的...而后从样例对比学习转到聚类对比学习,再转而介绍了有监督对比学习,总共设计6篇论文。适合于组会汇报,有需要建议先私聊。
。。。
。。。
。。。
用户使用交互式界面菜单中选择一种学习方基于Weka的数据分类分析实验报告范文全文共6页,当前为第2页。基于Weka的数据分类分析实验报告范文全文共6页,当前为第2页。法,大部分学习方案都带有可调节的参数,用户可...
数据挖掘大作业-数据探索性分析与预处理,关联规则挖掘,分类与聚类+源代码+文档说明 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审...
68294+机器学习原理及应用+课件、习题、教学大纲、理论代码、案例代码 《机器学习》课程教学大纲.docx 理论部分代码.zip PPT 第1章 机器学习概述.pptx ...第10章 聚类.pptx 第11章 神经网络与深度学习.pptx