架构思想之-从单点登录来聊聊服务无状态化

什么是服务无状态化?

服务无状态化总的来讲就是一句话,各个进程之间保证时刻对等。
说了等于没说。下面看一张图把。
在这里插入图片描述
上图中的网关层面就得保证服务无状态化,加入我们在网关层校验用户是否登录(session是否存在)。那么用户的session绝对不能存在网关服务上的。因为如果存在网关服务上,那么当用户在一个网关上登录,然后被路由到另外一个网关上还得重新登录。所以我们网关上不保存任何用户数据。即 即使任何一台网关挂掉、或者扩容新的网关都不会影响用户登录这个请求。

为什么要保证服务的无状态化呢?

其实这个很简单,现在的微服务场景,服务冗余是保证高可用的重要手段。你的服务得能快速扩容、缩容。那么你快速部署上去的一台服务。如果跟其他服务不对等。岂不是会很爆炸。

单点登录的实现怎么保证服务无状态化?

常见的两种思路:
1、当用户登录之后服务端将session加密后返回给客户端,客户端每次请求都带上这个session
2、当用户登录成功后服务端将session全部保存在redis集群里。

这两种思路都能保证网关无状态化,可以思考一下,网关挂一台、或者新增一台。是不是不会影响用户登录的请求。

方案一问题:(一般不推荐
1、每次请求都要带上session,无故带来带宽开销
2、session保存客户端不太靠谱。有被篡改的风险,且客户端不可靠,容易丢失。

方案二问题:
保存在redis集群中怎么保证session的存取问题?大家知道redis cluster 存在key节点飘逸问题
在这里插入图片描述
上面就会有节点飘逸的问题。那如果A节点立马又连上了。那岂不是A上的老数据存在版本问题?
所以redis cluster 来解决单点登录问题,你得考虑的问题很多,且很没必要。

带来的问题怎么解决?

不使用redis cluster集群试试?
在这里插入图片描述
看似很美好吧。那么如果三台机器不够用了怎么办?需要扩容成6台机器咋办?

解决方案:
1、客户端做好静默登录的功能
2、在流量低峰期进行扩容机器。

思考:那岂不是扩容的时候用户全部变成未登录状态?是的,所以要求客户端支持静默登录。且要在流量低峰期操作。这样慢慢随着用户的使用。就会将新的session保存到 6台服务器上去。等到你的流量高峰时。用户基本都已经登录完成了。

首先 你的redis扩容不是天天干,所以这样的实现方式,比较推荐。

静默登录:就是客户端保存好用户输入的账户密码。当服务端返回为登录时。自动帮用户登录一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我会为您解答。在上一篇博客中,我们已经介绍了OAuth2.0的登录流程以及单点登录的实现方式。接下来,我将为您介绍OAuth2.0的登出流程。 在OAuth2.0的登出流程中,与登录流程类似,也需要涉及到三个角色:用户、客户端和认证服务器。下面是OAuth2.0的登出流程: 1. 用户在客户端应用程序中发起登出请求,客户端应用程序将请求转发给认证服务器。 2. 认证服务器接收到登出请求后,会将用户的会话标识从认证服务器的存储中删除,并向客户端应用程序发回响应,告诉客户端应用程序用户已经登出。 3. 客户端应用程序接收到响应后,会清除本地存储的用户会话信息,并将用户重定向到认证服务器的登出页面。 4. 当用户在认证服务器登出页面上点击确认登出后,认证服务器会将用户重定向到客户端应用程序的登出回调URL,并在URL中包含一个参数,表示用户已经登出。 5. 客户端应用程序接收到认证服务器的登出回调请求后,会清除本地存储的用户会话信息,并重定向用户到应用程序的登录页面。 需要注意的是,OAuth2.0的登出流程中并没有提供单点登出的实现方式,因为OAuth2.0本身并不支持单点登出。如果需要实现单点登出,可以借助于其他的技术手段,比如使用Redis等缓存技术来实现单点登出。 好的,以上就是OAuth2.0的登出流程。希望对您有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七层汉堡王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值