暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Memcached 实现分布式算法、 Session 共享

蒲东平 2023-12-16
215

使用 Memcached 实现分布式算法

分布式算法

需要通过应用程序来实现分布式算法

余数计算分散法

根据 key 来计算 CRC,然后结果对服务器数进行取模得到 memcached 服务器节点。 服务器无法连接的时候,将尝试的连接次数加到 key 后面重新计算。

余数计算分散法

缺点:

添加或移除服务器时,几乎所有缓存要重建,还需要考虑雪崩式崩溃问题。

16 个 Key、5 个服务器

服务器key 值key 值key 值key 值
S0
51015
S1161116
S22712
S33813
S44914

举个例子来说:如果 S3 服务器直接挂掉的话,那么 S3 服务器的流量会全部并给 S4 服务器,也就是说 S4 服务器要承受之前一倍的压力,如果此时 S4 服务器已经无法承受,直接崩掉的话,那么也就是会将原本 S3、S4 的流量全部在并给 S0 服务器

余数计算分散法
服务器key 值key 值key 值key 值key 值
S0
481216
S115913
S2261014
S3(假设移除了 S3 服务器)




S4(3)371115

以上例子说明:当移除一台服务器之后,基本上所有的缓存都需要重建,key 值,除了 S1 服务器的 1 和 S2 服务器的 2,剩下的全部都乱套了

余数计算分散法

一致性哈希算法

  • 求出服务器节点的哈希值分配到 0~2^32 的圆上
  • 求出存储数据键的哈希值映射到圆上
  • 从数据映射到的位置开始顺时针查找,将数据保存到找到的第一个服务器上
一致性哈希算法
一致性哈希算法

优点:

  • 冗余少
  • 负载均衡
  • 过渡平滑
  • 存储均衡

缺点:

依然无法解决雪崩问题

使用 Memcached 实现 Session 共享

实现 Session 共享

应用场景

当有很多用户的时候,这些用户的登录位置在各个不同的服务器上,因为 session 是生成在服务器上的,当用户互访的时候,有的时候发现自己有权限,有时候发现自己没有权限。因为缓存是集中式的,所有的缓存都在一起,那么就可以把 session 放到 memcached 缓存中。所有服务器都可以在公用的服务器上面来取 session,这样无论用户在哪一台服务器上面登录,都有正确的 session。这样的话,有两个优点,第一,解决了 session 共享的问题。第二,当用户量很大的时候,session 是存放在服务器上面的,因此就会增加了磁盘的 IO,但是如果放在缓存中,性质则完全不一样。

实现方式

  • 设置 php.ini 配置文件

vim etc/php/7.2/fpm/php.ini

  1. 将 seesion 存储方式改为 memcached

默认 php 是以文件的形式存放 session 的

1337 session.save_handler = files

因此需要修改成 memcached

session.save_handler = "memcached"

  1. 修改 session 存放位置

默认 php 注释掉了

1366 ;session.save_path = "/var/lib/php/sessions"

修改为

注意:192.168.174.128 是我虚拟机的 ip 地址,这里需要修改成你 memcached 服务器的 ip 地址

# 对于 php 5.6 及以下,需要写成如下
session.save_path = "tcp://192.168.174.128:11211"

# 对于 php 7 以上可以直接写成
session.save_path = "192.168.174.128:11211"

  • 如果只想单个 php 文件,取 session 的时候直接取缓存中取的话,可以如下设置

vim test.php

<?php
ini_set("session.save_hander""memcached");
ini_set("session.save_path""192.168.174.128:11211");

  • 另外还可以采用 apache 或者 nginx 的方式设置

将 session 放到 memcached 中的缺点:

集群错误会导致用户无法登陆、memcached 的回收机制可能会导致用户掉线


最后说个事
公号算法变了,为防止看不到我的更新
大家帮忙加个星标
点击上方的公众号卡片
再点右上角三个点
就能看到设为星标
算我跪下来求你们

往期精选:

微信,看看你的另一半跟谁聊天频繁!

让你的微信“拍一拍”有趣且不失风度

张万林,下雪了……我用编程带你看场纷飞大雪

还在使用默认的微信图标?赶紧换个吧!

我的微信和你们的不一样!?

文章转载自蒲东平,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论