当前位置: > 投稿>正文

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

01-25 互联网 未知 投稿

关于【系统稳定性的判断方法】,系统稳定性的判断方法 单位圆,今天涌涌小编给您分享一下,如果对您有所帮助别忘了关注本站哦。

1、【软考】2022系统架构考点扫盲之一致性哈希算法

出处:(2022年,案例分析,试题四,问题2)

随着业务的发展,仓储中心以及商品的数量日益增加,需要对集群部署多个缓存节点,提高缓存的处理能力。李工建议采用缓存分片方法,把缓存的数据拆分到多个节点分别存储,减轻单个缓存节点的访问压力,达到分流效果。缓存分片方法常用的有哈希算法和一致性哈希算法,李工建议采用一致性哈希算法来进行分片。请用200字以内的文字简要说明两种算法的基本原理,并说明李工采用一致性哈希算法的原因。

参考答案

哈希算法通过某种哈希算法散列得到一个值,按该值将数据分配到集群响应节点进行缓存。

一致性哈希算法将整个哈希值空间映射成一个按顺时针方向组织的虚拟圆环,使用哈希算法算出数据哈希值,然后根据哈希值的位置沿圆环顺时针查找,将数据分配到第一个遇到的集群节点进行缓存。

一致性哈希算法有两大优点:

1)可扩展性。一致性哈希算法保证了增加或减少服务器时,数据存储的该变量少,相比传统哈希算法大大节省了数据移动的开销。

2)更好地适应数据的快速增长。

知识拓展

以下内容转载自:
https://mp.weixin.qq.com/s/hJHMlbQpANwMjx9BetwkUg

一致性哈希算法详解

1. 如何分配请求

大多数网站背后肯定不是只有一台服务器提供服务,因为单机的并发量和数据量都是有限的,所以都会用多台服务器构成集群来对外提供服务。

现在有那么多个节点,要如何分配客户端的请求呢?

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

其实这个问题就是「负载均衡问题」。解决负载均衡问题的算法很多,不同的负载均衡算法,对应的就是不同的分配策略,适应的业务场景也不同。

最简单的方式,引入一个中间的负载均衡层,让它将外界的请求「轮流」的转发给内部的集群。比如集群有 3 个节点,外界请求有 3 个,那么每个节点都会处理 1 个请求,达到了分配请求的目的。

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

考虑到每个节点的硬件配置有所区别,我们可以引入权重值,将硬件配置更好的节点的权重值设高,然后根据各个节点的权重值,按照一定比重分配在不同的节点上,让硬件配置更好的节点承担更多的请求,这种算法叫做加权轮询。

加权轮询算法使用场景是建立在每个节点存储的数据都是相同的前提。所以,每次读数据的请求,访问任意一个节点都能得到结果。

但是,加权轮询算法是无法应对「分布式系统」的,因为分布式系统中,每个节点存储的数据是不同的。

当我们想提高系统的容量,就会将数据水平切分到不同的节点来存储,也就是将数据分布到了不同的节点。比如一个分布式 KV(key-valu) 缓存系统,某个 key 应该到哪个或者哪些节点上获得,应该是确定的,不是说任意访问一个节点都可以得到缓存结果的。

因此,我们需要一个能应对分布式系统的负载均衡算法。

2. 使用哈希算法有什么问题?

对同一个关键字进行哈希计算,每次计算都是相同的值,这样就可以将某个 key 确定到一个节点了,可以满足分布式系统的负载均衡需求。

哈希算法最简单的做法就是进行取模运算,比如分布式系统中有 3 个节点,基于 hash(key) % 3公式对数据进行了映射。

如果客户端要获取指定 key 的数据,通过下面的公式可以定位节点:

hash(key) % 3

如果经过上面这个公式计算后得到的值是 0,就说明该 key 需要去第一个节点获取。

但是有一个很致命的问题,如果节点数量发生了变化,也就是在对系统做扩容或者缩容时,必须迁移改变了映射关系的数据,否则会出现查询不到数据的问题。

举个例子,假设有一个由 A、B、C 三个节点组成分布式 KV 缓存系统,基于计算公式 hash(key) % 3将数据进行了映射,每个节点存储了不同的数据:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

现在有 3 个查询 key 的请求,分别查询 key-01,key-02,key-03 的数据,这三个 key 分别经过 hash() 函数计算后的值为 hash( key-01) = 6、hash( key-02) = 7、hash(key-03) = 8,然后再对这些值进行取模运算。

通过这样的哈希算法,每个 key 都可以定位到对应的节点。

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

当 3 个节点不能满足业务需求了,这时增加了一个节点,节点的数量从 3 变化为 4,意味取模哈希函数中基数的变化,这样会导致大部分映射关系改变,如下图:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

比如,之前的 hash(key-01) % 3 = 0,就变成了 hash(key-01) % 4 = 2,查询 key-01 数据时,寻址到了节点 C,而 key-01 的数据是存储在节点 A 上的,不是在节点 C,所以会查询不到数据。

同样的道理,如果我们对分布式系统进行缩容,比如移除一个节点,也会因为取模哈希函数中基数的变化,可能出现查询不到数据的问题。

要解决这个问题的办法,就需要我们进行迁移数据,比如节点的数量从 3 变化为 4 时,要基于新的计算公式 hash(key) % 4 ,重新对数据和节点做映射。

假设总数据条数为 M,哈希算法在面对节点数量变化时,最坏情况下所有数据都需要迁移,所以它的数据迁移规模是 O(M),这样数据的迁移成本太高了。

所以,我们应该要重新想一个新的算法,来避免分布式系统在扩容或者缩容时,发生过多的数据迁移。

3. 使用一致性哈希算法有什么问题

一致性哈希算法就很好地解决了分布式系统在扩容或者缩容时,发生过多的数据迁移的问题。

一致哈希算法也用了取模运算,但与哈希算法不同的是,哈希算法是对节点的数量进行取模运算,而一致哈希算法是对 2^32 进行取模运算,是一个固定的值

我们可以把一致哈希算法是对 2^32 进行取模运算的结果值组织成一个圆环,就像钟表一样,钟表的圆可以理解成由 60 个点组成的圆,而此处我们把这个圆想象成由 2^32 个点组成的圆,这个圆环被称为哈希环,如下图:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

一致性哈希要进行两步哈希:

  • 第一步:对存储节点进行哈希计算,也就是对存储节点做哈希映射,比如根据节点的 IP 地址进行哈希;
  • 第二步:当对数据进行存储或访问时,对数据进行哈希映射;

所以,一致性哈希是指将「存储节点」和「数据」都映射到一个首尾相连的哈希环上

问题来了,对「数据」进行哈希映射得到一个结果要怎么找到存储该数据的节点呢?

答案是,映射的结果值往顺时针的方向的找到第一个节点,就是存储该数据的节点。

举个例子,有 3 个节点经过哈希计算,映射到了如下图的位置:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

接着,对要查询的 key-01 进行哈希计算,确定此 key-01 映射在哈希环的位置,然后从这个位置往顺时针的方向找到第一个节点,就是存储该 key-01 数据的节点。

比如,下图中的 key-01 映射的位置,往顺时针的方向找到第一个节点就是节点 A。

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

所以,当需要对指定 key 的值进行读写的时候,要通过下面 2 步进行寻址:

  • 首先,对 key 进行哈希计算,确定此 key 在环上的位置;
  • 然后,从这个位置沿着顺时针方向走,遇到的第一节点就是存储 key 的节点。

知道了一致哈希寻址的方式,我们来看看,如果增加一个节点或者减少一个节点会发生大量的数据迁移吗?

假设节点数量从 3 增加到了 4,新的节点 D 经过哈希计算后映射到了下图中的位置:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

可以看到,key-01、key-03 都不受影响,只有 key-02 需要被迁移节点 D。

假设节点数量从 3 减少到了 2,比如将节点 A 移除:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

可以看到,key-02 和 key-03 不会受到影响,只有 key-01 需要被迁移节点 B。

因此,在一致哈希算法中,如果增加或者移除一个节点,仅影响该节点在哈希环上顺时针相邻的后继节点,其它数据也不会受到影响

上面这些图中 3 个节点映射在哈希环还是比较分散的,所以看起来请求都会「均衡」到每个节点。

但是一致性哈希算法并不保证节点能够在哈希环上分布均匀,这样就会带来一个问题,会有大量的请求集中在一个节点上。

比如,下图中 3 个节点的映射位置都在哈希环的右半边:

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

这时候有一半以上的数据的寻址都会找节点 A,也就是访问请求主要集中的节点 A 上,这肯定不行的呀,说好的负载均衡呢,这种情况一点都不均衡。

另外,在这种节点分布不均匀的情况下,进行容灾与扩容时,哈希环上的相邻节点容易受到过大影响,容易发生雪崩式的连锁反应。

比如,上图中如果节点 A 被移除了,当节点 A 宕机后,根据一致性哈希算法的规则,其上数据应该全部迁移到相邻的节点 B 上,这样,节点 B 的数据量、访问量都会迅速增加很多倍,一旦新增的压力超过了节点 B 的处理能力上限,就会导致节点 B 崩溃,进而形成雪崩式的连锁反应。

所以,一致性哈希算法虽然减少了数据迁移量,但是存在节点分布不均匀的问题

4. 如何通过虚拟节点提高均衡度

要想解决节点能在哈希环上分配不均匀的问题,就是要有大量的节点,节点数越多,哈希环上的节点分布的就越均匀。

但问题是,实际中我们没有那么多节点。所以这个时候我们就加入虚拟节点,也就是对一个真实节点做多个副本。

具体做法是,不再将真实节点映射到哈希环上,而是将虚拟节点映射到哈希环上,并将虚拟节点映射到实际节点,所以这里有「两层」映射关系。

比如对每个节点分别设置 3 个虚拟节点:

  • 对节点 A 加上编号来作为虚拟节点:A-01、A-02、A-03
  • 对节点 B 加上编号来作为虚拟节点:B-01、B-02、B-03
  • 对节点 C 加上编号来作为虚拟节点:C-01、C-02、C-03

引入虚拟节点后,原本哈希环上只有 3 个节点的情况,就会变成有 9 个虚拟节点映射到哈希环上,哈希环上的节点数量多了 3 倍。

系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)

你可以看到,节点数量多了后,节点在哈希环上的分布就相对均匀了。这时候,如果有访问请求寻址到「A-01」这个虚拟节点,接着再通过「A-01」虚拟节点找到真实节点 A,这样请求就能访问到真实节点 A 了。

上面为了方便你理解,每个真实节点仅包含 3 个虚拟节点,这样能起到的均衡效果其实很有限。而在实际的工程中,虚拟节点的数量会大很多,比如 Nginx 的一致性哈希算法,每个权重为 1 的真实节点就含有160 个虚拟节点。

另外,虚拟节点除了会提高节点的均衡度,还会提高系统的稳定性。当节点变化时,会有不同的节点共同分担系统的变化,因此稳定性更高

比如,当某个节点被移除时,对应该节点的多个虚拟节点均会移除,而这些虚拟节点按顺时针方向的下一个虚拟节点,可能会对应不同的真实节点,即这些不同的真实节点共同分担了节点变化导致的压力。

而且,有了虚拟节点后,还可以为硬件配置更好的节点增加权重,比如对权重更高的节点增加更多的虚拟机节点即可。

因此,带虚拟节点的一致性哈希方法不仅适合硬件配置不同的节点的场景,而且适合节点规模会发生变化的场景

2、系统稳定性的判断方法

系统稳定性的判断方法

系统的四个性质即线性、时不变性、因果性和稳定性都很重要。

对于连续系统和离散系统的判断,教材中的叙述如下:如果连续系统H(s)的极点都在s平面的左半开平面,离散系统H(z)的极点均在z平面的单位圆内,则该系统是稳定的因果系统。

如果系统函数是已知的,那么根据上面的方法,先求出系统函数的极点,然后根据极点的位置,就可以判断系统的稳定性,于是,问题最后归结为求解一元多次方程的根,即解方程。

吴大正的教材举出一些简单的例子,说明如何判断系统的稳定性,以及当满足系统的稳定性时,一些系统参数应该满足什么条件。但是,当方程是高次的,比如3次、4次等,如果不能进行因式分解而求出方程的根,那么应该怎么办呢?教材没有交代。另一本教材,也是我第一次自学这门课程时所采用的教材,即西电陈生潭等编著的《信号与系统》(第二版,西安电子科技大学出版社,2001年)则介绍了两个重要的准则,即罗斯-霍尔维茨(Routh-Hurwitz)准则和朱里(July)准则。

罗斯-霍尔维茨准则在传统的控制理论课程中都要讲授,它是判别代数方程根的实部特征的一种方法,可以不用解方程就知道方程包含多少个负实部的`根。

由于计算机技术的发展,现在用计算机求解高次方程已经很成熟了,因而罗斯-霍尔维茨准则和朱里准则的重要性逐渐降低,很多教材已经不讲这两个准则了。但是,这两个准则曾在历史上有着不可磨灭的功绩,而且难度不大,易于掌握,同学们应该对这两个准则有所了解。

在百度文库中搜索关键词“罗斯-霍尔维茨准则”或“朱里准则”,很容易找到这两个准则

系统稳定性的判断方法

判断系统稳定性的主要方法:奈奎斯特稳定判据和根轨迹法。

它们根据控制系统的开环特性来判断闭环系统的稳定性。这些方法不仅适用于单变量系统,而且在经过推广之后也可用于多变量系统。

稳定性理论:

微分方程的一个分支。研究当初始条件甚至微分方程右端函数发生变化时,解随时间增长的变化情况。主要方法有特征数法,微分与积分不等式,李雅普诺夫函数法等。是天体力学,自动控制等各种动力系统中的首要问题。

对稳定性的研究是自动控制理论中的一个基本问题。稳定性是一切自动控制系统必须满足的一个性能指标,它是系统在受到扰动作用后的运动可返回到原平衡状态的一种性能。关于运动稳定性理论的奠基性工作,是1892年俄国数学家和力学家 А.М.李雅普诺夫在论文《运动稳定性的一般问题》中完成的。

系统稳定性的判断方法

系统的四个性质即线性、时不变性、因果性和稳定性都很重要。

对于连续系统和离散系统的判断,教材中的叙述如下:如果连续系统H(s)的极点都在s平面的左半开平面,离散系统H(z)的极点均在z平面的单位圆内,则该系统是稳定的因果系统。

如果系统函数是已知的,那么根据上面的方法,先求出系统函数的极点,然后根据极点的位置,就可以判断系统的稳定性,于是,问题最后归结为求解一元多次方程的根,即解方程。

吴大正的教材举出一些简单的例子,说明如何判断系统的稳定性,以及当满足系统的稳定性时,一些系统参数应该满足什么条件。但是,当方程是高次的,比如3次、4次等,如果不能进行因式分解而求出方程的根,那么应该怎么办呢?教材没有交代。另一本教材,也是我第一次自学这门课程时所采用的教材,即西电陈生潭等编著的《信号与系统》(第二版,西安电子科技大学出版社,2001年)则介绍了两个重要的准则,即罗斯-霍尔维茨(Routh-Hurwitz)准则和朱里(July)准则。

罗斯-霍尔维茨准则在传统的控制理论课程中都要讲授,它是判别代数方程根的实部特征的一种方法,可以不用解方程就知道方程包含多少个负实部的`根。

由于计算机技术的发展,现在用计算机求解高次方程已经很成熟了,因而罗斯-霍尔维茨准则和朱里准则的重要性逐渐降低,很多教材已经不讲这两个准则了。但是,这两个准则曾在历史上有着不可磨灭的功绩,而且难度不大,易于掌握,同学们应该对这两个准则有所了解。

在百度文库中搜索关键词“罗斯-霍尔维茨准则”或“朱里准则”,很容易找到这两个准则

本文关键词:系统稳定性的判断方法有几种,系统稳定性的判断方法含有未知数,系统稳定性的判断方法罗,系统稳定性的判断方法数字信号处理,系统稳定性的判断方法极点。这就是关于《系统稳定性的判断方法,系统稳定性的判断方法 单位圆(2022系统架构考点扫盲之一致性哈希算法)》的所有内容,希望对您能有所帮助!更多的知识请继续关注《犇涌向乾》百科知识网站:http://www.029ztxx.com!

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。

猜你喜欢