Cluster模式潜在问题学习笔记---一致性Hash算法之负载均衡应用场景

Cluster模式潜在问题学习笔记—一致性Hash算法之负载均衡应用场景

1. Hash算法应⽤场景

  1. Hash算法在分布式集群架构中的应⽤场景
  2. Hash算法在很多分布式集群产品中都有应⽤,⽐如分布式集群架构Redis、Hadoop、ElasticSearch,Mysql分库分表,Nginx负载均衡等
  3. 主要的应⽤场景归纳起来两个
    1. 请求的负载均衡(⽐如:Nginxip_hash策略(ip_hash也是hash算法的一种应用)
    2. 分布式存储

2. 应用场景一:请求的负载均衡(⽐如:Nginxip_hash策略(ip_hash也是hash算法的一种应用)

  1. Nginx的IP_hash策略可以在客户端ip不变的情况下,将其发出的请求始终路由到同⼀个⽬标服务器上,实现会话粘滞,避免处理session共享问题
  2. 如果没有IP_hash策略,那么如何实现会话粘滞?
    可以维护⼀张映射表,存储客户端IP或者sessionid与具体⽬标服务器的映射关系<ip,tomcat1>
  3. 缺点:
    1. 那么,在客户端很多的情况下,映射表⾮常⼤,浪费内存空间
    2. 客户端上下线,⽬标服务器上下线,都会导致重新维护映射表,映射表维护成本很⼤
  4. 如果使⽤哈希算法,事情就简单很多,我们可以对ip地址或者sessionid进⾏计算哈希值,哈希值与服务器数量进⾏取模运算,得到的值就是当前请求应该被路由到的服务器编号,如此,同⼀个客户端ip发送过来的请求就可以路由到同⼀个⽬标服务器,实现会话粘滞
  5. Nginx ip_hash策略示意图如下:
    1. 通过hash(ip)%node_counts=index通过求模取余得到index锁定应该路由到的tomcat,以后只要一发送请求,就会发送到指定的服务器上

    2. 客户端1:1%3=1,所以就到编号1的Tomcat2中去了,又因为会话粘滞,所以同⼀个客户端ip发送过来的请求就可以路由到同⼀个⽬标服务器
      在这里插入图片描述

    3. 进入Nginx的src包里面可以看到几个包,如图所示:
      在这里插入图片描述

    4. 我们进入http包里面,因为ip_hash是负载均衡策略的一种,他解决的是http请求分发问题,所以要进入http包里,进去之后能看到如下图:
      在这里插入图片描述

    5. 进入http里面看到还有一个moudle包,其实Ngxin本身也是模块化的一种机制,Nginx完整功能都是由很多的小模块组成的,每个小模块完成相应的功能,进入moudle中,如下图:
      在这里插入图片描述

    6. 看到上图中拥塞框圈出来的ngx_http_upstream_ip_hash_module.c文件,进入文件,查看Nginx的hash算法(hash算法指的是一类算法而不是某一个算法)
      在这里插入图片描述

3. 应用场景二:分布式存储

  1. 以分布式内存数据库Redis为例,集群中有redis1,redis2,redis3 三台Redis服务器
  2. 那么,在进⾏数据存储时,<key1,value1>数据存储到哪个服务器当中呢?
  3. 针对key进⾏hash处理hash(key1)%3=index, 使⽤余数index锁定存储的具体服务器节点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值