架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1057|回复: 0

Nginx 负载均衡解决后端 SESSION 单点问题

[复制链接]
发表于 2023-1-10 20:38:39 | 显示全部楼层 |阅读模式
需求:使用 Nginx 搭建反向代理,负责所有请求的调度,后端为 ASP.NET MVC 开发,并且部署到多台不同的服务器,形成了一个后端集群,由于是老项目,有大量地方使用 session 来保存信息,由于 session 默认是保存到服务器的内存中,所有服务器无法共享 session 信息,导致有些请求会无法正确处理。就会出现如下问题:


QQ截图20230110200358.jpg


ASP.NET 网站可以参考如下:

asp.net session共享(通过StateServer方式)
https://www.itsvse.com/thread-6613-1-1.html

.Net分布式架构:基于Redis的Session共享
https://www.itsvse.com/thread-5189-1-1.html

常用的解决方案如下:

使用数据库存储 SESSION

既然每个服务器都需要使用同一个session,那么我们可以将session存放在同一个数据库里面,每次访问的时候,我们去数据库check一下是否有这个session或者这个session是否过期,然后就可以进行多台服务器的session同步了;

优点:使用这种方法简单、方便,很容易上手操作;

缺点:使用数据库来同步session,会加大数据库的IO,增加数据库的负担;同时,每次访问都需要拦截请求、查询数据库,导致多一层访问的业务层以及浪费读取数据库session时间;


使用 Memcache 或 Redis 等缓存机制存放 SESSION

使用memcache或者redis等分布式缓存机制存放session数据,是现在很多大型项目负载均衡同步session的热门方案;它的原理是项目都使用的是同一个地方的memcache或者redis的缓存,当用户登录的时候,会把session存放在缓存里面,之后不管访问的是项目的那一台服务器,都会从同一个地方去获取session缓存,这样就很轻松实现了session同步;

优点:用缓存来同步session,不会加大数据库的负担,也不用手动去判断session是否存在或过期,省去部分业务逻辑,同时,由于redis等缓存是存放于服务器端,安全性也大大提高;

缺点:memcache或redis把内存分成很多种规格的存储块,有块就有大小,这种方式也就决定了,memcache或redis不能完全利用内存,会产生内存碎片,如果存储块不足,还会产生内存溢出。

利用 Nginx 中 ip_hash 模式

这种技术也称会话保持,nginx中的ip_hash技术能够将某个ip的请求固定到同一台后端应用服务器,这样一来这个ip下的某个客户端和某个后端就能建立起稳固的session。

(但是也有一个弊端,如果运营商网络比较波动不稳定,出口 ip 是动态的,这种方式就会有问题。)

测试方式,基于 docker 开启两个站点,需要在 /data/testsite/a 和 /data/testsite/b 目录下面分别新建 index.html 文件,命令如下:

通过浏览器访问如下图:

QQ截图20230110202641.jpg

基于 docker 新建一个 nginx 容器,在不使用 ip_hash 技术的情况下,请求可以打到不同的后端服务器,如下图:

nginx.gif

使用 ip_hash 技术,新建 /data/testsite/nginx.conf 文件,配置如下:

docker 启动命令如下:


ip_hash.gif

基于 cookie 的会话保持,可以查阅 sticky 模块,略

Nginx 配置:http://nginx.org/en/docs/http/ngx_http_upstream_module.html

(完)




上一篇:【实战】使用 Docker 搭建 Gitlab 私有仓库
下一篇:IIS URL 重写模块规则清除
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-3-28 22:57

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表