Java开发分布式系统特点设计与原理分析

  • 日期:07-15
  • 点击:(1129)

澳门金沙银河官网

引言

分布式系统是建立在网络之上的软件系统。处理协助任务,然后整合结果。

分布式系统的最大特点之一是其可扩展性,可以适应不断变化的需求。

企业应用程序需求通常会随着时间的推移而变化,这对企业应用程序平企业级应用程序平台必须能够适应需求的变化,即它们是可扩展的。例如,移动互联网2C应用,随着互联网公司的业务规模不断增加,服务变得越来越复杂,并发用户请求越来越多,并且正在处理更多数据。此时,企业级应用程序平台必须能够适应这些变化并支持高并发访问和海量数据处理。分布式系统具有良好的可扩展性,可以通过增加服务器数量来增加分布式系统的整体处理能力,以应对企业业务增长带来的计算需求。

分布式系统的核心概念是允许多个服务器协同工作以完成单个服务器无法处理的任务,尤其是对于高并发或大容量任务。

分布式系统由松散耦合的独立服务器网络组成。每台服务器都是一台独立的PC,服务器通过内部网络连接。内部网络速度通常更快。由于分布式集群中的服务器通过内部网络松散耦合,并且节点之间的通信具有一定的网络开销,因此分布式系统旨在最小化节点之间的通信。另外,由于网络传输瓶颈,单个节点的性能对分布式系统的整体性能影响不大。例如,对于分布式应用程序,与网络开销相比,由不同编程语言带来的各个应用程序服务的性能差异可以忽略不计。因此,分布式系统的每个节点通常不使用高性能服务器,而是使用性能相对较好的通用PC服务器。提高分布式系统的整体性能是通过横向扩展(添加更多服务器)而不是扩展(提高每个节点的服务器性能)。

双向分布式系统的最大特点是它既便宜又高效。

一组低成本的PC服务器在性能方面可以达到或超过大型机的处理性能,成本远低于大型机。这也是分布式系统中最具吸引力的。在硬件可靠性方面,低成本的PC服务器远比大型机便宜。因此,分布式系统对硬件具有软件容忍性,并且软件确保整个系统的高可靠性。

三义分布式系统的最大好处是可以灵活扩展企业应用服务层。

应用服务级别的弹性扩展与计算资源级别的弹性扩展有关。通常,公共云服务(IaaS)供应商在计算资源级别提供灵活的扩展。例如,添加或删除虚拟主机,改进或减少虚拟主机的性能配置等都很方便。但是,企业客户真正需要的是灵活扩展应用程序服务级别。也就是说,随着业务量的波动,后台应用程序服务的实例可以动态地改变,这对于IaaS供应商来说是不可能的。例如,移动互联网短视频共享应用程序是从上午11:00到凌晨1:00的访问高峰,在线用户数量是数十万。此时,后台应用程序服务应扩展到数千个实例,以应对如此高的并发访问请求。在高峰时段之后,后台应用程序服务可以缩减到几十个实例。使用分布式系统,可以非常方便地安排数十到数百甚至数千的应用服务实例,以真正实现应用服务的灵活扩展。

四路分布式系统的设计理念

上面简要介绍了分布式系统的基本情况。以下是作者理解的几个分布式系统设计概念的详细描述:

分布式系统具有非常低的服务器硬件要求

这主要归功于以下两个方面:

服务器硬件可靠性不需要任何要求,允许服务器硬件发生故障,硬件故障可由软件容错。因此,软件可以保证分布式系统的高可靠性;

对服务器的性能没有要求。不需要高频CPU,大容量存储器,高能量存储器等。由于分布式系统的性能瓶颈在于节点间通信引起的网络开销,单个服务器硬件的性能良好,还必须等待网络IO。

通常,互联网公司的大型数据中心使用大量廉价的PC服务器而不是几台高性能服务器来构建分布式集群,以降低数据中心成本。例如,Google对数据中心的成本控制是最终的:所有服务器都不是机箱;主板是完全定制的,只要最基本的组件,早期定制主板没有连接电源开关和USB接口;在主板上安装隔离带CPU是分开的,因此冷空气只会吹CPU,不会吹掉不需要冷却的组件,如内存和硬盘,并最大限度地降低冷却功耗。

武夷分布式系统强调水平可扩展性

Scale Out是指通过增加服务器数量来提高群集的整体性能。向上扩展是指提高每台服务器的性能,以提高群集的整体性能。垂直可扩展性的上限非常明显。单个服务器的性能无法无限提升,与服务器性能相比,网络开销是分布式系统的最大瓶颈。水平可伸缩性的上限空间相对较大,群集总是可以轻松添加服务器。此外,分布式系统将确保水平扩展将使集群的整体性能(准)线性增加。例如,如果存在10个服务器的集群并且可以扩展到同一服务器的100个集群,则整个分布式系统性能将增加到10倍。

在因特网公司的数据中心中,分布式系统的水平扩展的上限通常约为10,000个服务器。 Google数据中心的基本单元CELL由大约20,000台服务器组成。每个CELL由分布式管理系统BORG管理,每个数据中心由多个CELL组成。

分布式系统不允许单点故障(无单点故障)

单点故障意味着只有一个应用程序服务实例在服务器上运行。一旦服务器被挂起,应用程序服务就会受到影响并挂起,从而导致整个服务不可用。例如,如果网站后台仅在一台服务器上运行,则一旦服务器关闭,网站服务将受到影响且不可用。再举一个例子,如果一台服务器上存在所有数据,一旦服务器坏了,所有数据都不可访问。

由于分布式系统的服务器是廉价的PC服务器,硬件不能保证100%的可靠性,因此分布式系统默认每个服务器可能随时挂起。同时,分布式系统必须提供高度可靠的服务,并且不允许单点故障。因此,在分布式系统中运行的每个应用程序服务都有多个运行实例在多个节点上运行,每个节点都有多个数据点。备份存在于不同的节点上。这样,当多个节点同时发生故障时,大大减少了应用服务的所有实例被挂起或某个数据点的多个备份不可读的可能性,从而有效地防止了单点故障。

通常,不要让服务器满负荷运行。如果服务器长时间满负荷运行,则故障概率会显着增加。因此,分布式系统使用大量低性能和中等性能的PC服务器,并尽可能地将负载分配给所有服务器,这样每个服务器的负载都不高,集群的整体稳定性也是如此。保证。

分布式系统最小化节点之间的通信开销

如前所述,分布式系统的整体性能瓶颈是内部网络开销。目前,网络传输速度跟不上CPU读取内存或硬盘的速度,减少了网络通信开销,CPU可以处理内存数据或本地数据硬盘尽可能多,这可以显着提高分布式系统的性能。一个典型的例子是Hadoop MapReduce,它将计算任务分配给正在处理数据的节点,从而避免通过网络传输数据。

分布式系统应用程序服务最好是无状态的

应用程序服务的状态是运行时程序在内存中具有的数据,因为它处理服务请求。分布式应用程序服务最好设计为无状态。因为如果应用程序是有状态的,一旦服务器停机导致应用程序服务程序受到影响并挂起,则内存数据将丢失,这显然不是高度可靠的服务。将应用服务设计为无状态,让程序将需要保存的数据保存在特殊存储器上,使应用服务程序可以重启而不丢失数据,方便分布式系统恢复应用服务。服务器已关闭。

例如,在设计网站的背景时,对于用户登录请求,登录用户的会话相关信息可以保存在Redis或Memcache等缓存服务中,这样每个网站的后台实例都不会保存用户登录状态,即使网站重启,程序也不会丢失用户的登录状态信息;如果用户的会话相关信息存储在网站守护进程的内存中,一旦用户登录的网站守护进程实例被挂起,用户的登录状态信息就会丢失。

总而言之,分布式系统是大数据时代企业级应用程序的首选平台。它具有良好的可扩展性,特别是横向扩展,使分布式系统非常灵活,能够响应不断变化的企业级需求。此外,减少了企业硬件对服务器硬件的要求,并且可以真正实现应用服务层的自动缩放。

六一分布式系统的原理:

1.散列模式,散列不同的值,映射到不同的机器或节点。在考虑冗余时,可以将多个哈希值映射到同一位置。哈希的实现,其余的。当它扩展时,它更难。数据分散在许多机器上,并且在扩展时从机器获取数据。而且很容易出现分配不常见的情况。

使用IP,URL,ID或固定值进行散列的常见哈希值始终会得到相同的结果。

2.根据数据范围分布,例如,机器A上的ID为1~20,机器B上的ID为21~40,机器C上的ID为40~60,ID为60~100。机器D.在顶部,数据分布相对均匀。如果节点的处理能力有限,则可以直接拆分节点。维护数据分发的元信息可能会带来单点瓶颈。成千上万的机器,每个机器被分成N个范围,导致要维护的数据的数据分布范围太大,这可能需要几台机器来实现。

确保严格控制元数据量,并可能减少元数据的存储。

3.根据数据量的分布,另一种常见的数据分布类型是根据数据量分配数据。与散列模式和数据范围模式不同,数据卷分布数据独立于特定数据特征,但是数据被视为顺序增长的文件,并且根据相对固定的大小将文件分成若干数据块。 (块),不同的数据块被分发到不同的服务器。与数据按数据范围分布的方式类似,按数据量分发数据还需要记录数据块的特定分布,并使用元数据服务器将分发信息作为元数据进行管理。

由于无论特定数据内容如何都分布数据,因此通常不存在数据偏斜的问题,并且数据总是被均匀地分段并分发到集群。当需要重新加载集群时,只需迁移数据块即可完成。群集扩展没有太多限制。您只需将一些数据库迁移到新添加的计算机即可完成扩展。按数据量划分数据的缺点是需要管理更复杂的元信息,类似于按范围分布数据的方式。当簇大小较大时,元信息数据量变大,并且元信息的有效管理变为新的。题。

4.一致哈希,构造一个哈希循环,带一个哈希字段[0,10],构造3个部分,[1,4]/[4,9)/[9,10),[0,1)/它是分为三个部分。这三个部分都是一个戒指。添加机器后,附近的节点会发生变化,并且会共享附近节点的压力。元数据的维护与数据的分发相同。它的未来扩展可以实现多个所需节点。

5.构建映射元数据以及如何创建映射表。

6.副本和数据分发,跨多个服务器的数据副本。例如,应用程序A的数据存储在A,B,C和3机器上。如果三台机器中的一台出现问题,请求将被处理到其他两台机器。如果机器恢复,则需要在2台机器上,复制数据增加了这两台机器的负担。如果我们有应用程序A和应用程序B,每个有3台机器,那么我们可以在6台机器上传播A应用程序,而B应用程序分布在6台机器上,这可以实现相同的数据备份,但应用程序存储数据。被驱散了。机器损坏,但机器上的负载均匀分布到其他五台机器上。恢复数据从5台机器中恢复,速度快,每台服务器上的压力不大,可以实现机器的损坏,更换根本不会影响应用程序。

原理是多台机器是相互复制的,这是实现负载分压的理想方式。

7.分布式计算思维,移动数据不像移动计算,它是一种计算原理,减少了跨进程,跨网络和其他跨度的实现,并且计算所需的资源尽可能接近。因为网络和远程计算机可能存在瓶颈。

8.常用的分布式系统数据分配方法: GFS,HDFS:根据数据量分布;根据GFS数据分布对Map reduce进行本地化; BigTable和HBase根据数据范围分布;可根据散列模式或数据范围分布选择核桃; Dynamo Cassndra因一致性而受到影响; Mola,Armor和BigPipe都是哈希;多丽丝是数据量的混合和组合。

三,数据复制协议

1.副本必须满足某些可用性和一致性要求,特定的容错能力,并且即使存在某些问题也能提供可靠的服务。

2.两种基本复制控制协议的数据复制,集中和分散的基本协议。

3.集中式复制控制协议的基本思想是协调副本数据的更新,并通过中央节点维护副本之间的一致性。集中式复制控制协议的优点是协议相对简单,并且所有与复制相关的控制都由中央节点切换。并发控制将由中央节点完成,这将分布式并发控制问题简化为单并发并发控制问题。控制问题并将它们简化为单机并发控制问题。所谓的并发控制,即当多个节点需要同时修改副本数据时,有必要解决诸如“写入”和“读写”之类的并发冲突。并发控制通常在单个系统上执行。对于分布式并发控制,锁定也是一种常用方法,但如果没有中央节点统一锁管理,则需要完全分布式锁定系统,这使得协议非常复杂。集中式复制控制协议的缺点是系统的可用性取决于集中式节点。当中心节点异常或与中心节点的通信中断时,系统将丢失一些服务(通常至少丢失更新服务),因此集中式复制控制协议的缺点是存在一定量的停机时间。也就是说,存在单点问题,即使集中式节点是集群,它也只是一个重点。

4.副本数据同步的常见问题,1)网络异常,导致副本无法获取数据; 2)数据脏读,主节点数据已更新,但由于某种原因,未获得最新数据; 3)添加新节点没有得到主节点数据,而在读取数据时从新节点读取数据,没有得到数据。

5.分散式复制控制协议没有中心节点,协议中的所有节点都是完全点对点的,节点通过平等协商达成协议。因此,分散协议不存在诸如由于集中式节点的异常导致的服务暂停的问题。然而,没有什么是完美的。分散协议的最大缺点是协议过程通常更复杂。特别是当分散协议需要实现强一致性时,协议流程变得复杂且不易理解。由于过程的复杂性,分散式协议效率较低且效率较低。

6. Paxos是唯一一种用于工程的强大一致的分散式复制控制协议。 ZooKeeper和Chubby是该协议的应用程序。

Zookeeper使用Paxos协议选择Leader并使用Lease协议来控制数据是否有效。使用Quorum协议同步Leader数据。

Zeekeeper,在实现Quorum写入时,如果没有完整的写入成功,所有后续机器都会向后向搜索引擎写入数据。在写入数据之后,如果首先写入失败的数据,则再次跟随数据与领导者同步,这是一致的。您跟随同步原始数据,相对于回滚;如果最新数据首先写入Leader是为了完成最新的数据更新。

7. Megastore使用改进的Paxos协议。

8. Dynamo/Cassandra使用基于一致散列的分散协议。 Dynamo使用Quorum机制来管理副本。

9.租赁机制是最重要的分布式协议,广泛用于各种实际的分布式系统。 1)租赁通常定义为:发行人在一定时间内给予持有人某些权利的协议。 2)租赁表明发行人在一定时期内的承诺,只要到期的发行人必须严格遵守租赁协议的承诺; 3)租赁的持有人在期限内使用发行人的承诺,但租约到期后必须放弃。或者与发行人续签续约。 4)影响。中央服务器发送的租约的含义是:在租约的有效期内,中央服务器保证不修改相应数据的值。 5)租赁证书可被视为版本号,时间过长或固定时间点无效。

原理与我们的Cache相同,例如浏览器缓存是一致的。它需要时钟同步,因为数据完全取决于截止日期。

10.心跳检测不可靠。如果检测到检测和Q,则检测机器A.检测可以由Q启动,但A的响应被阻止,导致Q认为A已关闭,阻塞快速恢复,并且检测基于心跳检测。判决是不可靠的;可能是它们之间的网络断开了;或者Q机本身的异常可能导致A机器故障;如果它是基于Q的检测结果,则判断可能发生多个主机。

11. Write-all-read-one(WARO)是最简单的复制控制规则之一。顾名思义,更新时会写入所有副本。只有成功更新了所有副本,才会认为更新成功,从而确保所有副本。一致,因此您可以在读取数据时读取任何副本上的数据。写下多个副本并从其中一个中读取。

12.仲裁协议实际上是成功读取的副本数大于失败副本的数量。您阅读的副本必须包含最新副本。

13. Mola *和Armor *系统中的所有副本管理都基于Quorum,这意味着如果数据在大多数副本上成功更新,则认为数据成功。

14. Big Pipe *中的副本管理也使用WARO机制。

问题及其优化总结,与大家分享,感觉如果你收获,你可以关注收集和转发浪潮,谢谢你的支持!

最后,每位读到这里的网友都感谢您的耐心等待。我希望在成为更好的Java程序员的道路上,我们可以一起学习,共同进步!可以赢得白福美,走到建筑师生命的巅峰!

高级地址:

想了解学习Java的技术内容和Java技术视频的内容可以添加组:722040762(06必须通过)欢迎大家加入!

1c14b67b-4557-452a-ada3-aaf15c838bc3