分布式和集群的区别,一致性hash算法

本文探讨了分布式和集群的区别,分布式是系统拆分成多个子系统,而集群是多个实例运行以减轻服务器压力。集群不一定是分布式,但分布式一定是集群。此外,文章介绍了如何使用一致性哈希算法解决数据存储和查找效率问题,以及其在分布式集群如Redis、Nginx负载均衡中的应用。通过IP_hash策略实现会话粘滞,避免session共享问题,并讨论了其优缺点和解决方案。
摘要由CSDN通过智能技术生成

说一下我今天的学习心得。
首先是关于分布式和集群的区别。什么是分布式呢:分布式就是将一个系统拆分成多个子系统,比如我们网购系统,假设我们下订单,它可以拆分成一个订单系统和一个用户系统,这就是对系统进行一个拆分。而集群是指多个实例的运行,很多实例在一起运行,集群可以是相同的系统通过复制的方式进行多个部署,从而减轻单一服务器压力。所以说分布式一定是集群,因为运行了多个系统的实例;而集群不一定是分布式,因为可能一个集群很多个实例都是相同系统复制出来的结果。


说一下第二个知识点。第二个知识点是关于一致性hash算法。hash算法应用很广泛,例如MD5,SHA等加密算法,在数据存储以及查找方面都应用了hash表。hash算法最多应用的地方就是数据存储和查找领域,因为hash算法的查找速度非常快,如果数字按规律排序,我们甚至可以不用遍历一遍数据集即可找到我们所需要的结果。普通的顺序查找法我们是通过遍历数组,一个一个找来完成的。效率非常低。我们在此之上提出了一种新的二分查找法,二分查找法通过折半查找,这样的效率更高。但是我们有没有一种方法一次就可以查找到我们需要的值呢?答案是有的。比如我们定义一个数组的长度等于我们要存入数字的最大的值,这样我们查找数的时候只需要查找这个数的下标就可以看对应位置有无存值,即可实现一次查找。但是这种查找方式的缺点是会浪费内存,因为如果数字非常少,但是数字非常大,利用这种方法就比较消耗存储内存。在此基础上我们可以定义一个小的数组。通过对数据进行求模的运算,完成存储。不过这种存储方式也会有一个缺点,那就是如果两个数的求模以后数值相同,这样将两个相同的值存到一个地址里,会导致hash冲突。在此基础上,我们可以将数组里面每个地址存放一条链路,这样的话我们找到这个地址以后,通过链路一级一级往下找,就能很高效的查找到最后的结果了。

Hash算法应⽤场景

Hash算法在分布式集群架构中的应⽤场景
Hash算法在很多分布式集群产品中都有应⽤,⽐如分布式集群架构Redis、Hadoop、ElasticSearch,
Mysql分库分表,Nginx负载均衡等
主要的应⽤场景归纳起来两个
请求的负载均衡(⽐如nginx的ip_hash策略)
Nginx的IP_hash策略可以在客户端ip不变的情况下,将其发出的请求始终路由到同⼀个⽬标服务
器上,实现会话粘滞,避免处理session共享问题
如果没有IP_hash策略,那么如何实现会话粘滞?
可以维护⼀张映射表,存储客户端IP或者sessionid与具体⽬标服务器的映射关系
<ip,tomcat1>
缺点
1)那么,在客户端很多的情况下,映射表⾮常⼤,浪费内存空间
2)客户端上下线,⽬标服务器上下线,都会导致重新维护映射表,映射表维护成本很⼤
如果使⽤哈希算法,事情就简单很多,我们可以对ip地址或者sessionid进⾏计算哈希值,哈希值与服务
器数量进⾏取模运算,得到的值就是当前请求应该被路由到的服务器编号,如此,同⼀个客户端ip发送
过来的请求就可以路由到同⼀个⽬标服务器,实现会话粘滞。
分布式存储
以分布式内存数据库Redis为例,集群中有redis1,redis2,redis3 三台Redis服务器
那么,在进⾏数据存储时,<key1,value1>数据存储到哪个服务器当中呢?针对key进⾏hash处理
hash(key1)%3=index, 使⽤余数index锁定存储的具体服务器节点
今天先记录到这里,每天记一点知识点,通过积少成多的方式,慢慢我也可以记录好多笔记,加油!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值