一个简易web服务原理

简易服务器结构

在这里插入图片描述

  • 用户首先访问nginx服务器,然后跳转到对应的应用服务器这里是tomcat,然后对数据进行增删改查
  • 大家都知道每次访问数据库的时候都十分慢,这个时候缓存就派上了用场,将不经常改变的数据放到缓存里,可以极大的提升效率。

解决访问哪个redis问题

  • 当访问缓存的时候,由于缓存中有多个redis,而且不确定应该访问哪个redis,所以需要算法解决。

余数算法

  • 这个大家可以自行百度,这个方法在添加新的服务器时,造成很大问题。

一致性hash算法

  • 这个方法能够极大地缓解缓存失败问题,换句话说,它只能把失效的缓存控制在特地区间,但是不能完全解决在增删缓存服务器时的缓存失效问题。
    在这里插入图片描述
  • 将圆盘分为1 - 2的32次方-1个点
  • 根据每一台服务器的ip,进行hash计算的值分布在这个圆盘上
  • 然后对于每一个缓存值进行编号,0 - 无限大为key,进行hash(key)=key % 服务器台数,计算出结果,按照顺时针找到对应的服务器,放在对应的缓存服务器上。在取缓存的时候依然是计算hash(key)去找到顺时针最近的服务器然后找到值。
  • 应用程序就顺着这个圆盘去服务器上寻找对应的缓存服务器,如果都没找到就访问数据库。
  • 有人担心这个服务器分布不均匀,服务器可能会负载。而有的服务器空闲,我们可以对一个服务器划分多个虚拟服务器(虚拟机那样),尽可能的均匀这个圆盘。

Hash槽(Hash Slot)

  • 在这里一共有16384个槽,如果是三台服务器那么分别管0到5460、5461到10922、10923到16383,先对key产生一个整数值,然后在对16384求余数。如果增加服务器,那么三台服务器管理的区域分别分出一部分。
  • 需要redis之间的通信,如果应用程序访问服务器1未找到,那么服务器1的redis会告诉在服务器2。
发布了134 篇原创文章 · 获赞 91 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/weixin_44588495/article/details/102254601