《架构师之路:架构设计中的100个知识点》 14.session sticky相关技术
《DNS在架构设计中的三大妙用》发布后,有个朋友反馈:虽然DNS轮询能随时扩展Nginx,NG后端也能随时扩展web-server,但这两种方案都不满足session sticky。
这位朋友说的很对,但我了解的大部分互联网公司,已经不再使用session sticky技术了。我不敢说它是过时的技术,但确实很多朋友已经不知道它了,今天和大家说下session sticky。
什么是session sticky?
这是一种会话保持策略,它通过负载均衡器将来自同一个用户的请求始终分发到同一台web-server上。这样,session信息仅需要存储在该服务器上,而无需共享。
如上图所示,如果没有使用session sticky,用户的请求可能被负载均衡器路由到任意一个后端节点。
但如果使用了session sticky,则一个用户的请求,会被负载均衡器路由到相同的后端节点:橙色用户路由路径,绿色用户路由路径,都是一致的。
具体的实现方式:在负载均衡器上实施一个IP?uid?xx-id?的路由策略即可,并不复杂。
听上去是一个很好的技术,可为什么如今它不流行了?
次要因素:后端节点在升级时需要经常重启,session会丢失,所有用户要重新登录。
画外音:用户量不大时,可以使用session复制技术,用户量大时内存会成为瓶颈,且复制会降低系统性能。
主要因素:目前流行的架构体系,设计的过程中非常看重扩展性。通常情况下,反向代理,web-server,service都要尽量做到无状态。任何请求落到任何节点均可处理,随时可以增减节点。
用户状态尽量存储在数据层,cache或者是db里,由所有无状态的上游web-server和service共享。
该设计原则与session sticky要求的,一个用户的请求必须落到一个web-server完全是相违背的。因此,session sticky的使用越来越少。
什么场景适合使用session sticky?
1. 游戏;
2. 无需后端存储,数据一致性要求不高的场景,例如:购物车;
3. 用户量不大,并发量不大,不想把架构搞得太复杂的业务场景;
你们公司选型了session sticky吗?
知其然,知其所以然。
思路比结论更重要。
补充阅读材料:
《负载均衡里的session sticky技术》
https://www.geeksforgeeks.org/what-are-sticky-sessions-in-load-balancing/
1. session sticky是什么;
2. session sticky的工作原理;
3. session sticky技术细节;
4. session sticky的优缺点;
5. session sticky的典型案例;
6. session sticky的替代方案;
文章不长,5分钟搞定。