当前位置: 首页 > news >正文

西安至成网站建设公司怎么用dw做可上传文件的网站

西安至成网站建设公司,怎么用dw做可上传文件的网站,网站加载慢,辽阳高端网站建设公司一致性Hash算法是个经典算法,Hash环的引入是为解决单调性(Monotonicity) 的问题;虚拟节点的引入是为了解决 平衡性(Balance) 问题。一致性Hash算法引入在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布…
一致性Hash算法是个经典算法,Hash环的引入是为解决 单调性(Monotonicity) 的问题;虚拟节点的引入是为了解决 平衡性(Balance) 问题。

一致性Hash算法引入

在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有的数据就无法找到了,这样严重的违反了单调性原则。

一致性Hash算法简介

一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。

一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:

  • 平衡性(Balance): 平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。

  • 单调性(Monotonicity): 单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。

  • 分散性(Spread): 在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。

  • 负载(Load): 负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同 的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。

一致性Hash算法

Hash环

使用常见的hash算法可以把一个key值哈希到一个具有2^32个桶的空间中。也可以理解成,将key值哈希到 [0, 2^32) 的一个数字空间中。 我们假设这个是个首尾连接的环形空间。如下图:

假设我们现在有key1,key2,key3,key4 4个key值,我们通过一定的hash算法,将其对应到上面的环形hash空间中。

k1=hash(key1);
k2=hash(key2);
k3=hash(key3);
k4=hash(key4);

同样的,假设我们有3台cache服务器,把缓存服务器通过hash算法,加入到上述的环中。一般情况下是根据机器的IP地址或者唯一的计算机别名进行哈希。

c1=hash(cache1);
c2=hash(cache2);
c3=hash(cache3);

接下来就是数据如何存储到cache服务器上了,key值哈希之后的结果顺时针找上述环形hash空间中,距离自己最近的机器节点,然后将数据存储到上面, 如上图所示,k1 存储到 c3 服务器上, k4,k3存储到c1服务器上, k2存储在c2服务器上。用图表示如下:

删除节点

假设cache3服务器宕机,这时候需要从集群中将其摘除。那么,之前存储再c3上的k1,将会顺时针寻找距离它最近的一个节点,也就是c1节点,这样,k1就会存储到c1上了,看一看下下面的图,比较清晰。

摘除c3节点之后,只影响到了原先存储再c3上的k1,而k3、k4、k2都没有受到影响,也就意味着解决了最开始的解决方案(hash(key)%N)中可能带来的雪崩问题。

增加节点

新增C4节点之后,原先存储到C1的k4,迁移到了C4,分担了C1上的存储压力和流量压力。

不平衡的问题

上面的简单的一致性hash的方案在某些情况下但依旧存在问题: 一个节点宕机之后,数据需要落到距离他最近的节点上,会导致下个节点的压力突然增大,可能导致雪崩,整个服务挂掉。

如下图所示:

当节点C3摘除之后,之前再C3上的k1就要迁移到C1上,这时候带来了两部分的压力:

  • 之前请求到C3上的流量转嫁到了C1上,会导致C1的流量增加,如果之前C3上存在热点数据,则可能导致C1扛不住压力挂掉。

  • 之前存储到C3上的key值转义到了C1,会导致C1的内容占用量增加,可能存在瓶颈。

当上面两个压力发生的时候,可能导致C1节点也宕机了。那么压力便会传递到C2上,又出现了类似滚雪球的情况,服务压力出现了雪崩,导致整个服务不可用。这一点违背了最开始提到的四个原则中的 平衡性, 节点宕机之后,流量及内存的分配方式打破了原有的平衡。

虚拟节点

“虚拟节点”( virtual node )是实际节点(机器)在 hash 空间的复制品( replica ),一实际个节点(机器)对应了若干个“虚拟节点”,这个对应个数也成为“复制个数”,“虚拟节点”在 hash 空间中以hash值排列。

依旧用图片来解释,假设存在以下的真实节点和虚拟节点的对应关系。

Visual100—> Real1
Visual101—> Real1
Visual200—> Real2
Visual201—> Real2
Visual300—> Real3
Visual301—> Real3

同样的,hash之后的结果如下:

hash(Visual100)—> V100  —> Real1
hash(Visual101)—> V101  —> Real1
hash(Visual200)—> V200  —> Real2
hash(Visual201)—> V201  —> Real2
hash(Visual300)—> V300  —> Real3
hash(Visual301)—> V301  —> Real3

key值的hash结果如上,这里暂时不写了。

和之前介绍的不添加虚拟节点的类似,主要聊下如果宕机之后的情况。

假设Real1机器宕机,则会发生一下情况。

  • 原先存储在虚拟节点V100上的k1数据将迁移到V301上,也就意味着迁移到了Real3机器上。

  • 原先存储再虚拟节点V101上的k4数据将迁移到V200上,也就意味着迁移到了Real2机器上。

结果如下图:

这个就解决之前的问题了,某个节点宕机之后,存储及流量压力并没有全部转移到某台机器上,而是分散到了多台节点上。解决了节点宕机可能存在的雪崩问题。

当物理节点多的时候,虚拟节点多,这个的雪崩可能就越小。

整理好的Java面试资料,推荐阅读:

最全的java面试题库

Java核心知识点整理

http://www.yayakq.cn/news/491760/

相关文章:

  • 平台网站建设合同一个网站可以做多少个小程序
  • 成品网站包含后台么做静态网站的步骤
  • 做一些购物网站wordpress实现首页功能能
  • 搞笑资讯网站源码企业网站的视频页如何做
  • 响应式公司网站网站切换
  • 沈阳高端网站定制开发郑州软件开发培训
  • 东西湖区城乡建设局网站哪个网站做线路攻略做得好
  • 自己的电脑做网站服务器吗装饰网站的业务员都是怎么做的
  • 做套现网站长沙有名的公司
  • 网站建设部门管理制度Wordpress搜索html页面
  • 广安做网站的公司做调查的网站有哪些
  • 广西工程建设质量管理协会网站h5个人网站模板
  • 商城网站建设特点有哪些wordpress 小说 采集
  • 分享类网站源码免费的设计软件有哪些
  • 品牌网站建设价格天天快递最全的wordpress 中文手册
  • 宿州网站公司引流推广什么意思
  • 建网站源码建站详解房产网加盟
  • 公司网站怎么登录网站建设内部优化
  • 电商网站建设策划方案苏州地区网站制作
  • 安徽池州做企业网站wordpress无法点上传图片
  • 河南建设厅网站地址推广代理公司
  • 网站制作哪些做设计必须知道的几个网站
  • 免费发布信息不收费的网站新一代设计协作工具
  • 陕西汉中网站建设如何建设一个公众号电影网站
  • 网页登不了wordpressseo报价单
  • 北京赛车手机网站建设昆明网站seo技术厂家
  • 常做网站首页的文件名高密做网站哪家好价位
  • 沈阳学校网站建设网页设计一般用什么软件
  • 有哪个网站做ic本手机原有微信网站
  • 高端用户群浏览网站网络方案设计与实现