当前位置: 首页 > news >正文

何谓集群

计算机集群(cluster)一些松散指计算机系统。告诉网络连接,协同工作。集群为用户像一台计算机系统,只是具有更高的性能和更高的可靠性。集群中的每个计算机被称为节点。

常见集群类型
高性能计算(HPC, high performance computing)
主要用于科学计算,多用于科研领域,一般的商业领域较少用到该类集群。最開始出现的集群就是为了高性能计算设计的。集群出现之前,科学计算都採用大型主机计算。这类主机一般都採用封闭设计,价格很昂贵。集群的目的就是使用多台普通PC搭建系统,以低廉的价格提供能够匹敌大型机的计算能力。 Beowulf cluster是该类系统的代表。这类系统的核心技术:1)并行算法。2)节点间通信。

并行算法
传统的算法大多是顺序运行(serial execution)。

为了发挥集群的效能,须要让计算任务在多个节点上同一时候运行,这就须要并行算法。并行算法和多进程(线程)不同:并行算法是一个算法。同一时候在多个处理器上运行。每一个处理器上运行的任务是有关联的。终于产生一个结果;多进程(线程)每一个处理器上运行的任务是不想关的,每一个任务都有自己的结果。

Oracle中有个并行处理(parallel processing)功能。

普通SQL处理
普通的SQL处理仅仅能使用一个CPU,可是能够执行多个进程(server process)同一时候处理多个SQL。

每一个SQL处理之间没有关联,都有自己的终于结果。


并行SQL处理
能够使用多个CPU,比方在运行查找时,能够将表中数据分成若干个集合。每一个集合分给一个CPU运行,最后将每一个CPU的结果汇总,形成终于结果。

多个CPU之间是有关系的,终于仅仅有一个结果。

详细请參考oracle关于paralle processing的介绍。


节点间通信
确定了并行算法后,须要将任务分给不同的节点执行,这就涉及到了节点之间怎样通信。

Message Passing Interface (MPI)是一个标准的消息通信接口,广泛用于并行计算领域。http://en.wikipedia.org/wiki/Message_Passing_Interface


大数据分析(big data)
该类型集群应该是随着互联网的兴起而出现。

互联网的出现导致了海量数据的出现。海量数据的出现要求有对应的方法来处理、分析这些数据。Google的MapReduce是处理大数据的事实标准,已被广泛採用。


MapReduce
MapReduce的核心也是并行处理,这点和高性能计算是类似的。但和高性能计算也有显著差别:前者的重点是数据。将数据拆分,然后分给每一个几点。后者则是计算,将计算任务分解后分给每一个节点;前者是IO密集型。后者是计算密集型。由于关注数据。所以MapReduce有个特点:Locality:
Locality的思路就是让每一个节点分到的数据,最好存放在本地(即使不在本地,也要在离本节点近的节点上,如接入同一交换机的节点),这样能够避免通过网络拿数据带来的额外开销和带宽占用。Google使用GFS作为数据存储平台。将GFS和MapReduce部署在同一集群上,来实现locality的特性。


MapReduce节点通信
MapReduce集群中的节点也须要相互通信,论文中并没有给出细节,仅仅说明使用了Remote Procedure Call。MapReduce节点间的通信也能够採用MPI标准来实现,能够參考 MapReduce-MPI (MR-MPI) library,开源的MapReduce实现,採用MPI作为通信协议(http://mapreduce.sandia.gov/)。
MapReduce还提供了容错处理(fault tolerance)等功能,详细请參考论文。

Hadoop
hadoop是使用最广的基于MapReduce/GFS的实现。Hadoop在如今的互联网公司中有广泛应用。支X宝账单中会有各种各样的统计数据。个人认为应该是採用MapReduce分析出来的(推測)。X宝的Hadoop服务叫做《X宝云梯》,网上有不少的资料,有兴趣的朋友能够搜搜看。

存储集群
依照存储模型看,存储系统能够分为3类:块级存储,文件存储,key-value及关系数据库。


块级存储
块级存储的代表是採用SAN的存储设备。这样的设备在大型企业中广泛採用,历史悠久,技术成熟。但也有缺点:一是价格昂贵。而是扩展性不强。

分布式文件系统
代表产品是Google GFS。

通过大量便宜PC + 软件方案。以低廉的价格提供:1)海量存储 2)高性能 3)高可用(HA) 4)可扩展(scalability)等特性。

该系统在互联网企业中大量使用。


Fast DSF:基于GFS思路设计的开源分布式文件系统。针对互联网使用设计。具有负载均衡。冗余备份。线性扩展等特性。

本身代码量较小,设计较为简单,适合感兴趣的同学学习。


key-value
该类产品就是如今流行的NoSQL,存储模型不限于key-value。还能够是其它。

NoSQL产品适合那些訪问量大。但又不须要事物处理(Transaction)的场景。

互联网上的大量场景都符合这个特点,如门户站点。论坛,博客等。这些场景都是读多写少。非常少更新,没有事物。

NoSQL产品一般都有非常好的扩展性。该系统在互联网企业中大量使用。

key-value模型:MemcacheDB。

MemcacheDB基于Memcached。但提供了持久化支持。Memcached本身是作为缓存(cache)用的,数据会有失效期。重新启动系统也会导致数据丢失。Amazon S3,openstack swift也都是採用了key-value模型的分布式存储系统。

还其它存储模型的系统:如MongoDB,採用document模型;google的bigtable。採用表模型。

关系数据库
基于关系模型构建,最大的特点是支持:SQL和事物(transaction)。SQL中的最重要的功能就是表连接(join)。NoSQL对SQL和连接的支持都不是非常完整,有一定限制。关系数据库的缺点是扩展性不强,非常多互联网场景不适合。关系数据库在互联网中的应用还是不可代替的,非常多场景还须要事物处理。如电子商务的支付。下单等。

不同的存储集群有不同的特点。应用须要依据自身的特点来选择合适的模型。眼下amazon的云服务中提供了块级存储(EBS)和key-value(S3)及关系数据库(RDS)的服务。当中S3的容量不限,EBS和RDS都能够依据须要随时调整。

Web集群
提供web服务的集群,互联网中的大部分集群都属于这样的。直接给用户提供各种服务,如网页。视频。web service。游戏等。


集群中的可扩展性
集群中的节点数量不固定,能够依据实际需求动态扩展,最简单的集群仅仅须要两个节点。集群中添加节点的能力叫做可扩展性(scalability)。

随着节点的添加。节点之间的数据流量也会逐渐添加。当网络的传输速度无法满足集群产生的数据流量时,该集群就达到了节点上限。能够通过创建多个集群系统满足更高的需求。

集群的可扩展性和集群类型相关,假设各节点之间没有关联并且节点本身也没有数据(状态)。则easy扩展,比方web集群。其它集群的扩展则比較复杂。

集群中节点之间的关系
一般集群的设计中会有一个主控节点(master)用来协调集群的总体执行,其余的属于工作节点(从节点)。如web集群中的负载均衡器(load balancer)。负载均衡器负责将请求调度到集群中的工作节点上。存储系统中主控节点负责定位给定数据保存在哪台工作节点上。LVM是基于Linux的广泛採用的负载均衡器。


也有对等集群设计,全部节点都是工作节点,没有主控。

代表设计有amazon Dynamo。

只是这样的设计带来了非常多复杂性。实际效果并非非常理想。

眼下商用的产品设计都是有主控节点的。



节点之间的通信
集群的节点之间须要互相通信。通信能够採用标准协议(如MPI)。也能够採用自己定义协议。非常多集群会依据自己的特点。设计专用协议,达到性能最大化。

web集群一般採用标准的HTTP(S)协议通信。有的集群通信仅仅限于主控节点和工作节点。如web集群中。有些则是工作节点之间也须要通信。如分布式文件系统中。工作节点之间须要同步数据副本。



集群的管理
负载均衡
调整每一个节点的工作复杂(CPU或存储),配置不同的算法。

心跳包
用来检查集群中节点的状态。假设几点发生问题,能够通过心跳检測出来。

容错处理
系统中节点故障后的处理,处理方法和集群类型相关。

如web集群中,负载均衡器採用主备模式,主设备失效后,备份设备自己主动接替主设备工作(failover)。工作节点失效后,仅仅要从负载均衡器中移除该设备就可以。

存储设计的处理会相对复杂。一个工作节点失效后,该节点上的数据备份所有丢失,集群须要找出丢失的数据并在其它节点中从建这些备份。


扩容
web集群中,扩容仅仅要将新机器配置在负载均衡器上就可以。存储节点上增加新机器的策略就不同样。有的会将集群中的部分数据迁移到新机器中。有的则是将之后产生的新数据调度到该机器上。

监控
用来监控集群系统的总体执行状态。集群系统会提供各自的监控工具。


架构示意图

从网络

版权声明:本文博主原创文章,博客,未经同意不得转载。

相关文章:

  • mysql 使用小结
  • 基于Qt有限状态机的一种实现方式和完善的人工智能方法
  • 【Android】高德地图 缩放级别及像素以及地图上的点转化成屏幕上的点
  • JAVA基础学习day26--正则表达式
  • css3中的伪元素
  • lua程序设计
  • yii2 model 给模型赋值(花了我将近30分钟)
  • CacheManager:–个通用缓存接口抽象类库
  • Map小结
  • Android中实现app版本更新
  • linux内核优化
  • 媒体类型(MIME类型)
  • AngularJS指令开发(1)——参数详解
  • [安卓] 15、用NFC解锁手机并自动打开应用
  • Delphi、C#之父Anders Hejlsberg首次访华 推广TypeScript
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2017年终总结、随想
  • Angular数据绑定机制
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • go语言学习初探(一)
  • passportjs 源码分析
  • React as a UI Runtime(五、列表)
  • React的组件模式
  • spring security oauth2 password授权模式
  • Spring声明式事务管理之一:五大属性分析
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 产品三维模型在线预览
  • 翻译:Hystrix - How To Use
  • 聊聊sentinel的DegradeSlot
  • 码农张的Bug人生 - 见面之礼
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 再谈express与koa的对比
  • Java性能优化之JVM GC(垃圾回收机制)
  • UI设计初学者应该如何入门?
  • 如何正确理解,内页权重高于首页?
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #Java第九次作业--输入输出流和文件操作
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (C#)获取字符编码的类
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET CF命令行调试器MDbg入门(二) 设备模拟器
  • .NET 回调、接口回调、 委托
  • .net 使用ajax控件后如何调用前端脚本
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net反混淆脱壳工具de4dot的使用
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...
  • [20190416]完善shared latch测试脚本2.txt
  • [ai笔记9] openAI Sora技术文档引用文献汇总