分布式session解决了什么问题?(一)

分布式会话解决了什么问题?

随着容器化、云原生等的普及,DevOps 团队不断倡导“以无状态为荣,以有状态为耻”。因为有状态服务难以部署且难以扩展。

“状态”对于用户体验来说其实是一件好事。保存用户的登录状态;浏览器异常关闭并重新打开,恢复用户之前的窗口状态;记录用户的偏好状态……于是勤奋动脑的软件工程师想:如何才能有无状态的可扩展性,还有状态有好的用户体验又如何呢?

答案是分布式会话。它更多的是解决业务问题

常见的分布式会话解决方案

2007 年至今 – 客户端存储

使用 cookie

客户端存储是指将信息直接存储在 cookie 中。客户端通过http协议与服务端交互,通常用于存储一些不敏感的信息。它有明显的缺点:

虽然这种方法有缺点,但可以通过合理的控制将副作用降到最低。所以我从2007年开始工作就一直用这个方法,现在的系统还在用。 JWT 就是一个典型的例子。它的长度很小,并且信息是加密的。一般还是保存在cookie中,解决单点登录问题。

智威汤逊

JWT:Json Web Token 是基于 Json 的开放规范。该规范允许我们使用 JWT 在用户和服务器之间传输安全可靠的信息。它的两个主要使用场景是:身份验证和数据交换。

服务器根据规范生成令牌并发送给客户端。此时客户端向服务器请求时,可以携带token来证明自己的身份信息。

图片[1]-分布式session解决了什么问题?(一)-老王博客

我从 2009 年开始从事互联网领域的工作,这几年我与智威汤逊打交道很多。因为那个时候,要不要做全栈就是全栈,因为前后端没有分开,一切都是乱七八糟的。也就是说,在过去的 7 年里,我更多地专注于后端。当时记忆最深的是cookie中有一个很简单的加密字符串,用户名信息等关键信息用下划线隔开,还有一个带有过期日期的随机数字段,也存放在数据库。一份。如果匹配,则认证成功,用户登录状态会话有效。

我没有听说有人使用 -session 会话保留(粘性会话)

使用负载均衡的原始地址Hash算法实现会话保持。负载均衡服务器总是将来自同一个IP的请求分发给同一个服务器,也可以根据cookie信息每次发送来自同一个用户的请求。分布到同一台服务器上,但此时的负载均衡服务器必须工作在HTTP协议层。此会话也称为粘性会话(Sticky Sessions)。

虽然这个方案保证了每个用户都能准确的拿到自己的session,而且大量用户不怕访问,但是这个session并不能满足系统高可用的要求。这个方案有个致命的缺陷:一旦某台服务器宕机,该服务器上的所有会话信息都会消失,用户请求会被切换到其他服务器,而其他服务器因为没有对应的会话信息而无法切换。完成相关业务。所以这种方式基本不采用。

2010 – 服务器会话复制

原理:如果任何服务器上的会话发生变化(增加、删除或更改)ie使用过程突然无响应,该节点会将会话的所有内容序列化并广播给所有其他节点,以确保会话同步。

优点:容错,服务器之间的会话可以实时响应。

缺点:会对网络负载造成一定的压力。如果会话量很大,可能会导致网络拥塞,降低服务器性能。

我 10 岁的时候,在公司举办的一次讲座上听到有人说我从未使用过它。我对这个印象不是很深:因为领导让我去听那个讲座,我坐在第一排,然后……睡着了。因为真的很无聊,所以互联网场景中很少有场景需要这样使用。

2011 年至今 – 状态集中存储

2011年,经过两年的努力,我终于从一个写业务代码的开发人员变成了公司的中间件开发人员。那个时候,让我负责就是培养一个动物园管理员。那个时候zookeeper还没有普及,当时很多公司都在开发自己的中间件。

一天下午,我在测试环境发布了一个不成熟的版本,我的服务宕机了。房间里的每个人都站了起来。因为我挂在这里,其他人的模块无法运行。好像有点跑题了。总之,从那以后,市面上出现了各种中心化状态存储:zookeeper、memcache缓存,其实数据库也是一种。

本质上,对于 Java 开发人员来说,会话​​存储只是从 JVM 内部转移到 JVM 外部。在这种场景下,会话保留相当于根据哈希值进行路由,会话复制相当于集中存储副本。也就是说,会话保留和服务器会话复制实际上是现代状态集中存储的基本原理,只是管理端从业务开发者转移到了中间件管理ie使用过程突然无响应,降低了业务开发者的开发和管理成本。

会话使用注意事项

15 年来,我们在网上遇到了一个问题:我正在验证一项在线功能。为了获得更好的身份验证,请使用 chrome 浏览器登录一个用户并使用 IE 登录另一个用户。这时我刷新了IE页面,IE用户突然变成了chrome用户。多年来对技术的敏锐感,我意识到在组件层面出现了问题。于是立即将问题报告给技术经理。技术经理听了我的汇报,联系了负责CDN的团队。经过他们的调查,CDN的静态缓存策略设置有问题,他们立即更新策略解决了这个问题。 (我现在想打出一身冷汗,随便操作生产?)

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论