我是一个web服务器

我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务。

已经是深夜了,我还在和手下几个兄弟为了一件事紧张讨论着。

“老大,现在咱们每天处理的请求越来越多了,session同步的问题不能再拖了,必须想个办法”

“二哥说是啊,老大不能再拖了”

“老二,老三,咱们是一个集群,你们说的问题我不是不知道,我昨天听程序员们在讨论说要给我们接入一个叫Redis的家伙,相信这一问题很快就能得到解决啦,大家再忍忍。”

“Redis,他是谁,什么来头?怎么没听过这号人物” “我也没见过,等等看吧”

session-cookie时代

到底是什么问题,让我们兄弟几个如此着急上火?事情还得从多年以前说起······

那时候,这俩兄弟还没来,就我一个web服务器,每天处理的不过是一些静态资源文件,像HTML、CSS、JS、图片等等,日子过的清闲自在。 日子一天天过着,互联网却悄然发生着变化。除了静态网页之外,可以动态交互的网络应用开始如雨后春笋般涌现,像各种各样的论坛啊,购物网站啊之类的。

这家公司的老板也不例外,招了一帮程序员要搞一套支持动态网页交互的网站出来。 以往的时候,我只需要按照HTTP协议的规范处理请求就完事儿了。不过动态交互应用出现后,我还得记住每一个请求背后的用户是谁,要不然就张冠李戴,全乱套了。

为了解决这个问题,程序员们想出了一个叫session的办法

浏览器登陆以后,我就分配一个session ID,表示一个会话,然后返回给浏览器,让它保存着。

后续再来请求的时候,就把它给带上,我就能知道是谁啦! 还别说,这办法还是挺管用的,成功解决了用户身份识别的问题,这一用就是好几年。

不过,互联网的发展实在是太快了,用户量蹭蹭上涨,而我却发起了愁。 原先用户量少的时候,session ID管理起来倒也简单,现在用户越来越多,对应的session ID数量也与日俱增,我有点不堪重负了。

终于前不久,公司对web服务器进行了扩展,给我找来了两个小弟,还专门添置了一个nginx来进行负载均衡,这一下我们变成了3台web服务器组成的小集群了。 我的工作一下轻松了许多,两位小兄弟分担了不少。

我原以为以后的日子要好过一些了,可没想到,两位小兄弟的加入却引入了新的问题。 原先的session ID虽然很多,我一个人累是累点,但是方便管理啊!现在人手是增加了,可是这个session ID的管理问题却变得复杂起来。

因为咱们现在是个集群,请求如果发到我这,我给登记了session ID,但下一次请求说不定就发到老二那里,一会儿又发到老三那里,这个就说不准了,这样我们几个手头的信息不一致,就会出现一些异常情况,用户估计要破口大骂:这什么辣鸡网站?

后来我们跟nginx商量了一下,让他同一个用户来的请求都发给我们固定的一个人,这才稳住了局面。 不过好景不长,后面我们三兄弟都相继出现过宕机的情况,这时候nginx还是得把请求交给还在工作的兄弟,原来的问题就又出现了!

我们几个逼急了,商量了一下,干脆大家伙来同步session ID的信息好了,有新增、失效的情况都给其他几个兄弟招呼一下,大家都管理一份,这样就不会出现不一致的问题了。 搞了半天,又变成以前一个人管理所有session ID的情况了

不仅如此,还要抽出时间和几位兄弟同步,把session ID搬来搬去,工作量不减反增了。

就这样艰难的过了一段日子,大家都怨声载道,所以有了开头的那一番讨论。

这一次,希望这位新来的叫Redis的伙伴能拯救我们。

独立缓存——Redis

过了几天,总算把这个叫Redis的小伙伴给盼来了!

这小子看起来特别精神,了解清楚情况后,告诉我们说:“三位老哥,以后这session ID都统一存在我这里吧,你们别各自保存了,这不是各位的擅长”

“你行吗?”老二看着不太相信他的话,一脸不屑。

“行不行,试试不就知道了吗?”

接下来,我们听从了Redis的建议,不再保存这烦人的session ID,全部一股脑儿交给了他,我们需要的时候再找他获取。

你还别说,这小子个子不大,本事不小,读写速度都特快,让我们头疼的问题总算是解决了!

Token时代

几个月后的一天···

“听说了吗?程序员们又要更改session ID的存储方案了”,这一天,老二神神秘秘的说到。

“不对不对,我听到的版本是以后不用session ID了,要变天了!”老三也凑了上来。

一旁的redis老哥一听不乐意了,“咋的?是嫌我干的不好吗?”

我也赶紧催促,“你俩就别卖关子了,听到了什么,快说说”

老三示意大家围拢一些,小声说到:“我上次听两个程序员在议论,不知道他们在哪里学来了一套叫JWT(JSON Web Token) 的技术,硬说让我们来管理保存session ID负担太重了,以后不保存了!还说,还说···”

“还说啥,你倒是说啊!”

“还说,Redis也不是万能的,也有崩溃的风险,一崩溃就全完了,所以要革新技术”老三继续说到。

Redis一听更着急上火了,“我工作这么久以来,从没有撂过挑子吧,怎么能这么说我呢?再不行我也可以像你们搞个集群嘛”

“Redis老弟你先别急。唉,老三,这不保存session ID,以后怎么鉴别用户呢?你有没有听到他们怎么说的?”

“听他们说,没有session ID,但是换了一个token,用它来识别用户”

老二一听不以为意:“换了个名字,换汤不换药嘛!咱们还不是要保存token,才能匹配谁是谁”

老三摇了摇头:“不是的,这可不只是改了个名字那么简单!这个token是由三部分构成,就像这样: 你们看,第一部分是JWT的基本信息,然后把用户的身份信息放在第二部分,接着和第一部分合在一起做一个计算,计算的时候加入了一个只有我们才知道的密钥secretkey,计算结果作为第三部分。最后三部分拼在一起作为最终的token发送给客户端保存着···”

还没等老三说完,老二点出了其中的关键:“我知道了,后面咱们再收到这个token的时候,就可以通过同样的算法验证前面两部分的结果和第三部分是不是相同,就知道这个token是不是伪造的啦!因为密钥只有我们知道,别人没办法伪造出一个token的!最后确认有效之后,再取第二部分的用户身份信息,就知道这是谁了!”

听完他们的分析,我和Redis老兄都默默的点了点头,“有点意思啊,这样一来,咱们确实不用存了!不过现在咱们几个工作配合的也挺好的,他们费这么大劲是为了什么啊?”

“我猜他们是想节约开支,把Redis老哥给裁掉!”,老二说到。

老三摇了摇头,“依我看,八成他们是想展示技术给领导看,这不又快到职级晋升答辩了,他们想搞事情!唉,老大,这事你怎么看?”

“我啊,我···”

朋友们,你们怎么看?

session很快失效_深夜,我偷听到程序员要对session下手...相关推荐

  1. session很快失效_深夜,我偷听到程序员要对session下手……

    来源 | 编程技术宇宙 封图 | CSDN 付费下载自东方IC 我是一个web服务器 我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务. 已经是深夜了,我还在 ...

  2. session很快失效_一口气说出 4 种分布式一致性 Session 实现方式,面试杠杠的~

    前言 公司有一个 Web 管理系统,使用 Tomcat 进行部署.由于是后台管理系统,所有的网页都需要登录授权之后才能进行相应的操作. 起初这个系统的用的人也不多,为了节省资源,这个系统仅仅只是单机部 ...

  3. 深夜,我偷听到程序员要对session下手……

    我是一个web服务器 我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务. 已经是深夜了,我还在和手下几个兄弟为了一件事紧张讨论着. "老大,现在咱们 ...

  4. 深夜,我偷听到程序员要对session下手.......

    我是一个web服务器 我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务. 已经是深夜了,我还在和手下几个兄弟为了一件事紧张讨论着. "老大,现在咱们 ...

  5. 深夜,我偷听到程序员要对session下手......

    来源 | 编程技术宇宙 责编 | Jerry 我是一个web服务器 我是一个web服务器,我的工作是给人类提供上网服务,我每天要为数以万计的人提供网页浏览服务. 已经是深夜了,我还在和手下几个兄弟为了 ...

  6. webview session不失效_不懂HttpSession对象看这里--乐字节

    HttpSession对象 HttpSession对象是 javax.servlet.http.HttpSession 的实例,该接口并不像 HttpServletRequest 或 HttpServ ...

  7. 完整年份值必须介于_上 | 完整解释 Monad 程序员范畴论入门

    如果你接触过函数式编程,你很可能遇到过 Monad 这个奇怪的名词.由于各种神奇的原因,Monad 成了一个很难懂的概念.Douglas Crockford 曾转述过这样一句话来形容 Monad: O ...

  8. 学了python做什么自由职业者_我又有一位程序员朋友成了自由职业者

    原标题:我又有一位程序员朋友成了自由职业者 很多对数据结构和算法感兴趣的小伙伴,对[程序员小灰]这个公众号并不陌生,小灰在三年前开始,创造了一只可爱的小仓鼠,并用它来讲解编程技术和算法,一讲就是三年. ...

  9. java没有舞台_不会偷懒的程序员不是好程序员!

    今天看了篇文章: http://blogoscoped.com/archive/2005-08-24-n14.html 这篇文章是讲为什么好的程序员是既懒有笨的!哈哈! 我记得在看UNIX编程艺术时, ...

最新文章

  1. 中国最齐全的主要电子商务网站(B2C)
  2. 阿里发布新工具,直接帮你改代码!网友:工作量又减轻了~
  3. 一篇文章学会Python函数重写,每天进步一个知识点
  4. 互信息的数学解释以及matlab编程
  5. Excel中删除链接
  6. windows制作docker镜像_.NET Core程序跑在任何有docker的地方
  7. 医疗大数据分析需考虑哪些因素
  8. 收藏一篇关于 用两个栈实现一个队列功能的帖子
  9. 基于手写数字识别的FGSM
  10. 三角函数常见基本公式
  11. STM32/KEIL/MDK 查看 FLASH 和 RAM 使用情况
  12. prison break
  13. 哒哒租车系统(慕课网学习)
  14. java实现1 12 123 1234 12345 123456 输出
  15. 国标GB28181摄像头直播视频流媒体服务器获取视频流失败问题分析
  16. javaSE学习笔记_目录
  17. echarts关系图指向混乱
  18. 【服务器管理】搭建FTP
  19. Android使用第三方字体
  20. IPsec中IKE与ISAKMP过程分析(快速模式-消息2)

热门文章

  1. mysql 删除记录代码_mysql 删除记录时报错
  2. 计算机网络ieee,博士生程珂论文连续两年被计算机网络顶级会议IEEE INFOCOM录用...
  3. 征途pak文件修改_传奇技能,第十四祭:装备属性修改与增加新装备
  4. Will not attempt to authenticate using SASL | dubbo项目启动特别慢,拉取 zookeeper 服务日志打印特别慢
  5. mac instantclient_12_2 安装配置
  6. nuxt2中使用less
  7. vux radio 改造为 tree 代码片段
  8. 宝塔面板 Windows 2012 R2 使用指南(在更新中)
  9. mysql coalesce函数用法_MySQL coalesce函数用法说明(转)
  10. postgresql数据库迁移技巧(降低版本迁移到GreenPlum pg11-pg8)