基础图解之分布式服务部署请求流程

今天,深层次和群里同学讨论关于分布式系统问题

汇总如下:

单体应用,分布式部署:保存会话信息(spring-session)

客户端cookies + 服务端 redis  = 用户信息

单机应用中,HttpSession是通过Servlet容器创建和管理的,servlet容器一旦停止服务,那么session也随之消失;但如果session被保存到redis中,只要redis服务没停且session在有效期间内,那么servlet容器停止服务了,session还是存在的,这有什么好处了,好处就是servlet容器出现闪停闪修复的情况,用户就不用重新登录了。

使用redis存储用户会话信息,客户端web请求每次携带cookies,在拦截器中,获取通过cookies获取redis中用户信息

集群部署时(3台服务器部署3个tomcat, 其中tomcat部署同一个项目) ,其session是无法共享的, 可以使用spring-session 共享session;

分布式应用:保存会话信息(sso单点登录)

sso登录

分布式系统部署时, 多服务器, session是无法共享的,这是公认的, 同时顶级域名下, 不同服务,前端请求是无法跨域获取cookie的,要想实现效果, 参考使用sso登录 模式;

逻辑: 抽离登录业务逻辑为公共服务,统一验证是否登录未登录,反馈cookies等参数; 

单点登录参考: https://yq.aliyun.com/articles/636281 

A 访问

  1. 用户访问app系统,app系统是需要登录的,但用户现在没有登录。
  2. 跳转到CAS server,即SSO登录系统,以后图中的CAS Server我们统一叫做SSO系统。 SSO系统也没有登录,弹出用户登录页。
  3. 用户填写用户名、密码,SSO系统进行认证后,将登录状态写入SSO的session,浏览器(Browser)中写入SSO域下的Cookie。
  4. SSO系统登录完成后会生成一个ST(Service Ticket),然后跳转到app系统,同时将ST作为参数传递给app系统。
  5. app系统拿到ST后,从后台向SSO发送请求,验证ST是否有效。
  6. 验证通过后,app系统将登录状态写入session并设置app域下的Cookie。

A 访问关联app2系统

  1. 用户访问app2系统,app2系统没有登录,跳转到SSO。
  2. 由于SSO已经登录了,不需要重新登录认证。
  3. SSO生成ST,浏览器跳转到app2系统,并将ST作为参数传递给app2。
  4. app2拿到ST,后台访问SSO,验证ST是否有效。
  5. 验证成功后,app2将登录状态写入session,并在app2域下写入Cookie。

 

分布式模式模块分层简略模型

e31074d57cd93647ece91be38464cdfb145.jpg

写的问题, 请留言, 不慎感觉;

 

 

 

转载于:https://my.oschina.net/java1314/blog/3035535

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值