Home  >  Article  >  Backend Development  >  对应用服务器做了负载均衡之后如何保持session等记录用户登录状态的会话信息?

对应用服务器做了负载均衡之后如何保持session等记录用户登录状态的会话信息?

WBOY
WBOYOriginal
2016-06-06 20:46:511117browse

对应用服务器做了负载均衡之后如何保持session等记录用户登录状态的会话信息?用cookie?但是这样觉得不太安全。

回复内容:

对应用服务器做了负载均衡之后如何保持session等记录用户登录状态的会话信息?用cookie?但是这样觉得不太安全。

几个思路:

1 、负载算法采用 IP hash ,把每次相同 IP 的请求转发到同一台 Web 服务器上。
缺点是不能有效利用到所有的 Web 服务器来做均衡负载,一般负载算法都是 Round Robin 。

2 、重写 session handler , 把 session 用数据库来存储。
缺点是访问量高的情况下,IO 吞吐太高的话会影响网站性能。

3 、把 session 的默认存储路径设置为 NFS 上的一块存储区域,这样所有的 Web 服务器就可以共享了。
缺点是一旦 NFS 挂了,session 就再也没有办法使用了。

4 、最简单的,把 php.ini 里的 session save handler 设置为 memcache 或者 redis。
推荐用 memcache 。如果用 redis 的话,目前没有好用的 cluster 解决方案,而来 redis 还会把数据回写到硬盘上,完全没必要。而 memcache 只需要很少的配置就能做 cluster ,数据操作完全在内存里,速度杠杠滴。

cookie存一个key,具体信息存在数据库里,可以用memcache/redis这些基于内存的key-value存储来加速

@socrates 提供了一个方法,另外也可以通过对IP做hash把相同用户的请求发送到同一后端,nginx就有这种简单的会话保持功能。

负载均衡会话保持,同一用户请求发送到一台服务器。这个比较靠谱。

很关键工号

  1. 负载均衡的会话黏滞,会增加负载均衡的负担,因为需要记录IP和上游服务器的对应关系
  2. session存在key-value数据库中。将key存cookie,value存数据库。key一般是很复杂的,很难猜到,所以就算用cookie存也不会有什么严重的问题。推荐这种做法,实现起来也不难,key-value数据库也可以避免单点故障的

使用统一的 session服务 可以存储到 mc 或者 redis

可以把它存入结构性存储(memcached之类的)

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn