iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >怎么使用PHP实现分布算法之一致性哈希算法
  • 798
分享到

怎么使用PHP实现分布算法之一致性哈希算法

2023-06-15 06:06:57 798人浏览 安东尼
摘要

这篇文章主要介绍怎么使用PHP实现分布算法之一致性哈希算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!传统算法缺陷对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位准确,降低宕机影响。传统算法一般是

这篇文章主要介绍怎么使用PHP实现分布算法之一致性哈希算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

传统算法缺陷

对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位准确,降低宕机影响。

传统算法一般是将数据的键用算法映射出数字,对其用服务器数量取模,并根据结果选择要存储的服务器。其能达到数据平均分布和查找定位准确的要求,并且优点是算法简单,存取时的计算量都比较小(在数据非常大时才会明显)。

但其有一个致命缺点,即一个服务器宕机后的影响很大,我们可以推算一下一台服务器宕机后的影响:

  • 原有数据大部分丢失:服务器数量减少一台,取模数减1导致取模值错乱,如果以前有N台服务器,那么宕机后数据只有1/(n*(n-1))的数据能够被准确查找到。

  • 负载无法均衡导致集体宕机:如果没有及时处理宕机的服务器,那么他的存储任务将会被顺序积累给它的下一个服务器,那么下一个服务器也会很快被压致宕机,如此一来,服务器组很快会集体宕机。

算法思想

一致性哈希算法是使用一定的哈希算法,将大量的数据平均映射到不同的存储目标上,在保证其查找准确性的同时,还要考虑其中一个存储目标失效时,其他存储目标对其责任存储内容的负载均衡

一致性哈希算法的实现思想不难理解,如图:

怎么使用PHP实现分布算法之一致性哈希算法

用一定的哈希算法(哈希函数等)将一组服务器的多个(数目自己设定)节点随机映射分散到0-232之间,由于其随机分布,保证了其数据平均分布的特点;

用同一算法计算要存储数据的键,根据服务器节点确定其存储的服务器结点,由于每次用同一算法计算,所以得出的结果是相同的,使其查找定位准确;

查找数据时,再次用同一算法计算键,并查找服务器的数据结点;

如果有一个服务器宕机,消除其服务器结点,并将数据放在下一个结点上,由于随机节点位置的随机性,所以数据被其他服务器平均负载,也就降低了宕机影响。

需要注意的是,这个环形空间只是一个虚拟空间,只是表示了服务器存储的范围和数据的落点,在进行存储时,我们还要通过查找到的落点,将数据放入对应的服务器进行查改。

算法实现

编程语言我们使用php来实现一致性哈希算法:

我们主要用到以下函数:

int crc32 ( string $str )
生成 str 的 32 位循环冗余校验码多项式。这通常用于检查传输的数据是否完整。

string sprintf ( string $fORMat [, mixed $args [, mixed $... ]] )    
通过传入的格式产生字符串的特定格式形态。

实现如下:

class Consistance{    protected $num=24;          //设定每一个服务器的节点数,数量越多,宕机时服务器负载就会分布得越平均,但也增大数据查找消耗。    protected $nodes=array();   //当前服务器组的结点列表。    //计算一个数据的哈希值,用以确定位置    public function make_hash($data)    {        return sprintf('%u',crc32($data));    }    //遍历当前服务器组的节点列表,确定需要存储/查找的服务器    public function set_loc($data)    {        $loc=self::make_hash($data);        foreach ($this->nodes as $key => $val)        {            if($loc<=$key)            {                return $val;            }        }    }    //添加一个服务器,将其结点添加到服务器组的节点列表内。    public function add_host($host)    {        for($i=0;$i<$this->num;$i++)        {            $key=sprintf('%u',crc32($host.'_'.$i));            $this->nodes[$key]=$host;           }        ksort($this->nodes);        //对结点排序,这样便于查找。    }    //删除一个服务器,并将其对应节点从服务器组的节点列表内移除。    public function remove_host($host)    {        for($i=0;$i<$this->num;$i++)        {            $key=sprintf('%u',crc32($host.'_'.$i));            unset($this->nodes[$key]);        }    }}

我们用以下代码进行测试

怎么使用PHP实现分布算法之一致性哈希算法

结果如下:

怎么使用PHP实现分布算法之一致性哈希算法

以上是“怎么使用PHP实现分布算法之一致性哈希算法”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网PHP编程频道!

--结束END--

本文标题: 怎么使用PHP实现分布算法之一致性哈希算法

本文链接: https://www.lsjlt.com/news/278103.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么使用PHP实现分布算法之一致性哈希算法
    这篇文章主要介绍怎么使用PHP实现分布算法之一致性哈希算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!传统算法缺陷对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位准确,降低宕机影响。传统算法一般是...
    99+
    2023-06-15
  • 如何用PHP实现分布算法之一致性哈希算法
    目录传统算法缺陷算法思想算法实现总结传统算法缺陷 对于服务器分布,我们要考虑的东西有如下三点:数据平均分布,查找定位准确,降低宕机影响。 传统算法一般是将数据的键用算法映射出数字,对...
    99+
    2024-04-02
  • 详解Java分布式系统中一致性哈希算法
    目录业务场景使用Hash取模的问题1.负载均衡2.分库分表基本思想原理如何提高容错性和扩展性的1. 新增服务器节点2. 删除服务器节点Hash环的数据倾斜问题总结业务场景 近年来B2...
    99+
    2024-04-02
  • 如何理解一致性哈希算法
    本篇内容介绍了“如何理解一致性哈希算法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!要了解一致性哈希,首先...
    99+
    2024-04-02
  • 一篇文章读懂Java哈希与一致性哈希算法
    目录哈希 Hash 算法介绍分布式存储场景场景描述:实现思路:缺点:一致性Hash算法节点增加场景节点减少场景节点分布不均匀虚拟节点增加节点节点减少总结哈希 Hash 算法介绍 哈希...
    99+
    2024-04-02
  • Python小知识 - 一致性哈希算法
    一致性哈希算法 一致性哈希算法(Consistent Hashing Algorithm)是用于解决分布式系统中节点增减比较频繁的问题。它的思想是,将数据映射到0~2^64-1的哈希空间中,并通...
    99+
    2023-09-16
    Python YYDS
  • PHP实现sha-256哈希算法
    哈希 又称作 “散列”,它接收任何一组任意长度的输入信息,通过 哈希 算法变换成固定长度的数据指纹,该指纹就是 哈希值。总体而言,哈希 可理解为一种消息摘要。 在 PHP 中有这个函数 hash(),可以计算字符串的哈希值,出于好奇我 Go...
    99+
    2023-09-02
    哈希算法 散列表 算法
  • c++中怎么实现一个哈希慢算法
    c++中怎么实现一个哈希慢算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先,我定义了一个哈夫曼树结点:class hNode{ public:  friend&...
    99+
    2023-06-03
  • 怎么用PHP实现自己的sha-256哈希算法
    今天小编给大家分享一下怎么用PHP实现自己的sha-256哈希算法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。哈希 又称作...
    99+
    2023-06-30
  • Java编码算法与哈希算法深入分析使用方法
    目录一、编码算法1.什么是编码2.URL编码3.Base64编码二、哈希算法1.概述2.哈希碰撞3.常用哈希算法①.MD5②.SHA-1③.RipeMD-1604.哈希算法的用途三、...
    99+
    2022-11-13
    Java编码算法 Java哈希算法
  • Java数据结构与算法系列精讲之哈希算法实现
    概述 从今天开始, 小白我将带大家开启 Java 数据结构 & 算法的新篇章. 获取哈希值 hashCode()方法可以返回一个对象的哈希值. 需要注意的是, 我们需要对值...
    99+
    2024-04-02
  • .NET6中哈希算法的简化用法的实现
    目录IntroNew APISample BeforeNew API SampleMoreReferencesIntro 微软在 .NET 6 中引入一些更简单的 API 来使用 ...
    99+
    2024-04-02
  • ava实现一致性Hash算法
    目录1. 实现原理2. 解决数据倾斜的问题什么是数据倾斜?解决3. 代码实现3.1 ConsistentHash3.2 Hash3.3 Utils3.4 main1. 实现原理 将k...
    99+
    2023-03-24
    Java哈希算法 Hash算法实现一致性
  • C++哈希表之线性探测法怎么实现
    今天小编给大家分享一下C++哈希表之线性探测法怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、哈希表-线性探测法理...
    99+
    2023-06-30
  • Golang官方中的一致性哈希组件怎么实现
    这篇“Golang官方中的一致性哈希组件怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Golang官方中的一致性哈希...
    99+
    2023-07-05
  • 怎么使用Golang哈希算法实现配置文件的监控功能
    这篇文章主要介绍“怎么使用Golang哈希算法实现配置文件的监控功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Golang哈希算法实现配置文件的监控功能”文章能帮助大家解决问题。SHA(...
    99+
    2023-07-05
  • ava如何实现一致性Hash算法
    这篇文章主要介绍了ava如何实现一致性Hash算法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇ava如何实现一致性Hash算法文章都会有所收获,下面我们一起来看看吧。1. 实现原理将key映射到 2^32 -...
    99+
    2023-07-05
  • Java实现一致性Hash算法详情
    目录1. 实现原理2. 解决数据倾斜的问题2.1 什么是数据倾斜?2.2 解决3. 代码实现3.1 ConsistentHash3.2 Hash3.3 Utils3.4 main1....
    99+
    2024-04-02
  • Java分布式一致性协议与Paxos,Raft算法是什么
    这篇文章主要讲解了“Java分布式一致性协议与Paxos,Raft算法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java分布式一致性协议与Paxos,Raft算法是什么”吧!2PC...
    99+
    2023-06-04
  • 怎么利用Java实现一个希尔排序算法
    这期内容当中小编将会给大家带来有关怎么利用Java实现一个希尔排序算法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java 实现希尔排序Java代码    pub...
    99+
    2023-05-31
    java ava 希尔排序
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作