结论:database-per-service 让每个服务私有自己的数据存储,其他服务只能通过 API 访问。它解决共享数据库带来的耦合:schema 变更互相牵制、无法独立扩缩容与技术选型、跨服务的隐式 join 让边界名存实亡。独立数据库是服务"独立部署、独立演进"的前提。

展开:新麻烦正是分布式系统的经典难题:1)跨服务一致性——本地 ACID 没了,多步写要靠 Saga(编排/协同两种形态)+ 补偿,或 outbox 模式保证"写库 + 发消息"原子性;2)跨服务查询——不能 join 了,用 API 组合(BFF/GraphQL 聚合)、CQRS(物化视图冗余各服务数据)、事件溯源投影来重建查询能力;3)数据冗余与最终一致——订单服务冗余用户快照,靠事件同步,要接受延迟窗口内的不一致并设计对账;4)运维成本——N 个数据库的备份、监控、版本升级。落地纪律:先拆服务边界再拆库(共享库阶段作为过渡但要禁止跨服务直接读表),拆库优先拆写多读少的聚合根。易错点:"一个物理实例多个 schema"算不算独立——逻辑隔离是底线,故障隔离(连接池打满互相影响)和独立演进才算达标;分布式事务别轻易上 2PC(阻塞、可用性差),互联网场景 Saga 是主流。

追问方向:outbox 模式的实现(CDC/Debezium vs 轮询)、monolith-first 与微服务先行的争论边界。