集群基础概念(转)

构造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),主要实现的功能:

1. Load Balance
算法主要有轮循、权重(根据服务器硬件配置的不同)和随机三种,但更酷的做法是基于负载(直接查探或者服务器主动报告它们的负载)。

2: 2. Health Check
心跳系统与发现协议。Server一般会主动定期多播报告自己状态,也会Ping对方来问候平安。比如Weblogic每10秒会发送一次心跳,如果有30秒没有收到对方服务器的心跳了(考虑到多播可能会丢失数据包)就视对方为阵亡。
3. Session Replication
因为会服务器记录与特定用户的会话信息,Balancer应该把同一用户的请求定位到同一台服务器上。如果该服务器失效,把该用户和会话信息转移到新服务器上时。
如果只要单纯的load balance,不要fail over的话,使用纯硬件如F5已经足够,不需要在软件上做任何事情。

除了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将用户转到服务器C,C会根据用户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:

1. Smart Stub.在stub内维护有效列表,实现负载均衡逻辑,进行实效检测,BEA Weblogic and JBoss 采用。
2. IIOP Runtime Library ,Sun的JES 算法,把算法从客户端的stub移到客户端的IIOP Runtime
3. Interceptor Proxy,IBM做法,把算法移到了服务端,Location Service Daemon (LSD)。

在JNDI查找,EJBHome Stub查找生成EJB实例,调用EJB方法三种时候都可以实现负载均衡,对statefull,stateless,entity bean,又有不同的做法。

四、其他集群

JMS 集群,可以有多个broker组成集群(JBoss,如果要持久化Message,就要把原来嵌入式的数据库改为共享模式),activeMQ还支持多个消费者组成集群,但每个消费者负责同一类的任务,比如订单队列的处理,Server A只处理图书类的订单,或只处理《Programming Ruby 2nd》的订单。

数据库集群有Oracle的RAC,但JDBC本身的failover能力很低,一旦connection 中断,resultset等对象都会失效,Weblogic的连接池会尝试重连。

五、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服务,基于事件的服务,

了解Redis集群概念,集群如何选举主节点 像上文的Redis集群的A、B、C三个节点,主从模型可以为这每一个主节点添加一个副本节点。Redis集群重新分片可以将任意数量已指派给某个节点的槽改为指派给另一个节点,而相关槽所属的键值对也会从源节点被移动到目标节点。Redis 集群将数据自动分片到多个 Redis 节点,Redis 集群还在分区期间提供一定程度的可用性,当某些节点发生故障或无法通信时,Redis集群能够继续运行。Redis集群的主从模型选举主节点和Redis哨兵选举出主节点非常相似,但大家不要搞混了,Redis集群中并没有哨兵的概念。 阅读详情

相关推荐

Kafka集群模式核心概念

集群模式下会有很多个Broker,创建Topic主题时可以指定主题的分区有多少个,将消息数据拆分到不同的分区中进行存储,增加读写的吞吐量,然后还可以将分区创建出多个副本节点,不同的副本节点存放在不同的Broker里,副本之间进行数据上的同步,保证消息数据的高可靠性。所谓的副本类似于备份,在创建Topic主题时,需要指定该Topic主题的副本数量,这个副本数量一般是按照集群中Broker的节点数量为依据的,如果集群中有三台节点,那么就存在3个Broker,创建Topic主题时,就指定副本数为3。

江晓龙的博客 1万+

【Cluster】01、集群的基础概念

一、集群简介1、为什么需要集群? 假如我们有一个web站点,服务器因为配置原因只允许100个用户同时在线访问。网站上线初期,通常只有几个用户在线,后期用户数量达到上千人。网站负荷加重,经常会“反应迟钝”影响用户体验,怎么解决?web站点键入网址后3s内必须响应,经统计若3s后响应将流失40%用户,10s后流失70%用户解决方案: Scale up:向上扩展/垂直扩展 ...

weixin_34310127的博客 169

深入解析NRF52832安全DFU Bootloader实现机制与蓝牙OTA升级流程

本文深入解析了NRF52832芯片安全DFU Bootloader的实现机制与蓝牙OTA升级流程。详细阐述了Bootloader的核心概念、双区升级策略、源码初始化流程以及蓝牙DFU服务的数据传输协议,并提供了从环境搭建、密钥生成到编译烧录、生成升级包的完整实战指南,帮助开发者构建安全可靠的无线固件更新系统。

weixin_29188043的博客 490

转贴:集群基础

构造Cluster是架构师们实现Scalability与High Availability 的最直接用药。所以大家很多都会无意中使用Cluster的思想去设计自己的服务器。其实Java EE里的Clustering已经做得很熟很烂,大家如果烂熟各家vendor对Web,EJB,JNDI,JMS,WebService....的 Cluster实现,再思考自己的烂摊子时,思路便快捷清晰,少很多与同僚...

{'name':'hqman','type':'宅男'} 137

Andriod应用开发基础项目——记账本

本项目采用Java语言编写,是一款基于Android Studio开发的简易项目,本项目可以提高Java语言编写软件的能力,同时加深对开发软件Android studio有了更深层次的掌握,很适合初学者。在项目过程中,遇到了一些挑战和问题,但通过不断的努力和学习,最终取得了成功。未来,可以还可以继续优化App的功能和性能,增加更多实用的功能,提升用户体验。

eryasd的博客 3467

学生党投稿Applied Soft Computing:从导师账号登录到通讯作者设置的全流程解惑

本文详细解析了学生投稿Applied Soft Computing期刊的全流程,重点介绍了导师账号登录、通讯作者设置、作者排序调整以及开放获取费用等关键环节的避坑技巧。针对LaTeX稿件处理和财务选项选择提供了实用建议,帮助学生顺利完成SCI期刊投稿。

weixin_30352191的博客 211

elasticsearch基础概念与集群部署

Elasticsearch(ES)是一款基于Lucene的分布式开源搜索引擎,专注于实时全文检索和数据分析。本文介绍了ES的核心概念,包括文档、索引、分片、节点和集群,并详细说明了3节点集群的部署方法。部署步骤包括环境准备、用户配置、证书生成、配置文件修改及服务启动验证。文中还强调了禁用swap、使用SSD存储等性能优化建议。最后提供了运维专家的联系方式以方便技术交流。

专注深耕linux、容器云原生、运维自动化等方向 1172

汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)

A2L文件的生成分为两章讲解:本文主要是讲模型开发,讲解如何把标定量、观测量放到链接文件中的指定位置。下一篇讲解如何使用matlab生成完整的A2L文件

认真搞搞汽车MCU 4617

消息队列与Kafka基础:从概念到集群部署

集群部署Kafka涉及资源清单、基础环境设置、Zookeeper和Kafka的安装与配置,以及测试步骤。

yjq182的博客 2271

Nvidia Driveos SDK/PDK介绍

NVIDIA DRIVEOS SDK/PDK介绍

u011803281的博客 2174

【水文学法总结】河道内生态流量计算方法(含MATLAB实现代码)

简介水文学法实现河道内生态流量计算

WW、forever的博客 5014

什么是集群,集群的概念介绍

集群术语须知 服务硬件:指提供计算服务的硬件,比如 PC 机、PC 服务器。 服务实体:服务实体通常指服务软体和服务硬体。 节点(node):运行 Heartbeat 进程的一个独立主机称为节点,节点是 HA 的核心组成部分,每个节点上运行着操作系统和Heartbeat 软件服务。 资源(resource):资源是一个节点可以控制的实体,当节点发生故障时,这些资源能够被其他节点接管。如: 磁盘分区...

qq_41904213的博客 5万+

CREO图文教程:三维设计案例之矿泉水瓶实例图文教程之详细攻略

草绘,先绘制中心线,绘制底部宽度;对称标注:点击左端点,中心线,左端点,中键即可标注;给定高度;样条曲线绘制外形(双击样条曲线,点击下栏的控制模式(第一个按钮),再拉动控制样条曲线上的各个点)打勾即可得到三维实体。......

走向CTO之路 1931

elasticsearch基础概念和集群概念

前言 ES基础概念和ES的基础命令一样,我们都会参考mysql的概念,但es集群其实和kafka非常相似,我们会参考kafka来进行对比 ES基础概念: Elasticsearch(ES) 是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的

wwwwwww31311的博客 2075

电化学-论文分享-NanoStat: An open source, fully wireless potentiostat

本文主要分享论文NanoStat: An open source, fully wireless potentiostat,并记录学习笔记。如果有条件,建议看原文最好。

分享技术笔记,希望对大家能够有一定的帮助,同时也通过归纳总结提升自己的个人能力。 2873

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Kubernetes 集群概念详解

Kubernetes 集群是由多个计算节点组成的容器编排系统,用于自动化部署、扩展和管理容器化应用。以下是 Kubernetes 集群的核心概念和架构解析: 2. 核心组件分工 组件类型 包含组件 主要职责 控制平面 kube-apiserver, etcd, kube-scheduler, kube-controller-manager 集群决策和调度 工作节点 kubelet, kube-proxy, 容器运行时 运行工作负载 插件 DNS, CNI, Ingress, 监控等

ttyy1112的专栏 1234

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

k8s学习之:基础概念及理解、集群架构的组件、概念、硬件要求、集群搭建详细步骤

k8s详细概念,一片读懂,全面理解,小白都能看懂。

qq_31897241的博客 3447

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

集群与集群概念

本质是为了应对 “多业务、高访问量的 Web 服务场景”:比如一个网站既需要提供 “用户浏览的网页”(80 端口),又需要提供 “供下载的文本文件”(81 端口),同时每天有上万用户访问 —— 通过这套架构,既能让两种业务分开处理(避免混乱),又能让多节点分摊压力(避免崩溃),还能方便后续加功能、加节点(方便扩展),最终实现 “稳定、高效、易维护” 的 Web 服务。反向代理服务可以缓存资源以改善网站性能。在部署位置上,反向代理服务器处于Web服务器前面,缓存Web响应,加速访问。

LLLLYYYRRRRRTT的博客 1266

集群基础概念

大量的网络请求受限于带宽限制和服务器处理能力的限制,大量的磁盘I/O和网络I/O,这些都需要CPU的参与. 若要提高服务器性能:                第一种:Scale On 向上扩展 增加硬件                                          带来的问题:性能并非是线性增长,超多核的CPU争抢资源,CPU仲裁机制本身浪费性能.          

三千烦恼--blog 300

Spark集群基础概念 与 spark架构原理

 一、Spark集群基础概念                将DAG划分为多个stage阶段,遵循以下原则:  1、将尽可能多的窄依赖关系的RDD划为同一个stage阶段。 2、当遇到shuffle操作,就意味着上一个stage阶段结束,下一个stage阶段开始   关于RDD中的分区,在默认情况下(也就是未指明分区数的情况) 1、如果从HDFS中读取数据创建RDD,在默认情...

牛逸凡的博客 1910

mongodb shard 分片集群基础概念

本文简单的介绍了 mongodb 分片集群的基本概念与组成

我要出家当道士 2019

一、Elasticsearch基础概念及ES8集群安装

简记Elasticsearch基础概念及ES8集群构建

工作随记 865

LVS负载均衡集群基础概念

本文主要介绍集群的概述、LVS的概述,详细阐释了负载的类型、LVS集群的工作模式、LVS调度算法等,希望对你有帮助!

十七拾的博客 2264

DM8分布计算集群基础概念

本文主要介绍DM分布计算集群的系统架构、系统原理、系统特性、基本概念、关键技术指标等。达梦分布计算集群英文全称 DM Distributed Processing Cluster,简称 DMDPCDMDPC 是基于达梦数据库管理系统研发的一款同时支持在线分析处理和在线事务处理的新型分布式数据库系统。它既具备传统单机数据库的绝大部分功能,又提供了分布式计算集群才拥有的高可用、高扩展、高性能、高吞吐量和对用户透明等高级特性。

liuzaishi666的博客 1542

集群相关概念

​ 集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以统一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。简单总结为:一组协同工作但对外表现为一个整体的服务器组。高可扩展性:可以通过增加服务器数量达到性能扩展。高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点故障。

张晨光老师的播客 842
上一篇: P3P解决cookie存取的跨域问题
下一篇: Papervision3D 的视频应用
swingchen
博客等级 码龄20年 0粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值