Glean 拾遗
最近收录

2 条 · 按时间

09-23

被长期低估的一致性:拆服务之前先算清 ACID 的账

作者指出,微服务与非 ACID 数据库流行之际,最容易被忽略的代价是 ACID 事务。文章以「一个用户必须有一个 profile」为约束,展示单库事务如何同时保证原子性与隔离性:创建、外键校验都在一个事务内完成。一旦把 users 与 profiles 拆成两个服务,原子性、隔离性、外键约束全部失效。作者逐一推演失败路径:profile 服务失败会留下裸 user;补写的 delete 回滚本身会失败,或进程断电留下中间态;即使两个服务 100% 可靠,并发线程仍会看到 user 无 profile 并重复创建;外键失效后 profile 可指向已删除或改过的 user ID;定时清理 dangling 数据也仍存在不一致窗口。结论是应用层的补偿逻辑最终等价于重造一个半成品、带 bug 的分布式 ACID 数据库,采用微服务或 NoSQL 之前应先理解自己引入了什么复杂度。适合准备拆分服务或迁移 NoSQL 的后端工程师。

kevinmahoney.co.uk · 5 min · Database · Distributed Systems · Microservices
09-16

拆开微服务,里面是 Parnas 1971 年的模块

Ted Neward 逐条拆解微服务的卖点:文中引用的六条好处,两条来自微服务文献,两条来自二十年前的 EJB 宣传,两条来自四十多年前的 Oracle Tuxedo 文档。剥掉包装后剩下的是 1971 年 Parnas 论文里的“模块”——独立构建、版本化、部署、可复用的代码单元;CLR 的 assembly、JVM 的 JAR、操作系统的动态库都是它,Unix 的 pipes-and-filters 早在 70 年代就在讲同一件事。作者认为企业真正买到的是组织清晰度:小团队自己掌握分析、测试、数据、部署等依赖,不再被 DBA、QA、基础设施团队阻塞,代价是团队必须具备全套技能并承担 on-call。技术代价则是把进程内模块调用换成跨网络调用,延迟增加五到七个数量级,并且撞上分布式计算的谬误——加节点只会让它更糟。结论:模块或独立进程加统一 API 约定即可,组织依赖要在组织层面解决。适合架构师与技术负责人。

blogs.newardassociates.com · 15 min · Distributed Systems · Microservices · Modularity