知识卡片

REST无状态与可缓存原则之间的内在张力

普通读书笔记卡

内容

REST的无状态原则要求服务端不维护上下文,每次请求都要携带完整的必要信息, 会话状态交给客户端保管——这能提升系统的可见性、可靠性和横向伸缩能力,是 分布式计算中价值很高的设计。但无状态有代价:原本一次(或少量)请求能完成 的事,现在可能要多次请求,或者每次请求携带冗余信息,”降低了系统的网络性”。 REST用可缓存原则来缓解这个矛盾:允许客户端和中间代理把部分服务端应答缓存 起来,前提是服务端的应答要明确标注是否可缓存、能缓存多久,避免客户端拿到 过期数据。分层系统原则进一步放大了缓存的价值——客户端不需要知道自己连的 是最终服务器还是路径上的中间服务器(典型如CDN),中间层可以统一做负载均衡 和共享缓存。三条原则连起来看是一条完整的因果链:无状态带来伸缩性但牺牲 网络效率,可缓存和分层系统联手把这部分效率损失补回来。这提示一个可迁移的 架构思路:某个设计选择的代价,往往需要另一个配套设计来对冲,而不是孤立 评价单条原则的好坏。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第2章"访问远程服务"2.2.2节 "RESTful的系统"(源文件:_epub-src对应OEBPS/Text/chapter21.xhtml) - 结论依据:原文分别论述无状态原则提升可靠性但"降低网络性"、可缓存原则 通过允许客户端/代理缓存应答来缓解这一矛盾、分层系统原则(如CDN)进一步 依托缓存和负载均衡提升可扩展性,三者环环相扣,直接支撑本卡片"配套设计 对冲代价"这一结论。 - 原始内容:无状态服务虽然提升了系统的可见性、可靠性和可伸缩性,但降低了 系统的网络性……为了缓解这个矛盾,REST希望软件系统能够如同万维网一样, 允许客户端和中间的通信传递者将部分服务端的应答缓存起来。