前言
这里不讨论服务器分布式部署好处,服务并发处理的首要问题是:处理用户登录状态的一致性。
1.场景一
用户在浏览器登录记住密码7天,第一台机器的登录信息保存,期间可能会访问到多台机器,保持登录状态。
a.提出问题
用户登录状态的需要保存,session如何同步?
b.方案选择
网上大神的实践方案很多,这里作选择测试。session是存储在服务器本地的,认为浏览器端cookie开启,不开起可以对环境设置session的url传参模式,但对于普通用户看来安全性降低了,原理是区别不大。
参考《分布式系统session一致性的问题》,主要有:
其一,session入库:把session信息添加到mysql表、redis中,如果本地不存在、可以通过cookie可以查询获取这些用户状态信息,但这会增加后端设计开发的复杂度;
第二,代理分发:主动映射服务器ip,用户只会访问到指定的服务器,但部署起来有些麻烦。
这里选择代理分发模式,服务器扩容的问题优先在部署方解决,整体逻辑上也比较简洁清晰。
c.部署测试
vim config/nginx.conf:s%/logs/etc/g #把logs日志目录全部改到etc下
[]:~/tmp/dk# docker stop $(docker ps -aq)#启动mysql和redis[]:~/tmp/dk# docker start mm ms rm rs