Ⅰ 分布式数据库的工作原理是什么
分布式数据有不同的理论支撑,TiDB 官方社区(AskTUG)
目前国产数据排名靠前的可以了解下 TiDB
水平弹性扩展
通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
分布式事务
TiDB 100% 支持标准的 ACID 事务。
真正金融级高可用
相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选举协议可以提供金融级的 100% 数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复 (auto-failover),无需人工介入。
Ⅱ 分布式数据库有什么特点
1.数据独立性与位置透明性
数据独立性是数据库方法追求的主要目标之一,分布透明性指用户不必关心数据的逻辑分区,不必关心数据物理位置分布的细节,也不必关心重复副本(冗余数据)的一致性问题,同时也不必关心局部场地上数据库支持哪种数据模型。分布透明性的优点是很明显的。有了分布透明性,用户的应用程序书写起来就如同数据没有分布一样。当数据从一个场地移到另一个场地时不必改写应用程序。当增加某些数据的重复副本时也不必改写应用程序。数据分布的信息由系统存储在数据字典中。用户对非本地数据的访问请求由系统根据数据字典予以解释、转换、传送。
2.集中和节点自治相结合
在分布式数据库中,数据的共享有两个层次:一是局部共享,即在局部数据库中存储局部场地上各用户的共享数据.这些数据是本场地用户常用的。二是全局共享,即在分布式数据库的各个场地也存储可供网中其它场地的用户共享的数据,支持系统中的全局应用。因此,相应的控制结构也具有两个层次:集中和自治。分布式数据库系统常常采用集中和自治相结合的控制结构,各局部的DBMS可以独立地管理局部数据库,具有自治的功能。同时,系统又设有集中控制机制,协调各局部DBMS的工作,执行全局应用。另外,在不同的系统集中和自治的程度不尽相同。
3.支持全局数据库的一致性和和可恢复性
分布式数据库中各局部数据库即满足集中式数据库的一致性、可串行性和可恢复性,还保证了数据库的全局一致性、并行操作的可串行性和系统的全局可恢复性。这是因为全局应用要涉及两个以上结点的数据。因此在分布式数据库系统中一个业务可能由不同场地上的多个操作组成。这样,当其中某一个结点出现故障操作失败后如何使全局业务滚回呢?如何使另一个结点撤销已执行的操作(若操作已完成或完成一部分)或者不必再执行业务的其它操作(若操作尚没执行)?这些技术要比集中式数据库复杂和困难得多,分布式数据库系统必须解决这些问题。
4.复制透明性
用户不用关心数据库在网络中各个节点的复制情况,被复制的数据的更新都由系统自动完成。在分布式数据库系统中,可以把一个场地的数据复制到其他场地存放,应用程序可以使用复制到本地的数据在本地完成分布式操作,避免通过网络传输数据,提高了系统的运行和查询效率。但是对于复制数据的更新操作,就要涉及到对所有复制数据的更新。
5.易于扩展性
在大多数网络环境中,单个数据库服务器最终会不满足使用。如果服务器软件支持透明的水平扩展,那么就可以增加多个服务器来进一步分布数据和分担处理任务。
Ⅲ 软件系统可分为哪几类
软件系统分为两大类:系统软件、应用软件。
1、系统软件:担负控制和协调计算机及其外部设备、支持应用软件的开发和运行的一类计算机软件。系统软件般包括操作系统、语言处理程序、数据库系统和网络管理系统。
2、应用软件:为特定领域开发、并为特定目的服务的一类软件。应用软件是直接面向用户需要的,它们可以直接帮助用户提高工作质量和效率,甚至可以帮助用户解决某些难题。
(3)分布式并行数据库扩展阅读
软件系统作用:管理软硬件资源、控制程序执行,改善人机界面,合理组织计算机工作流程和为用户使用计算机提供良好运行环境的一种系统软件。软件系统为位于硬件层之上,所有软件层之下的一个必不可少的、最基本又是最重要的一种系统软件。它对计算机系统的全部软、硬件和数据资源进行统一控制、调度和管理。
从用户的角度看,它是用户与计算机硬件系统的接口;从资源管理的角度看,它是计算机系统资源的管理者。其主要作用及目的就是提高系统资源的利用率;提供友好的用户界面;创造良好的工作环境,从而使用户能够灵活、方便地使用计算机,使整个计算机系统能高效地运行。
任务为管理好计算机的全部软硬件资源,提高计算机的利用率;担任用户与计算机之间的接口,使用户通过操作系统提供的命令或菜单方便地使用计算机。
Ⅳ 哪些数据库支持分布式
什么是分布式计算?所谓分布式计算是一门计算机科学,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给许多计算机进行处理,最后把这些计算结果综合起来得到最终的结果。最近的分布式计算项目已经被用于使用世界各地成千上万位志愿者的计算机的闲置计算能力,通过因特网,您可以分析来自外太空的电讯号,寻找隐蔽的黑洞,并探索可能存在的外星智慧生命;您可以寻找超过1000万位数字的梅森质数;您也可以寻找并发现对抗艾滋病病毒的更为有效的药物。这些项目都很庞大,需要惊人的计算量,仅仅由单个的电脑或是个人在一个能让人接受的时间内计算完成是决不可能的。 分布式计算是利用互联网上的计算机的 CPU 的闲置处理能力来解决大型计算问题的一种计算科学。下面,我们看看它是怎么工作的: 首先, 要发现一个需要非常巨大的计算能力才能解决的问题。这类问题一般是跨学科的、极富挑战性的、人类急待解决的科研课题。其中较为着名的是: 1.解决较为复杂的数学问题,例如:GIMPS(寻找最大的梅森素数)。 2.研究寻找最为安全的密码系统,例如:RC-72(密码破解)。 3.生物病理研究,例如:Folding@home(研究蛋白质折叠,误解,聚合及由此引起的相关疾病)。 4.各种各样疾病的药物研究,例如:United Devices(寻找对抗癌症的有效的药物)。 5.信号处理,例如:SETI@Home(在家寻找地外文明)。 从这些实际的例子可以看出,这些项目都很庞大,需要惊人的计算量,仅仅由单个的电脑或是个人在一个能让人接受的时间内计算完成是决不可能的。在以前,这些问题都应该由超级计算机来解决。但是, 超级计算机的造价和维护非常的昂贵,这不是一个普通的科研组织所能承受的。随着科学的发展,一种廉价的、高效的、维护方便的计算方法应运而生——分布式计算! 随着计算机的普及,个人电脑开始进入千家万户。与之伴随产生的是电脑的利用问题。越来越多的电脑处于闲置状态,即使在开机状态下CPU的潜力也远远不能被完全利用。我们可以想象,一台家用的计算机将大多数的时间花费在“等待”上面。即便是使用者实际使用他们的计算机时,处理器依然是寂静的消费,依然是不计其数的等待(等待输入,但实际上并没有做什么)。互联网的出现, 使得连接调用所有这些拥有限制计算资源的计算机系统成为了现实。 那么,一些本身非常复杂的但是却很适合于划分为大量的更小的计算片断的问题被提出来,然后由某个研究机构通过大量艰辛的工作开发出计算用服务端和客户端。服务端负责将计算问题分成许多小的计算部分,然后把这些部分分配给许多联网参与计算的计算机进行并行处理,最后将这些计算结果综合起来得到最终的结果。 当然,这看起来也似乎很原始、很困难,但是随着参与者和参与计算的计算机的数量的不断增加, 计算计划变得非常迅速,而且被实践证明是的确可行的。目前一些较大的分布式计算项目的处理能力已经可以达到甚而超过目前世界上速度最快的巨型计算机。 您也可以选择参加某些项目以捐赠的 Cpu 内核处理时间,您将发现您所提供的 CPU 内核处理时间将出现在项目的贡献统计中。您可以和其他的参与者竞争贡献时间的排名,您也可以加入一个已经存在的计算团体或者自己组建一个计算小组。这种方法很利于调动参与者的热情。 随着民间的组队逐渐增多, 许多大型组织(例如公司、学校和各种各样的网站)也开始了组建自己的战队。同时,也形成了大量的以分布式计算技术和项目讨论为主题的社区,这些社区多数是翻译制作分布式计算项目的使用教程及发布相关技术性文章,并提供必要的技术支持。 那么谁可能加入到这些项目中来呢? 当然是任何人都可以! 如果您已经加入了某个项目,而且曾经考虑加入计算小组, 您将在中国分布式计算总站及论坛里找到您的家。任何人都能加入任何由我站的组建的分布式计算小组。希望您在中国分布式总站及论坛里发现乐趣。 参与分布式计算——一种能充分发挥您的个人电脑的利用价值的最有意义的选择——只需要下载有关程序,然后这个程序会以最低的优先度在计算机上运行,这对平时正常使用计算机几乎没有影响。如果你想利用计算机的空余时间做点有益的事情,还犹豫什么?马上行动起来吧,你的微不足道的付出或许就能使你在人类科学的发展史上留下不小的一笔呢! 专业定义 (中国科学技术信息研究所对分布式计算的定义) 分布式计算是近年提出的一种新的计算方式。所谓分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。分布式计算比起其它算法具有以下几个优点: 1、稀有资源可以共享, 2、通过分布式计算可以在多台计算机上平衡计算负载, 3、可以把程序放在最适合运行它的计算机上, 其中,共享稀有资源和平衡负载是计算机分布式计算的核心思想之一。 实际上,网格计算就是分布式计算的一种。如果我们说某项工作是分布式的,那么,参与这项工作的一定不只是一台计算机,而是一个计算机网络,显然这种“蚂蚁搬山”的方式将具有很强的数据处理能力。网格计算的实质就是组合与共享资源并确保系统安全。 ENGLISH: What is Distributed Computing? ( http://www.distributedcomputing.info ) Distributed computing is a science which solves a large problem by giving small parts of the problem to many computers to solve and then combining the solutions for the parts into a solution for the problem. Recent distributed computing projects have been designed to use the computers of hundreds of thousands of volunteers all over the world, via the Internet, to look for extra-terrestrial radio signals, to look for prime numbers so large that they have more than ten million digits, and to find more effective drugs to fight the AIDS virus. These projects are so large, and require so much computing power to solve, that they would be impossible for any one computer or person to solve in a reasonable amount of time. 所谓分布式就是指数据和程序可以不位于一个服务器上,而是分散到多个服务器,以网络上分散分布的地理信息数据及受其影响的数据库操作为研究对象的一种理论计算模型。分布式有利于任务在整个计算机系统上进行分配与优化,克服了传统集中式系统会导致中心主机资源紧张与响应瓶颈的缺陷,解决了网络GIS 中存在的数据异构、数据共享、运算复杂等问题,是地理信息系统技术的一大进步。 传统的集中式GIS 起码对两大类地理信息系统难以适用,需用分布式计算模型。第一类是大范围的专业地理信息系统、专题地理信息系统或区域地理信息系统。这些信息系统的时空数据来源、类型、结构多种多样,只有靠分布式才能实现数据资源共享和数据处理的分工合作。比如综合市政地下管网系统,自来水、燃气、污水的数据都分布在各自的管理机构,要对这些数据进行采集、编辑、入库、提取、分析等计算处理就必须采用分布式,让这些工作都在各自机构中进行,并建立各自的管理系统作为综合系统的子系统去完成管理工作。而传统的集中式提供不了这种工作上的必要性的分工。第二类是在一个范围内的综合信息管理系统。城市地理信息系统就是这种系统中一个很有代表性的例子。世界各国管理工作城市市政管理占很大比例,城市信息的分布特性及城市信息管理部门在地域上的分散性决定了多层次、多成份、多内容的城市信息必须采用分布式的处理模式。 很明显,传统的集中式地理信息系统不能满足分工明确的现代社会的需求,分布式地理信息系统的进一步发展具有不可阻挡的势头。而且,分布式GIS 与网络GIS 、客户/服务器GIS计算模型、WWW计算模型的关系都很密切。分布式GIS 是实现网络GIS 的途径,是实现NGIS的一种重要计算模型;CIS模型实际上是分布式GIS 可供采用的一种具体化计算模型;WWW模型实际上也是分布式GIS模型可采用的一种具体化模型,而且也是具有相当发展前途的分布式GIS模型。分布式 GIS 与当今主导地理信息系统发展方向的技术的紧密联系使分布式GIS相应地成为地理信息系统的主要发展趋势。
Ⅳ 分布式数据库相比自建数据库具备哪些优势
自建数据库:
容易产生容量与性能瓶颈
当前的硬件条件下,主流数据库可以支持单表千万级数据量的存储,但是难以支撑密集的并发读写,存在性能瓶颈。
分区分表或分库方案限制太多
采用分区表方案,数据不能跨实例存储,扩展性和维护性较差。
采用分库方案,客户端需要自行管理各库连接,数据库连接管理和升级复杂,扩容迁移困难。
服务器成本高昂
普通X86服务器支撑能力有限,品牌厂商的服务器价格高昂,通过增加硬件规格来提升并发性能的成本太高,且能到达的性能高度有限。
在分布式数据库面前,上面这些都不是问题,有很长厂商都已经把分布式数据库做的不错了,如阿里云,华为云等。
如下以我熟悉的华为云分布式数据库中间件DDM为例为你介绍下,如果感兴趣可以去官网了解一下,现在好像还有试用活动:华为云分布式数据库中间件DDM
分布式数据库:
数据分布存储
DDM采用水平拆分方式,将数据记录数庞大的单表,按指定的拆分规则,分布式存储到各个分片中。同时DDM提供路由分发功能,应用服务无需考虑数据该写入哪个分片,该从哪个分片读取。
读写分离
用户可以根据数据读取压力负载情况,为每个RDS实例配置一个或者多个只读实例,提高查询并发性能。
高性能
在实际业务访问中,SQL主要的性能瓶颈集中在物理数据库节点上。
DDM实例关联多个RDS节点,减少单个RDS存储的数据量,同时实现并行计算,支持PB级数据量访问,以及百万级高并发。
在线平滑扩容
DDM在不中断业务的情况下,支持新增RDS实例,水平扩容存储空间。一键式扩容,轻松解决单机数据库的容量瓶颈。
Ⅵ GreenPlum和Hadoop什么关系
GreenPlum采取的是PostgreSql框架,是PostgreSql系的重要应用。从这个角度上可以知道GreenPlum是关系型数据库。
Hadoop框架是一种分布式的平台设计理念。它本身不是数据库。其中Impala可以认为是一种非关系型的数据库,
Hive相当于SQL。
分布式,是多个方面的,最主要是存储方面。GreenPlum的分布式主要体现在多个机器文件存储,授权等方面。而Hadoop的文件管理方面,也是分布式的,因为只有分布式的部署才能最大效力的发回Hadoop的功能。
因此可以认为GreenPlum和Hadoop没有直接关系。
Ⅶ 使用分布式数据库有什么优势
华为云、阿里云、腾讯云都推出了分布式数据库服务。
无限扩容
自动水平拆分。
支持字符串、数字、日期等多种拆纬度。
业务不中断平滑扩容。
性能卓越
性能通过水平扩展可线性提升。
简单易用
兼容MYSQL 协议、语法、客户端。
轻松数据导入,数据库上云。
一键实现数据库扩容。
业务零代码改动,实现读写分离。
快速部署
可在线快速部署实例,节省采购、部署、配置等自建数据库工作,缩短项目周期,帮助业务快速上线。
低成本
稳定的产品,完善的运维和技术支持,相比开源产品总体性价比更高;多种实例规格配置覆盖不同业务规模场景,按需购买。
单机数据库容易产生容量与性能瓶颈
当前的硬件条件下,主流数据库可以支持单表千万级数据量的存储,但是难以支撑密集的并发读写,存在性能瓶颈。
传统的分区分表或分库方案限制太多
采用分区表方案,数据不能跨实例存储,扩展性和维护性较差。
采用分库方案,客户端需要自行管理各库连接,数据库连接管理和升级复杂,扩容迁移困难。
单机数据库服务器成本高昂
普通X86服务器支撑能力有限,品牌厂商的服务器价格高昂,通过增加硬件规格来提升并发性能的成本太高,且能到达的性能高度有限。
数据分布存储
DDM采用水平拆分方式,将数据记录数庞大的单表,按指定的拆分规则,分布式存储到各个分片中。同时DDM提供路由分发功能,应用服务无需考虑数据该写入哪个分片,该从哪个分片读取。
读写分离
用户可以根据数据读取压力负载情况,为每个RDS实例配置一个或者多个只读实例,提高查询并发性能。
高性能
在实际业务访问中,SQL主要的性能瓶颈集中在物理数据库节点上。
DDM实例关联多个RDS节点,减少单个RDS存储的数据量,同时实现并行计算,支持PB级数据量访问,以及百万级高并发。
在线平滑扩容
DDM在不中断业务的情况下,支持新增RDS实例,水平扩容存储空间。一键式扩容,轻松解决单机数据库的容量瓶颈。
单机数据库的现状与困境
随着互联网飞速发展,企业数据越来越庞大,应用对性能要求也越来越高。单机数据库对大批量数据的处理存在一定的局限性:
DDM轻松应对海量数据与高并发
DDM解决了单机关系型数据库对硬件依赖性强、扩展能力有限、数据量增大后扩容困难、数据库响应变慢等难题,通过分布式集群架构方案实现了“平滑扩容”,扩容过程中保持业务不中断。
Ⅷ 分布式数据库与数据库集群的区别到底是什么哪位高手帮忙解惑下~~~~~~~~~~跪求
(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是自己有相应的机制实现的。
Ⅸ 分布式数据库与并行数据库有什么区别
(1) 应用目标不同。并行数据库系统的目标是充分发挥并行计算机的优势,利用系统中的各个处理机结点并行完成数据库任务,提高数据库系统的整体性能。分布式数据库系统主要目的在于实现场地自治和数据的全局透明共享,而不要求利用网络中的各个结点来提高系统处理性能。
(2) 实现方式不同。在具体实现方法上,并行数据库系统与分布式数据库系统也有着较大的不同。在并行数据库系统中,为了充分利用各个结点的处理能力,各结点间可以采用高速网络连接。结点键的数据传输代价相对较低,当某些结点处于空闲状态时,可以将工作负载过大的结点上的部分任务通过高速网传送给空闲结点处理,从而实现系统的负载平衡。
但是在分布式数据库系统中,为了适应应用的需要,满足部门分布特点的需要,各结点间一般采用局域网或广域网相连,网络带宽较低,颠倒点的通信开销较大。因此,在查询处理时一般应尽量减少结点间的数据传输量。
(3) 各结点的地位不同。在并行数据库系统中,各结点是完全非独立的,不存在全局应用和局部应用的概念,在数据处理中只能发挥协同作用,而不能有局部应用。在分布式数据库系统中,各结点除了能通过网络协同完成全局事务外,各结点具有场地自治性,每个场地使独立的数据库系统。每个场地有自己的数据库、客户、CPU等资源,运行自己的DBMS,执行局部应用,具有高度的自治性。