分布式解决方案(分布式session解决方案)

本文主要介绍分布式系统中的session一致性

在单体系统中我们对用户登录标识的控制一般是放在session中存储,但是随着用户体量越来越大,session域已经无法满足我们的存储,并且随着系统的扩展,我们的服务器也会变成由多台tomcat组成的分布式服务器,在这种情况下每个tomcat里面的jvm都是不同的,那么就无法共享同一个session。这个时候就需要解决这些由分布式系统带来的session一致性问题。

解决方案一

不同的web服务器之间实现session同步这种方式可以实现session一致性,但是缺点也比较明显(服务器之间的带宽传输,延迟,并且如果用户体量大单独的放在session域中,会影响服务器响应速度。不推荐)

 

解决方案二

客户端存储,将session信息,放在cookie中,每次请求的时候在前端验证。这样后台就不涉及session的存取了(缺点,session放在客户端不安全,并且容易被篡改)

 

解决方案三

 使用nginx对tomcat进行集群,并且在每次请求的时候时候使用hash算法将请求路由到保存session的那台服务器上面,从而达到分布式session的一致性问题。缺点(session还在存放在tomcat服务器中,当一台tomcat宕机的时候,里面的session也随之小时,如果有session不同策略, 那么延迟也是一个大麻烦。)

 

解决方案四

引用spring-session 框架,此框架可以将session信息,放在redis中进行存储,第一次登陆成功的时候,会将此信息放在redis中,然后生成一个token返回给客户端。之后每次客户端请求的时候在请求头中带上对应的信息,然后和redis里面保存的信息,进行匹配,如果相同就表示验证通过。(这种解决方案是用的非常多的,推荐)

解决方案四(扩展)

解决方案三中的,将session放在redis中是一种常见的解决方案,但是没此都从redis中去取,有一定的网络开销,毕竟是访问了另一台服务器。并且这个session是可以伪造的,并且互联网传输都是有一定的风险,这个时候我们可以将要传输的信息进行加密,需在进行明文传输,我们使用算法对数据进行加密,然后传给后台,后台在接收到消息之后,对消息进行解密,这样可以使账号密码等在互联网进行传输的时候降低风险。

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值