高可用性定义为系统继续不连续地口头其性能的才干,是权衡系统可用性的关键目的之一。这一律念的外围在于成功“无终止”运转,但这正是其成功环节中的关键应战。由于无论配件还是软件都难以防止出现缺点——配件或许会遭逢缺点和老化,软件或许存在bug且随着时期推移变得愈加复杂和宏大。此外,外部要素如断电、人造灾祸等也或许造成系统服务终止,这些要素往往无法预测且难以控制。
因此,成功系统的高可用性通常依赖于“冗余”的概念。简而言之,假设一台主机无余以保证服务的继续性,那么就经常使用两台,假设两台还不够,那么就参与到四台,以此类推。关于或许出现的断电状况,可以在多个天文位置部署主机。假设担忧网络通道的不稳固,可以同时经常使用多个网络服务提供商。虽然从外表上看,无论是为了优化性能还是成功高可用性,处置打算仿佛都是参与更多的机器,但二者的目的齐全不同:优化性能的目的是“裁减”系统的处置才干,而成功高可用性的目的则是经过参与“冗余”单元来确保服务的延续性和稳固性。
这里的“计算”指的是业务的逻辑处置。计算有一个特点就是无论在哪台机器上启动计算,雷同的算法和输入数据,产出的结果都是一样的,所以将计算从一台机器迁徙到另外一台机器,对业务并没有什么影响。既然如此,计算高可用的复杂度体如今哪里呢?我以最繁难的单机变双机为例启动剖析。先来看一个单机变双机的繁难架构示用意:
你或许会留意到,提到的双机架构与咱们之前在“高性能”主题中讨论的架构十分相似,因此它们的复杂性也有所相似。详细来说:
虽然上述讨论的只是一个基础的双机架构,咱们还可以进一步讨论更为复杂的高可用集群架构。与繁难的双机设置相比,高可用集群在调配算法上更为复杂,性能方式包含但不限于1主3备、2主2备、3主1备、到4主0备等不同组合。选用哪种性能打算,需依据实践业务需求启动剖析和判别,由于并没有一种算法能够相对胜出。例如,ZooKeeper就驳回了1主多备的形式,而Memcached则是驳回了全主0备的战略。
在设计须要数据存储的系统时,确保留储的高可用性成为整个系统设计的关键和应战所在。与计算义务不同,存储义务的一个基本区别在于数据须要经过网络线路从一台机器传输到另一台机器。这种传输的速度遭到物理限度,即使是在同一个机房内,传输速度也或许只要几毫秒,而超越不同地区的机房,传输延时则或许增至数十甚至上百毫秒。例如,从广州到北京的机房之间,稳固时的网络提前大概是50毫秒,但在不稳固的网络环境下,提前或许会参与到1秒甚至更长。
为了处置这一疑问,系统设计中通常会参与义务调配器,其选用依赖于多种要素,包含性能、老本、可保养性和可用性等。义务调配器不只须要处置与业务主机之间的衔接和交互,还需选取适宜的衔接方式,并妥善治理这些衔接,如衔接的树立、检测和断开后的处置战略。
此外,义务调配器还需装备高效的调配算法,如主备、双主等形式,其中主备形式又可以细分为冷备、温备和热备等。虽然关于人类来说,毫秒级的时期差异简直觉得不到,但关于谋求高可用的系统而言,这种时期差象征着数据的刹时不分歧性,这对系统的全体业务有着基本色的影响。
举个例子,银行储蓄业务中,假设客户在北京机房存入金额,而此时数据尚未同步至上海机房,当客户查问余额时或许会发现新存入的金额未能显示,形成用户疑虑,这种体验对客户而言极为不佳。他们或许会担忧自己的资金安保,甚至或许造成客户揭发或报警。即使最终确认疑问仅由于数据同步的提前,对用户而言,这段教训的体验仍是负面的。
除了物理传输速度的限度,网络线路的牢靠性也是一个关键思考要素。线路或许会遇到终止、拥挤或意外状况(如数据失误、失落),并且这些疑问的修复时期或许长达数小时。以往的意外中,如2年支付宝因光缆被挖断而业务受影响超越4小时,2016年中美之间的海底光缆断裂造成通讯终止3小时,都是典型例子。这些线路疑问象征着数据同步或许会被临时终止,从而造成系统在一段时期内数据不分歧。
从更广的视角来看,不论是在反常状况下的传输提前,还是意外状况下的传输终止,都或许造成系统在某一时期点或时期段内数据不分歧,进而引发业务疑问。但是,假设不启动数据的冗余备份,又无法保证系统的高可用性。因此,设计存储高可用系统的应战不在于数据的备份自身,而在于如何缩小或规避数据不分歧对业务的影响。
在散布式系统畛域,有一个驰名的CAP定理,通常上证实了存储高可用的复杂性。CAP定理指出,一个散布式系统无法能同时满足分歧性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个需求,最多只能满足其中两项。这就象征着在架构设计时,须要依据业务需求做出相应的权衡和选用。
无论是成功计算的高可用还是存储的高可用,其外围都在于“形态决策”——系统必定能够识别形态是反常还是有缺点的,并且在检测到缺点时采取措施以坚持高可用。但是,假设形态的决策环节存在误差或失误,那么接上去的一切优化措施都将失去成果和价值。在实践操作中,存在一个基本的应战:依赖冗余机制来提高系统可用性的同时,简直无法成功相对准确的形态决策。接上去,咱们将经过剖析几种罕用的决策方法来深化讨论这一疑问。
在讨论如何确保计算和存储的高可用性时,咱们不得不关注“形态决策”的关键性——即系统是否正确判别其形态为反常或意外,并在发现意外时采取相应措施以维持高可用性。疑问在于,假设形态判别环节自身存在误差或失误,则之后的一切优化和处置措施均会失去其意义。在通常中,这外面暗藏着一个基本的矛盾:虽然经过参与冗余来提高系统的可用性,但在形态决策方面却难以保证其相对的准确性。为了进一步了解这一应战,咱们将对几种关键的决策方式启动详尽的剖析。
协商式决策指的是两个独立的集体经过交流消息,而后依据规定启动决策,最罕用的协商式决策就是主备决策。
这个架构的基本协商规定可以设计成:
协商式决策的架构不复杂,规定也不复杂,其难点在于,假设两者的消息替换出现疑问(比如主备衔接终止),此时形态决策应该怎样做。
综合剖析,协商式形态决策在某些场景总是存在一些疑问的。
2 台主机启动时都是备机。
2 台主机树立衔接。
2 台主机替换形态消息。
某 1 台主机做出决策,成为主机;另一台主机继续坚持备机身份。
假设备机在衔接终止的状况下以为主机缺点,那么备机须要更新为主机,但实践上此时主机并没有缺点,那么系统就出现了两个主机,这与设计初衷(1 主 1 备)是不合乎的。
假设备机在衔接终止的状况下以为主机缺点,那么备机须要更新为主机,但实践上此时主机并没有缺点,那么系统就出现了两个主机,这与设计初衷(1 主 1 备)是不合乎的。
为了缓解衔接终止对形态决策的负面影响,一种方法是参与多条衔接,比如经常使用双衔接或三衔接战略。这种做法确实可以缩小繁多衔接缺点时对系统形态判别的影响,但是,它并不能齐全消弭疑问,而且引入了新的应战:当不同衔接传递的消息出现差异时,系统应该依据哪条衔接的消息启动决策呢?实践上,这个疑问并没有一个一刀切的处置打算。选用任一衔接作为决策依据,在某些特定状况下总会遇到艰巨和应战。
综合剖析,协商式形态决策在某些场景总是存在一些疑问的。
专制式决策环节触及到多个独立实体经过投票机制独特启动形态的判别。这种方式在ZooKeeper集群当选举指导者时获取了运行。
经过这种方法,集群中的每个成员都介入到指导者的选举中,最终依据投票结果选择指导者。
虽然这种决策机制在算法上较为复杂,它自身也带有一个实质上的疑问,即“脑裂”现象。这一术语源自于医学畛域,形容的是左右大脑半球衔接断裂,造成无法相互替换消息,从而区分控制身材做出不同或相互矛盾的行为。在散布式系统中,脑裂指的是原本一致的集群因网络宰割成两个独立的子集群,每个子集群都会独立启动指导者选举,结果或许出现两个不同的指导者,相似于一集体系内存在两个“大脑”。专制式决策指的是多个独立的集体经过投票的方式来启动形态决策。例如,ZooKeeper 集。
在一个现实的散布式系统设置中,通常会有一个节点被选举为主节点,而其余节点则充任备份角色。假定在一个反常运转的环境里,节点5是主节点,其余节点则作为备份。但当网络缺点造成节点间衔接断开时,或许会出现节点1、2、3构成一个独立的子集群,而节点4和5构成另一个子集群,这两个子集群由于衔接断开而无法相互通讯。依据专制式决策机制,这两个子集群或许会区分选举出自己的主节点,比如节点2和节点5,这样系统就会同时存在两个主节点。
这种多主节点的形态与系统的设计初衷相违反,由于每个主节点都会独立作出决策,造成系统形态变得凌乱。为了防止这种脑裂现象的出现,驳回专制式决策的系统通常实施一项规定:介入投票的节点数必定超越系统总节点数的一半。在上述示例中,由于节点4和节点5组成的子集群总节点数无余系统总数的一半,因此不会启动选举,从而防止了脑裂疑问。但是,这种做法虽然能够预防脑裂,却也或许降落系统的全体可用性。例如,假设节点1、2、3的缺点并非由脑裂惹起,而是实在的缺点,这时即使节点4和5依然肥壮,系统也无法选举出新的主节点,相当于整个系统中止服务,虽然有局部节点依然处于反常形态。
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8600.html