浅谈无状态这件事 Stateless

无状态stateless指的是web客户端在发送请求时,到底需不需要一直带着验证资讯,或者是所谓的上下文。这影响到响应的服务器是否需要为同一台。若响应的服务器为不同台时,请求又刚好是需要上下文,则会出现需要重复提交验证的环节。这时若请求不需要上下文,则即便请求发给不同台服务器也能处理,这就是无状态的表现。

甚麽时候会需要使用无状态呢?就是要实行水平扩展。流量一多,做了负载均衡,则服务的主机就会轮替、交互提供服务。

但无状态只是一个概念,有多种实现的方法,其实跟解偶类似。解偶是让服务独立不相依,恰恰符合了无状态的独立不相依。

具体实现无状态的方法有:
一、每次请求都带有完整的验证资讯在cookie中,但不建议,因为cookie是储存在客户端,容易被看到,甚至破解。若遇到有心人,可能有资讯暴露及DDos的风险。
二、将状态存在服务器的session中,让客户端的cookie只存放sessionid,而session内容则存在资料库。django默认的储存方式好像就是资料库,所以理论上用django做的API服务器是可以直接水平扩展的,任一台服务器在辨识请求时,只要看传入的sessionid并比对同一张session储存表即可获得客户端的状态
三、单独创建一个session服务器,并且将它扩展多台。但理论上用django的session中间件,就可看作一个独立的session服务器,换句话说,十台django web服务器、就有十个session服务器。乍看下没有解偶,但这时解偶不重要,因为session与api都在同一个容器内运行,不管哪一个负荷大了都一样是换一个容器负载。

以上理论待实作验证


<<:  [Day 24] IIOT资讯安全规划

>>:  iOS APP 开发 OC 第二十二天,Extension

Day19 CSS Transform

设定transform属性可以使文字或图像有旋转(rotate)、缩放(scale)、倾斜(ske...

敏捷(Agile)

敏捷 敏捷心态(AGILE MINDSET) 敏捷是一种由价值观,原则和实践组成的心态。满足敏捷思维...

流程与制度 - 打造一个「人」的系统

谈过故事、人、与文化,我们要到最後的一个元素 — 流程与制度。最後来谈流程与制度,并不是因为他们不...

Day16:[搜寻演算法]Binary search - 二分搜寻法

利用将资料切一半的方式来做搜寻,举例来说,如果要从数字1–100猜终极密码,如果采用线性搜寻法就是...

[Angular] Day22. Common Routing Tasks(二)

在上一篇中介绍了如何透过 router 传递参数,也介绍了怎麽建立嵌套的 route 等等,在本篇中...