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

来源 | 编程技术宇宙

责编 | Jerry

我是一个web服务器

我是一个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-cookie和JWT,你更倾向谁?

更多阅读推荐

  • 还不懂Redis?看完这个故事就明白了!

  • 2020职场人裸辞三大原因:不开心、工资低、没有盼头

  • 云原生安全模型与实践

  • Swift、Flutter 共同瞄准 Windows!

  • PINGPONG技术文档:数据分析三剑客+MySQL+可视化套餐+量化分析+Hadoop仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516432.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

太平鸟上云 推动中国服饰行业新零售转型

云栖号案例库:【点击查看更多上云案例】 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 在消费增速下滑的大环境下,转型焦虑几乎已经弥漫了整个服饰行业,…

Typora 常用技巧

文章目录1. 引用样式2. 插入表格3. 图片设置1. 引用样式 输入>按tab键 流程 默认样式: blockquote {border-left: 4px solid #dfe2e5;padding: 0 15px;color: #777777; }修改后样式 blockquote {border-left: 4px solid #62ca38!important;background:#f…

海升集团数据上云 走出智能农业的新路子

云栖号案例库:【点击查看更多上云案例】 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 尽管最近水果的价格持续上涨,但水果消费的需求和市场始终在快速提升。墨西哥…

干货!一文看Doris在作业帮实时数仓中的应用实践

数据驱动未来。在大数据生态中,数据分析系统在数据创造价值过程中起着非常关键的作用,直接影响业务决策效率以及决策质量。Apache Doris作为一款支持对海量大数据进行快速分析的MPP数据库,在数据分析领域有着简单易用、高性能等优点。9月20日…

拿下 Gartner 容器产品第一,阿里云打赢云原生关键一战

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 近日,Gartner 发布 2020 年公共云容器报告,据报告显示,阿里云和 AWS 拥有最丰富的产品布局…

训练机器人看脸读“心”,真的靠谱吗?

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 虽然人工智能公司极力推广人脸情绪识别软件,但是心理学家却在质疑情绪识别只是说起来容易。 数百张人脸在屏幕上…

核弹级漏洞 Apache Log4j2 漏洞详情和修复建议

文章目录一、. 普通web项目1. 下载依赖2. 解压3.更新操作4.移除旧依赖5. 更新包二. maven项目修复2.1. maven 项目2.2. 微服务项目一、. 普通web项目 下载官网:https://logging.apache.org/log4j/2.x/download.html 1. 下载依赖 wget https://dlcdn.apache.org/l…

阿里云推出高效病毒基因序列检索功能,它的底层逻辑原来是这样的

1.背景介绍 2019年年底,中国的新兴的商业中心武汉,爆发了一种新型的冠状病毒,在流行的两个多月中,在中国造成了3300多人死亡,8万2千多人感染。随着疫情的进一步蔓延,目前已经横跨了109个国家,造…

前端_网页编程 WebAPI_01

01 - Web API 1.1. Web API介绍 1.1.1 API的概念 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,无需理解其内部工作机制细节,只需直接调用使…

新基建与智慧城市相遇 会碰撞出什么样的“火花”?

云栖号资讯:【点击查看更多行业资讯】 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 近期,新基建被政府、民间、资本广泛看好,各省市相继公布投资计划,最终的数据或许会远超34…

max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

安装elasticsearch报错如下: 增加资源分配,资源分配不够进程会自动关闭服务 vim /etc/security/limits.conf* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096

十年磨一剑,阿里云RDS MySQL和AWS RDS谁的性能更胜一筹?

MySQL代表了开源数据库的快速发展。 从2004年前后的Wiki、WordPress等轻量级Web 2.0应用起步,到2010年阿里巴巴在电商及支付场景大规模使用MySQL数据库,再到2012年开始阿里云RDS for MySQL为成千上万家客户提供可靠的关系数据库服务,阿里云R…

搭建 ELK 集群 kafka filebeat kibana logstash zookeeper elasticsearch

文章目录一、前置准备1. 部署总览2. 技术选型3. 全局配置4. 软件下载5. 操作声明二、jdk安装2.1. 上传2.2. 解压2.3. 设置环境变量三、zk集群3.1. 上传3.2. 解压3.3. 创建目录3.4. 编辑配置3.5. 添加配置3.6. myid3.8. 关闭防火墙3.9. 启动zk3.10. 监控状态3.11. 效果图四、kaf…

超越软件上云 讲述每天1亿公里行驶背后的大生意

云栖号案例库:【点击查看更多上云案例】 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 大家都听过物联网,它联接我们身边的所有物体,包括汽车车辆、家用…

Excel 数据导入到Access数据库,报错“找不到可安装的ISAM”的解决办法

目录 1. 报错1.1 报错信息1.2 报错原因2. 解决方案AppAccess.DoCmd.TransferSpreadsheet 方法 1. 报错 1.1 报错信息 本文源起在Excel VBA开发中,Access对象采用后期绑定后,出现了报错 下面是我的后期绑定数据库对象的代码 后期绑定数据库对象 Dim AppAccess As Object Set…

贵广网络跨界转型 实现智慧城市的平台创新

云栖号案例库:【点击查看更多上云案例】 不知道怎么上云?看云栖号案例库,了解不同行业不同发展阶段的上云方案,助力你上云决策! 随着互联网媒体的强势崛起、IPTV和OTT的快速普及(2018年全国IPTV用户已达1.4…

无公网域名,使用ngrok开启反向代理,实现公网域名访问本地项目

文章目录1. 下载2. 使用3. 创建项目4. 本地访问5. 域名访问1. 下载 https://ngrok.com/download 根据不同的系统环境下载压缩包 2. 使用 windows 环境 cd ngrok-stable-windows-amd64 使用命令窗口启动创建账号认证 ngrok.exe authtoken token格式:ngrok.exe h…

连续两年入选Gartner公共云容器,阿里云在边缘容器方面做了什么?

最近,Gartner发布了2020年公共云容器报告,阿里云连续两年成为唯一入选的中国企业。报告显示,阿里云容器服务在中国市场表现强劲,产品形态丰富,在 Serverless 容器、服务网格、安全沙箱容器、混合云和边缘等领域&#x…

性能为MySQL 10倍!阿里云推出云原生数据仓库AnalyticDB基础版

云原生数据仓库AnalyticDB基础版来了! 点我看直播回放惊喜优惠!体验10元3个月 发布会PPT资料放送(点击可直接查看哦) ADB基础版:云原生MySQL敏捷数仓ADB for MySQL 基础版技术解密基于ADB for MySQL基础版构建实时数…

在DataWorks标准模式下统计个人账号使用资源情况

背景 在使用MaxCompute的时候通常情况下,用户会通过Information Schema的task_history视图表来分析具体某个账号执行的SQL任务情况,来做到SQL成本分摊或SQL的时间成本优化。但大多数用户通过DataWorks标准模式下使用MaxCompute,这样在MaxComp…