问题1. 同一个服务,复制多份,session不同步问题。
解决方案:
1. session复制/seesion同步:tomcat原生支持,只需要修改配置文件。有延迟问题,降低带宽,内存存储多,水平扩展难。每台服务器需要存储所有session,每台服务器存储相同的副本。
2. 客户端自己存储cookie:不安全,http带大量信息,影响网络带宽。
3. hash一致性:利用ip的hash一致性,不同hash值范围落到不同服务器,只落到一台服务器。只需要修改ngnix配置。但是,水平扩展后,rehash后session重新分布,也会有一部分路由不到正确的session.
4. session统一存储:session不存储在服务器中,session统一存储在nosql数据库中,如redis. 无法篡改,水平扩展容易,只需要解决redis服务器水平扩展。但是,连接redis有网络延迟。
问题2. 不同服务,子域sessionn不能共享问题。
解决方案:
第一次使用session,命令浏览器保存卡号,JSESSIONID这个cookie, 以后浏览器访问哪个网站就会带上这个网站的cookie.
发卡的时候(指定域名为父域名),即使是子域系统发的卡,也能让父域直接使用。
以下是原生代码:
或者使用springsession
解决方案的通俗描述:
1. 后端统一存储
2. 前端一个卡