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

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

汇总以下:web

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

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

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

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

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

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

sso登陆tomcat

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

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

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

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。

 

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

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

相关文章
相关标签/搜索