背景简单提下,创业阶段节奏非常之快^_^。后来我们从单体服务拆分成微服务,登录、权限用了shiro ,我们当初觉得 shiro 更轻量级些,对编程更友好些,上手快,以后再优化。

我们将 session 存储于 redis,早期的时候由于是单体服务所以对于数据的访问也是单点的,拆分后就变成了多点访问。我们都知道 session 的特征是,只要用户有操作就会更新时间戳( redis 中是 TTL),所以多点访问的风险之一,是事务性问题,风险之二是 session 协议升级引发的隐形问题。

技术背景:

session 中存储的信息一般主要有用户名、手机号等基本信息, 如果加一个 areacode 字段上去,就需要每个应用服务都跟着添加(抛个问题:如果不跟着添加会怎么样?),然后每个服务跟着一起发版上线?这样会影响了基础服务本身的迭代节奏,又增加了代码的物理依赖。

虽然这样的事情不会经常发生, 但是这种劳师动众的问题应该被解决掉,而且底层的抽象数据本应该控制其读写入口以做到统一,就跟我们不会多点读写单点数据一样会出现事务性问题,这既是一种习惯,又是一种规范。

我打算优化这个问题,不动大手术,取最小成本和最大收成的并集:

当前 shiro 框架使用 redis 存储用户 session 信息,存取都是通过  redisSessionDao,并且各应用服务都是直连 redis 进行数据读写,如图:

优化后变成除 auth 外, 其他的 service 访问 session 信息都要通过 auth ,如图:

如果多个服务想对 redis 里面的某一条数据进行读写,则依然需要借助 auth 来实现。为了减少改动,我们将原来的 redisSessionDao 的 update 方法做区分处理:

auth 中的维持不变,

非auth 项目中的 ShiroConfig 在初始化的时候,将 redisSessionDao ,改成 AuthSessionDao, AuthSessionDao 的方法与 redisSessionDao 一致, 只是实现调整成调用 auth 接口:

到了 auth 服务后,进一步的优化空间是将 update 频率控制住,由每次操作调用优化成定时调用。

回答前面抛的问题:

如果不跟着添加会怎么样?

答:因为存在多点更新, 如果协议字段不一样的话, 会导致 session 信息丢失,例如 auth 写入的session 是包含区号 acode 的, 但是 ums 更新的时候会把 acode 刷掉。来来回回相爱相杀,功能玩不下去了,而且还成为了不容易被发现的顽固 bug

从0开始建设saas - 优化篇(session访问的问题)相关推荐

  1. 从0开始建设SAAS系统的建议

    既然 SAAS 又开始热起来了,那么我就从技术的角度,稍微聊聊建设 SAAS 的思路,个人见解,不喜欢迎来喷,感谢阅读.点赞.收藏. 2018 年左右我们开始计划建设人力资源管理SAAS,业务模块有很 ...

  2. 从0开始建设saas - 系统对接中的问题整理

    1.人财租户如何对应,以及如何实现单点登录?     走授权认证体系, 一次授权多次访问,长久不用自动失效(多久失效可由产品设计)      2.员工.组织.公司.成本中心的数据如何归属?以及对于同一 ...

  3. 深入浅出Mysql - 优化篇(锁)

    深入浅出Mysql - 优化篇(锁) 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保 ...

  4. 金蝶星瀚人力云vs北森iTalentX 5.0,HR SaaS下半场如何开启?

    <中智观察>第167069篇推送 作者:木易 编辑:小宏 编审:杨小天 头图来源:中国软件网 回看5月份国内SaaS市场,HR SaaS无疑是最热的赛道.先是5月7日,金蝶基于苍穹PaaS ...

  5. 达梦数据库:性能参数优化篇

    达梦数据库DM8性能参数优化篇 不分操作系统,根据服务器软硬件性能,对应的优化数据库性能: 以下优化都会更改达梦数据库dm.ini 配置文件,重启数据库服务后生效 查询数据库当前参数: --查询配置文 ...

  6. flink1.12.0学习笔记第1篇-部署与入门

    flink1.12.0学习笔记第 1 篇-部署与入门 flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇-高级 ...

  7. 抖音 Android 性能优化系列:Java 内存优化篇

    内存作为计算机程序运行最重要的资源之一,需要运行过程中做到合理的资源分配与回收,不合理的内存占用轻则使得用户应用程序运行卡顿.ANR.黑屏,重则导致用户应用程序发生 OOM(out of memory ...

  8. 爱奇艺移动端网络优化实践分享:网络请求成功率优化篇

    本文原始内容由爱奇艺技术产品团队原创分享,本次有修订和改动. 1.引言 由于移动网络的复杂性特点,编写高质量.体验好的具备网络通信能力的移动端应用(尤其是即时通讯这类网络质量高度敏感的应用)有很大的挑 ...

  9. Win7特别功能:优化篇

    Win7特别功能:优化篇 2011年01月28日 任何系统都逃不过"优化"这个话题,XP如此,Vista更是因为开机进程太多以及相关冗余程序导致系统速度下降而饱受诟病.Win7吸取 ...

最新文章

  1. KITTI数据集上MaskRCNN检测效果示例
  2. python多继承顺序_Python多重继承方法解析顺序(MRO构建算法)
  3. 利用zookeeper实现发布订阅模式
  4. JavaSE(七)——Scanner类、String类
  5. React功能界面的组件化编码流程
  6. 蠢货别忘(一)common lisp funcall
  7. Android studio真机调试
  8. Kylin, Mondrian, Saiku系统的整合
  9. webpack配置路径问题
  10. 使用大麦网抢票工具的一些心得体会
  11. 十进制转换为N进制C语言
  12. VBA学习笔记3-数据结构类型SortedList
  13. 华为音频编辑服务实时变声,多种音色随意变换
  14. 什么牌子的蓝牙耳机音质好?2022好音质蓝牙耳机推荐
  15. 解决2019款macbookpro -16寸 外接显示器风扇不停的转,温度特别高
  16. 家里宽带网络连接第二台路由器实验一
  17. iSCSI Enterprise Target配置
  18. 功放限幅保护_【干货】如何利用限幅器保护音箱√
  19. Meeting Rooms II -- LeetCode
  20. python获取当前日期_python获取当前的日期和时间

热门文章

  1. 重构之路 1---- 自动出题软件
  2. 计算机网络技术职业现状分析,师范专科学校计算机网络技术专业现状与应对措施.doc...
  3. Docker镜像的三大构建方式
  4. 大数据产品价值主张_十年之后大数据的价值主张
  5. 3d游戏场景建模设计师需要学哪些软件?
  6. minotaur的故事_Minotaur为Mesos,Kafka和Hadoop开发开源云
  7. 分类决策树考虑了经验风险吗_数据挖掘导论 第4章 分类:基本概念、决策树与模型评估...
  8. 小白学习深度学习的一点心得
  9. Selenium浏览器自动化测试使用(1)
  10. 哪些路由器支持打印服务器,小米路由器什么时间支持打印机服务器