知识卡片

微服务数据去中心化用一致性代价换取服务独立

普通读书笔记卡

内容

微服务明确提倡数据按领域分散管理、各自存储,而不是像单体那样共用一个中心化 数据库。原因不是技术上做不到中心化存储,而是同一个数据实体在不同领域视角下 的抽象形态天然不同——例如网上书店里的”书”,销售领域关心价格,仓储领域关心 库存数量,展示领域关心简介信息。如果坚持中心化存储,所有领域都得往同一张表 上修改映射,会让原本毫不相干的服务因为共享一份数据而相互牵制,丧失独立性。 中心化存储天生更容易保证一致性,去中心化则天然会引入跨服务一致性问题,很多 时候连传统事务处理都用不上(见[[单体系统的真正短板是自治隔离能力而非可拆分 能力]]中提到的隔离代价)——但作者认为”两害相权取其轻”,为了换取服务独立性, 接受一致性上的额外代价仍然是值得的。这是微服务设计中一个值得记住的取舍范式: 当”数据该归谁管”这个问题的答案在不同视角下本就不同时,勉强维持单一权威反而 会制造更大的耦合。

参考来源

- 位置:《凤凰架构:构建可靠的大型分布式系统》第1章"服务架构演进史"1.4节 "微服务时代"(源文件:_epub-src对应OEBPS/Text/chapter8.xhtml) - 结论依据:原文用Bookstore应用中"书"在销售/仓储/商品展示三个领域的不同 抽象形态为例,说明中心化存储会让不同服务相互影响、丧失独立性,并明确 指出"两害相权取其轻,即使有一些必要的代价,但仍是值得使用的",直接支撑 本卡片"用一致性代价换服务独立"这一结论。 - 原始内容:微服务明确提倡数据应该按领域分散管理、更新、维护、存储……同一个 数据实体在不同服务的视角里,它的抽象形态往往是不同的……如果使用中心化 存储,所有领域都必须修改和映射到同一个实体之中,这很可能使不同服务相互 影响而丧失独立性……两害相权取其轻,即使有一些必要的代价,但仍是值得使用的。