专栏名称: 码农翻身
工作15年的前IBM架构师分享好玩有趣的编程知识和职场的经验教训, 不容错过。
目录
相关文章推荐
程序员的那些事  ·  月薪已炒到6W?强烈建议大家冲一冲这个新兴领域 ·  2 天前  
程序员的那些事  ·  趣图:真 AI、真 LLM、真 API… ·  2 天前  
大淘宝技术  ·  探秘TaoAvatar:淘宝3D真人数字人技术解析 ·  昨天  
OSC开源社区  ·  AI做的音乐,真心不差 ·  2 天前  
玉伯  ·  欢迎试用,过几天正式发布 0.3 ... ·  2 天前  
51好读  ›  专栏  ›  码农翻身

干掉状态:从session到token

码农翻身  · 公众号  · 程序员  · 2017-03-20 08:24

正文

请到「今天看啥」查看全文



我马上就遇到了和邮件服务器一样的问题, 那就是必须管理会话,必须记住哪些人登录系统,  哪些人往自己的购物车中放了商品,  也就是说我必须把每个人区分开。


这对我来说是个不小的挑战, 由于HTTP协议的无状态特性, 我必须加点小手段,才能完成会话管理。


我想出的办法就是给大家发一个会话标识(session id), 说白了就是一个随机的字符串,每个人收到的都不一样,  每次大家向我发起HTTP请求的时候,把这个字符串给一并捎过来, 这样我就能区分开谁是谁了。


3

沉重的负担


大家都很高兴, 可是我就不爽了。


每个人只需要保存自己的session id,而我需要保存所有人的session id !  如果访问我的人多了, 就得由成千上万,甚至几十万个。


这对我来说是一个巨大的开销 , 严重的限制了我的扩展能力, 比如说我用两个机器组成了一个集群, 小F通过机器A登录了系统,  那session id会保存在机器A上,  假设小F的下一次请求被转发到机器B怎么办?  机器B可没有小F的 session id啊。


有时候我会采用一点小伎俩: session sticky , 就是让小F的请求一直粘连在机器A上, 但是这也不管用, 要是机器A挂掉了, 还得转到机器B去。


那我只好做session 的复制了, 把session id  在两个机器之间搬来搬去, 快累死了。


后来有个叫Memcached的给我支了招: 把session id 集中存储到一个地方, 所有的机器都来访问这个地方的数据, 这样一来,就不用复制了, 但是增加了单点失败的可能性, 要是那个负责session 的机器挂了,  所有人都得重新登录一遍, 估计得被人骂死。







请到「今天看啥」查看全文