当前位置:首页 » 算力简介 » 分布式能提高算法算力吗

分布式能提高算法算力吗

发布时间: 2021-05-16 23:28:47

Ⅰ 集中式数据处理和分布式数据处理的优缺点

集中式数据处理优点:

1、部署结构简单。

2、数据容易备份,只需要把中央计算机上的数据备份即可。

3、不易感染病毒,只要对中央计算机做好保护,终端一般不需要外接设备,感染病毒的几率很低。

4、总费用较低,中央计算机的功能非常强大,终端只需要简单、便宜的设备。

缺点:

1、中央计算机需要执行所有的运算,当终端很多时,会导致响应速度变慢。

2、如果终端用户有不同的需要,要对每个用户的程序和资源做单独的配置,在集中式系统上做起来比较困难,而且效率不高。

分布式数据处理优点:

1、分布式网络中的每台机器都能存储和处理数据,降低了对机器性能的要求,所以不必购买昂贵的高性能机器,这大大降低了硬件投资成本。

2、扩展性极佳。在当前系统存储或计算能力不足时,可以简单地通过增加廉价PC机的方式来增加系统的处理和存储能力。

3、处理能力极强。庞大的计算任务可以在合理分割后由分布式网络中的机器并行地处理

缺点

1、计算程序全负荷运行时仍会对计算机的各个部件造成一定压力。

2、对项目方来说,参加分布式计算的志愿者不是项目方自己的人员,不是全体可信任,因此必须引入一定的冗余计算机制,才能防止计算错误、恶意作弊等。



(1)分布式能提高算法算力吗扩展阅读

分布式计算为信息不只分布在一个软件或计算机上,而是分布于多个软件上,可以用多台或一台计算机同时运行若干个软件,通过网络实现信息的共享。与其他算法相比,分布式算法有明显的优势:

1、共享资源更加方便。

2、能够实现计算负载的平衡,用多台计算机同时处理任务。

3、可以根据实际需要合理选择适当的计算机运行该程序。计算机分布式计算的灵魂是平衡负载和共享资源。分布式计算具有高效、快捷、准确的优势

Ⅱ 如何知道电脑是否具有并行计算能力(就剩下这么点家底了,希望大家原谅)

你说PC吗? 我个人认为, 任何电脑都具有并行计算的能力。看你如何定义了。并行计算和分布式系统同样都是一种计算方法,并不是硬件规格。

你的操作系统里每个任务都一个有个process, 而每个process都是由很多threads。如果你上过操作系统的课应该遇到过multi-threads programming. 你让不同的threads去合作完成同一个task, 这其实就可以叫并行计算. 分布式处理嘛.

你看那些并行计算的课的project, 也都是拿普通计算机跑算法, 重点是你会去模拟这个环境. 就像那些跑网络算法的用socket来模拟, 也是用一台PC模拟出了N台workstations的网络.

如果你说多核CPU, 来分布式处理事情. 关于Firmware的东西平民是很难实现的. 首先你并没有access to 那些普通的主板的firmware. 所以你必须要买一块general purpose的 programmable的板子. 这个不难, 但你要买个多核的基本可以说找不到吧...只有实验室里才有可能有...就算被你找到... 我觉得那块板子的钱估计也是你去读研然后进实验室的学费的好几倍...

总而言之, 软件实现的话今天的PC应该都没什么问题. 硬件的话, 首先你自己做不到, 要人家官方预设了这个选项. 而至于如何启动并行计算模式, 你要去读这块板子的datasheet.

我不同意上面那位说必须两个核, 有两个大脑的人确实可以做到并行. 但一个大脑的左脑与右脑也同样是并行. 在细化不同的神经元相对另外一个完全independent的神经元也同样是并行. 并行是一种解决问题的方式, 一种思想. 并行计算最早被提出的是1912年, 多核处理器是哪年才出现的, 我记不得了, 但2000年以后了吧至少...

Ⅲ 分布式计算系统 Maekawa算法 13个进程怎么划分子集

第一个进程子集是(1.2.4.10);第二个进程子集是(2.3.5.11);以后每一列数字递增,13以后从1重新开始。

分布式系统的类型,大致可以归为三类:

1、分布式数据,但只有一个总数据库,没有局部数据库。

2、分层式处理,每一层都有自己的数据库。

3、充分分散的分布式网络,没有中央控制部分,各节点之间的联接方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式联接等。

(3)分布式能提高算法算力吗扩展阅读

衡量分布式系统的指标

1、性能:系统的吞吐能力,指系统在某一时间可以处理的数据总量,通常可以用系统每秒处理的总的数据量来衡量;系统的响应延迟,指系统完成某一功能需要使用的时间。

系统的并发能力,指系统可以同时完成某一功能的能力,通常也用QPS(query per second)来衡量。上述三个性能指标往往会相互制约,追求高吞吐的系统,往往很难做到低延迟;系统平均响应时间较长时,也很难提高QPS。

2、可用性:系统的可用性(availability)指系统在面对各种异常时可以正确提供服务的能力。

系统的可用性可以用系统停服务的时间与正常服务的时间的比例来衡量,也可以用某功能的失败次数与成功次数的比例来衡量。可用性是分布式的重要指标,衡量了系统的鲁棒性,是系统容错能力的体现。

3、可扩展性:系统的可扩展性(scalability)指分布式系统通过扩展集群机器规模提高系统性能(吞吐、延迟、并发)、存储容量、计算能力的特性。

好的分布式系统总在追求“线性扩展性”,也就是使得系统的某一指标可以随着集群中的机器数量线性增长。

4、一致性:分布式系统为了提高可用性,总是不可避免的使用副本的机制,从而引发副本一致性的问题。越是强的一致的性模型,对于用户使用来说使用起来越简单。

Ⅳ 分布式和云计算有区别吗

“云是一个更上层、更抽象、更玄乎的概念。
而分布式是一个很具体的概念。
若没有分布式,云就无从谈起。但分布式计算却不一定都是云。”

分布式是通过应用设计,将任务进行分解。
云计算是通过类似网格的东西,由系统自动进行资源组合。

什么是分布式计算?所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。 最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,您可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命;您可以寻找超过1000万位数字的梅森质数;您也可以寻找并发现对抗艾滋病病毒的更为有效的药物。这些项目都很庞大,需要惊人的计算量,仅仅由单个的电脑或是个人在一个能让人接受的时间内计算完成是决不可能的。
分布式计算是利用互联网上的计算机的 CPU 的闲置处理能力来解决大型计算问题的一种计算科学。下面,我们看看它是怎么工作的:
首先, 要发现一个需要非常巨大的计算能力才能解决的问题。这类问题一般是跨学科的、极富挑战性的、人类急待解决的科研课题。其中较为著名的是:
1.解决较为复杂的数学问题,例如:GIMPS(寻找最大的梅森素数)。
2.研究寻找最为安全的密码系统,例如:RC-72(密码破解)。
3.生物病理研究,例如:Folding@home(研究蛋白质折叠,误解,聚合及由此引起的相关疾病)。
4.各种各样疾病的药物研究,例如:United Devices(寻找对抗癌症的有效的药物)。
5.信号处理,例如:SETI@Home(在家寻找地外文明)。
从这些实际的例子可以看出,这些项目都很庞大,需要惊人的计算量,仅仅由单个的电脑或是个人在一个能让人接受的时间内计算完成是决不可能的。在以前,这些问题都应该由超级计算机来解决。但是, 超级计算机的造价和维护非常的昂贵,这不是一个普通的科研组织所能承受的。随着科学的发展,一种廉价的、高效的、维护方便的计算方法应运而生——分布式计算!
随着计算机的普及,个人电脑开始进入千家万户。与之伴随产生的是电脑的利用问题。越来越多的电脑处于闲置状态,即使在开机状态下CPU的潜力也远远不能被完全利用。我们可以想象,一台家用的计算机将大多数的时间花费在“等待”上面。即便是使用者实际使用他们的计算机时,处理器依然是寂静的消费,依然是不计其数的等待(等待输入,但实际上并没有做什么)。互联网的出现, 使得连接调用所有这些拥有限制计算资源的计算机系统成为了现实。
那么,一些本身非常复杂的但是却很适合于划分为大量的更小的计算片断的问题被提出来,然后由某个研究机构通过大量艰辛的工作开发出计算用服务端和客户端。服务端负责将计算问题分成许多小的计算部分,然后把这些部分分配给许多联网参与计算的计算机进行并行处理,最后将这些计算结果综合起来得到最终的结果。
当然,这看起来也似乎很原始、很困难,但是随着参与者和参与计算的计算机的数量的不断增加, 计算计划变得非常迅速,而且被实践证明是的确可行的。目前一些较大的分布式计算项目的处理能力已经可以达到甚而超过目前世界上速度最快的巨型计算机。
您也可以选择参加某些项目以捐赠的 Cpu 内核处理时间,您将发现您所提供的 CPU 内核处理时间将出现在项目的贡献统计中。您可以和其他的参与者竞争贡献时间的排名,您也可以加入一个已经存在的计算团体或者自己组建一个计算小组。这种方法很利于调动参与者的热情。
随着民间的组队逐渐增多, 许多大型组织(例如公司、学校和各种各样的网站)也开始了组建自己的战队。同时,也形成了大量的以分布式计算技术和项目讨论为主题的社区,这些社区多数是翻译制作分布式计算项目的使用教程及发布相关技术性文章,并提供必要的技术支持。
那么谁可能加入到这些项目中来呢? 当然是任何人都可以! 如果您已经加入了某个项目,而且曾经考虑加入计算小组, 您将在中国分布式计算总站及论坛里找到您的家。任何人都能加入任何由我站的组建的分布式计算小组。希望您在中国分布式总站及论坛里发现乐趣。
参与分布式计算——一种能充分发挥您的个人电脑的利用价值的最有意义的选择——只需要下载有关程序,然后这个程序会以最低的优先度在计算机上运行,这对平时正常使用计算机几乎没有影响。如果你想利用计算机的空余时间做点有益的事情,还犹豫什么?马上行动起来吧,你的微不足道的付出或许就能使你在人类科学的发展史上留下不小的一笔呢!
专业定义 (中国科学技术信息研究所对分布式计算的定义)
分布式计算是近年提出的一种新的计算方式。所谓分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式计算比起其它算法具有以下几个优点:
1、稀有资源可以共享,
2、通过分布式计算可以在多台计算机上平衡计算负载,
3、可以把程序放在最适合运行它的计算机上,
其中,共享稀有资源和平衡负载是计算机分布式计算的核心思想之一。
实际上,网格计算就是分布式计算的一种。如果我们说某项工作是分布式的,那么,参与这项工作的一定不只是一台计算机,而是一个计算机网络,显然这种“蚂蚁搬山”的方式将具有很强的数据处理能力。网格计算的实质就是组合与共享资源并确保系统安全。

狭义云计算是指IT基础设施的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的资源(硬件、平台、软件)。 提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。这种特性经常被称为像水电一样使用IT基础设施。

2、广义云计算

广义云计算是指服务的交付和使用模式,指通过网络以按需、易扩展的方式获得所需的服务。这种服务可以是IT和软件、互联网相关的,也可以是任意其他的服务。
解释:
这种资源池称为“云”。“云”是一些可以自我维护和管理的虚拟计算资源,通常为一些大型服务器集群,包括计算服务器、存储服务器、宽带资源等等。云计算将所有的计算资源集中起来,并由软件实现自动管理,无需人为参与。这使得应用提供者无需为繁琐的细节而烦恼,能够更加专注于自己的业务,有利于创新和降低成本。
有人打了个比方:这就好比是从古老的单台发电机模式转向了电厂集中供电的模式。它意味着计算能力也可以作为一种商品进行流通,就像煤气、水电一样,取用方便,费用低廉。最大的不同在于,它是通过互联网进行传输的。
云计算是并行计算(Parallel Computing)、分布式计算(Distributed Computing)和网格计算(Grid Computing)的发展,或者说是这些计算机科学概念的商业实现。云计算是虚拟化(Virtualization)、效用计算(Utility Computing)、IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)等概念混合演进并跃升的结果。
总的来说,云计算可以算作是网格计算的一个商业演化版。早在2002年,我国刘鹏就针对传统网格计算思路存在不实用问题,提出计算池的概念:“把分散在各地的高性能计算机用高速网络连接起来,用专门设计的中间件软件有机地粘合在一起,以Web界面接受各地科学工作者提出的计算请求,并将之分配到合适的结点上运行。计算池能大大提高资源的服务质量和利用率,同时避免跨结点划分应用程序所带来的低效性和复杂性,能够在目前条件下达到实用化要求。”如果将文中的“高性能计算机”换成“服务器集群”,将“科学工作者”换成“商业用户”,就与当前的云计算非常接近了。
云计算具有以下特点:
(1) 超大规模。“云”具有相当的规模,Google云计算已经拥有100多万台服务器, Amazon、IBM、微软、Yahoo等的“云”均拥有几十万台服务器。企业私有云一般拥有数百上千台服务器。“云”能赋予用户前所未有的计算能力。
(2) 虚拟化。云计算支持用户在任意位置、使用各种终端获取应用服务。所请求的资源来自“云”,而不是固定的有形的实体。应用在“云”中某处运行,但实际上用户无需了解、也不用担心应用运行的具体位置。只需要一台笔记本或者一个手机,就可以通过网络服务来实现我们需要的一切,甚至包括超级计算这样的任务。
(3) 高可靠性。“云”使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性,使用云计算比使用本地计算机可靠。
(4) 通用性。云计算不针对特定的应用,在“云”的支撑下可以构造出千变万化的应用,同一个“云”可以同时支撑不同的应用运行。
(5) 高可扩展性。“云”的规模可以动态伸缩,满足应用和用户规模增长的需要。
(6) 按需服务。“云”是一个庞大的资源池,你按需购买;云可以象自来水,电,煤气那样计费。
(7) 极其廉价。由于“云”的特殊容错措施可以采用极其廉价的节点来构成云,“云”的自动化集中式管理使大量企业无需负担日益高昂的数据中心管理成本,“云”的通用性使资源的利用率较之传统系统大幅提升,因此用户可以充分享受“云”的低成本优势,经常只要花费几百美元、几天时间就能完成以前需要数万美元、数月时间才能完成的任务。
云计算可以彻底改变人们未来的生活,但同时也用重视环境问题,这样才能真正为人类进步做贡献,而不是简单的技术提升。

Ⅳ kmeans传统算法和分布式算法的区别

算法还是R语言擅长。java可以直接调用R语言的,有一个rJava的包。如果要分布式计算,可以基于hadoop调用R,,另外还有RHadoop等可参考。

区块链技术中的分布式算法的特点是什么

重庆金窝窝分析:大数据的分析挖掘是数据密集型计算,需要巨大的分布式计算能力。节点管理、任务调度、容错和高可靠性是关键技术。

Ⅶ 分布式与集群的区别是什么

分布式与集群的区别

经常听到的名词,这是两个概念,你可以简单这样理解:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
形象说明:

如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。

采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。

而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小后,10个任务同时完成,这样,整身来看,还是1小时内完成一个任务!
集群概念:

1. 两大关键特性

集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但事实上集群由一组服务实体组成。与单一服务实体相比较,集群提供了以下两个关键特性:

· 可扩展性--集群的性能不限于单一的服务实体,新的服务实体可以动态地加入到集群,从而增强集群的性能。

· 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。

2. 两大能力

为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力:

· 负载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。

· 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。

负载均衡和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。

3. 两大技术

实现集群务必要有以下两大技术:

· 集群地址--集群由多个服务实体组成,集群客户端通过访问集群的集群地址获取集群内部各服务实体的功能。具有单一集群地址(也叫单一影像)是集群的一个基 本特征。维护集群地址的设置被称为负载均衡器。负载均衡器内部负责管理各个服务实体的加入和退出,外部负责集群地址向内部服务实体地址的转换。有的负载均 衡器实现真正的负载均衡算法,有的只支持任务的转换。只实现任务转换的负载均衡器适用于支持ACTIVE-STANDBY的集群环境,在那里,集群中只有 一个服务实体工作,当正在工作的服务实体发生故障时,负载均衡器把后来的任务转向另外一个服务实体。

· 内部通信--为了能协同工作、实现负载均衡和错误恢复,集群各实体间必须时常通信,比如负载均衡器对服务实体心跳测试信息、服务实体间任务执行上下文信息的通信。

具有同一个集群地址使得客户端能访问集群提供的计算服务,一个集群地址下隐藏了各个服务实体的内部地址,使得客户要求的计算服务能在各个服务实体之间分布。内部通信是集群能正常运转的基础,它使得集群具有均衡负载和错误恢复的能力。
分布式概念:
所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。分布式网络存储技术是将数据分散的存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单存储服务器的瓶颈问题,还提高了系统的可靠性、可用性和扩展性。
分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。

Ⅷ 为什么分布式算法比集中式算法优越

分布式计算是一种计算方法,和集中式计算是相对的。随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成,如果采用集中式计算,需要耗费相当长的时间来完成。分布式计算将该应用分解成许多小的部分,分配给多台计算机进行处理。

Ⅸ “分布式”与“集群”的区别是什么

(1)另外一位博主的观点(http://blog.csdn.net/bluishglc/article/details/5483162)

博主有对他的表述有作一点修改补充,方便各位猿友明了他的意思。

简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

例如:

如果一个任务由10个子任务组成,每个子任务单独执行需1小时,则在一台服务器上执行改任务需10小时。

采用分布式方案,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是Hadoop的Map/Rece分布式计算模型)

而采用集群方案,同样提供10台服务器,每台服务器都能独立处理这个任务。假设有10个任务同时到达,10个服务器将同时工作,10小后,10个任务同时完成,这样,整身来看,还是平均1小时完成一个任务!(注意这里的任务和子任务的区别)

(2)知乎(https://www.hu.com/question/20004877)

这个猿友描述得很简单明了:

分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上

另外一位猿友从另外一个角度去表述:

集群是个物理形态,分布式是个工作方式。

这位猿友的描述也很简洁,但是比较抽象:

按照我的理解,集群是解决高可用的,而分布式是解决高性能、高并发的

(3)网络(http://ke..com/view/4804677.htm、http://ke..com/view/3022776.htm)

集群:

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。

分布式:

一种基于网络的计算机处理技术,与集中式相对应。由于个人计算机的性能得到极大的提高及其使用的普及,使处理能力分布到网络上的所有计算机成为可能。分布式计算是和集中式计算相对立的概念,分布式计算的数据可以分布在很大区域。

看完这些是不是有种似懂非懂的感觉?博主也是一样!所以我们接下来继续了解。

上面博主有说过自己有接触过分布式服务框架Dubbo,那么我们看看它为什么说自己是分布式服务架构?(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%83%8C%E6%99%AF)

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。

偶然之间,有发现据说“Git就是分布式版本控制系统”,为什么它是分布式的呢?

Git就是分布式版本控制系统,对应的是集中式的版本控制如SVN。简单的说,分布式的版本控制就是每个人都可以创建一个独立的代码仓库用于管理,各种版本控制的操作都可以在本地完成。每个人修改的代码都可以推送合并到另外一个代码仓库中。而像SVN这样,只有一个中央控制,所有的开发人员都必须依赖于这个代码仓库。每次版本控制的操作也必须链接到服务器才能完成。很多公司喜欢用集中式的版本控制是为了更好的控制代码。如果个人开发,就可以选择Git这种分布式的。

从一般开发者的角度来看,git有以下功能:

1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、在单机上自己创建的分支上提交代码。
4、在单机上合并分支。
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
6、生成补丁(patch),把补丁发送给主开发者。
7、看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
8、一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。

看了分布式服务框架Dubbo和分布式版本控制系统Git的这些描述后,细想一下,似乎和上面的“分布式:一个业务分拆多个子业务,部署在不同的服务器上,集群:同一个业务,部署在多个服务器上”的观点些相似。

Dubbo将核心业务抽取出来,作为独立的服务模块,各个模块之间只需要依赖接口,接口实现分离,那么开发人员可以各自完成自己负责的服务模块,最后完成一个完整的系统。他们的目标是完成一个系统,而各个子服务模块相当于子业务。Git也类似。

事实上,分布式很多时候都开不了集群的,在Dubbo、Hadoop、Elasticsearch都有体现。

现在分布式概念可能我们相对比较清晰了,集群概念可能还比较模糊。另外,集群是如何跟分布式配合的呢,接下来我们继续了解集群。

集群主要分成三大类 (高可用集群, 负载均衡集群,科学计算集群)

高可用集群( High Availability Cluster)
负载均衡集群(Load Balance Cluster)
科学计算集群(High Performance Computing Cluster)

1、高可用集群(High Availability Cluster)

常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如”双机热备”, “双机互备”, “双机”。

高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。

2、负载均衡集群(Load Balance Cluster)

负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。

负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。

3、科学计算集群(High Performance Computing Cluster)

高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。

高性能计算分类:

3.1、高吞吐计算(High-throughput Computing)

有一类高性能计算,可以把它分成若干可以并行的子任务,而且各个子任务彼此间没有什么关联。象在家搜寻外星人( SETI@HOME – Search for Extraterrestrial Intelligence at Home )就是这一类型应用。

这一项目是利用Internet上的闲置的计算资源来搜寻外星人。SETI项目的服务器将一组数据和数据模式发给Internet上参加SETI的计算节点,计算节点在给定的数据上用给定的模式进行搜索,然后将搜索的结果发给服务器。服务器负责将从各个计算节点返回的数据汇集成完整的 数据。因为这种类型应用的一个共同特征是在海量数据上搜索某些模式,所以把这类计算称为高吞吐计算。

所谓的Internet计算都属于这一类。按照 Flynn的分类,高吞吐计算属于SIMD(Single Instruction/Multiple Data)的范畴。

3.2、分布计算(Distributed Computing)

另一类计算刚好和高吞吐计算相反,它们虽然可以给分成若干并行的子任务,但是子任务间联系很紧密,需要大量的数据交换。按照Flynn的分类,分布式的高性能计算属于MIMD(Multiple Instruction/Multiple Data)的范畴。

下面说说这几种集群的应用场景:

高可用集群这里不多作说明。

想Dubbo是比较偏向于负载均衡集群,用过的猿友应该知道(不知道的可以自行了解一下),Dubbo同一个服务是可以有多个提供者的,当一个消费者过来,它要消费那个提供者,这里是有负载均衡机制在里面的。

搜索引擎Elasticsearch比较偏向于科学计算集群的分布计算。

而到这里,可能不少猿友都知道,集群的一些术语:集群容错、负载均衡。

我们以Dubbo为例:

集群容错(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99)

Dubbo提供了这些容错策略:

集群容错模式:
可以自行扩展集群容错策略,参见:集群扩展

Failover Cluster
失败自动切换,当出现失败,重试其它服务器。(缺省)
通常用于读操作,但重试会带来更长延迟。
可通过retries="2"来设置重试次数(不含第一次)。

Failfast Cluster
快速失败,只发起一次调用,失败立即报错。
通常用于非幂等性的写操作,比如新增记录。

Failsafe Cluster
失败安全,出现异常时,直接忽略。
通常用于写入审计日志等操作。

Failback Cluster
失败自动恢复,后台记录失败请求,定时重发。
通常用于消息通知操作。

Forking Cluster
并行调用多个服务器,只要一个成功即返回。
通常用于实时性要求较高的读操作,但需要浪费更多服务资源。
可通过forks="2"来设置最大并行数。

Broadcast Cluster
广播调用所有提供者,逐个调用,任意一台报错则报错。(2.1.0开始支持)
通常用于通知所有提供者更新缓存或日志等本地资源信息。

负载均衡(http://bbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1)

Dubbo提供了这些负载均衡策略:

Random LoadBalance
随机,按权重设置随机概率。
在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。

RoundRobin LoadBalance
轮循,按公约后的权重设置轮循比率。
存在慢的提供者累积请求问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

LeastActive LoadBalance
最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。
使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

ConsistentHash LoadBalance
一致性Hash,相同参数的请求总是发到同一提供者。
当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。
算法参见:http://en.wikipedia.org/wiki/Consistent_hashing。
缺省只对第一个参数Hash,如果要修改,请配置<bbo:parameter key="hash.arguments" value="0,1" />
缺省用160份虚拟节点,如果要修改,请配置<bbo:parameter key="hash.nodes" value="320" />

还有比较好奇它们是怎么通信的?

像早期版本的Elasticsearch的话,自动发现节点机制,ES是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

而Dubbo是有个注册中心,它支持多个注册中心,但是推荐使用ZooKeeper。关于ZooKeeper可以自行了解,很多集群相关的框架都有使用到它。当然像Elasticsearch是自己有相应的机制实现的。

Ⅹ lamport分布式互斥算法和Ricart-Agrawala 算法的区别是什么

我来回答一下吧,现在这些参考资料还真不多

Lamport 算法

请求临界区时:向所有其他进程发送 $REQUEST(t_i, i)$,将这个请求保存到本地请求队列里;

如果收到了一个请求,那么按时间戳将请求加入到本地请求队列,然后返回一个 $REPLY(t_j)$,也是当前的时间戳;

发送了请求以后进程就等啊等啊,直到

  • 收到了所有其他进程返回的 $REPLY(t*)$,期望是对本地的 $t_i$进行相应,所以要求 $t* > t_i$,也就是说,是我发了消息后,对方才回复的消息;

  • 并且本地的 $t_i$ 在本地队列的队头

  • 那么就执行,可以进入临界区

    退出临界区时,从本地队列里删掉自己的请求,带着时间戳发一个广播,通知所有队列都可以删掉$i$ 请求了;

因此Lamport算法的消息开销为3(N-1),分别是对除自己以外的其他进程进行资源请求、接收通知、和通知释放


Ricart-Agrawala 算法

主要就是来优化上一个算法里的消息通信机制的

上一个算法的冗余主要有:

  • 1.没有申请临界区资源的进程是没必要知道你是否进行了 $RELEASE$ 操作的;

    1.1 同样,早早的回复REPLY也是没用的,回复了也进不去

    1.2 所以,不如等到RELEASE的时候再REPLY

  • 2.同样,它们也是没必要知道你是否要申请临界区资源的,这和它没有任何关系;

  • 这个算法就针对1进行了优化

这个算法去掉了 $RELEASE$ 消息,$RELEASE$ 不需要发送了;

为什么呢?根据我们前边的分析,将$RELEASE$发送给那些未申请临界区的进程是没有必要的,因此我们不想给他们发送,而申请临界区的进程就是给我们发送了$REQUEST$ 消息的进程。因此我们只需要给我们需要$REPLY$的那些进程发送$RELEASE$就可以了。

继续分析一下,其实马上回复$REPLY$也是没必要的,反正回复了它也不能马上进行访问,不如等到它可以访问的时候再回复他(对请求方进程来说没差别,对吧)。

基于这样的想法,我们把 $REPLY$ 延迟到释放资源时再发送。我们可以发现,但凡是我们发送 $REPLY$ 时,都没有在继续占用临界区资源了,也就是说,将这两个消息合并成了一个消息,减少了 1/3 的消息复杂度。

因此,算法消息开销减少为2(N-1)

热点内容
比特币矿机最低多少钱 发布:2024-11-20 11:39:15 浏览:736
最新矿机市场消息 发布:2024-11-20 11:17:43 浏览:266
eth能在手机上挖币吗 发布:2024-11-20 11:06:34 浏览:527
以太坊提现记录 发布:2024-11-20 10:54:30 浏览:930
比特币价格变化近几年 发布:2024-11-20 10:49:23 浏览:236
ETH合约期货技巧 发布:2024-11-20 10:49:21 浏览:2
苹果手机以前挖矿游戏叫什么 发布:2024-11-20 10:28:40 浏览:43
eth今日走势分析 发布:2024-11-20 10:15:31 浏览:152
电子承兑汇票和区块链技术 发布:2024-11-20 10:14:56 浏览:482
btc今日走势图 发布:2024-11-20 09:47:15 浏览:450