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

你。 提交于 2020-02-28 18:52:00

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

汇总如下:

单体应用,分布式部署:保存会话信息(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。

 

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

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

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!