单体应用重构:从单体到微服务的过渡指南
1. 服务拆分与数据库设计
在完成某些步骤后,代码已准备好将 ORDER 和 PRODUCT 拆分为独立的服务,每个服务都拥有自己的数据库。我们可以把单个数据库拆分成多个小数据库,实现每个服务对应一个数据库。
在数据库中,还有一个特殊部分——主数据(也被称为静态数据)。处理主数据有两种选择:
- 使用配置文件或代码枚举 :如果主数据长时间不会改变且记录数量较少,这种方式比较合适。但需要有人在数据变更时更新配置文件,而且该模块的异常可能会影响依赖它的其他系统部分。
- 将主数据封装在单独的服务中 :通过服务提供主数据,服务能及时感知数据变化并具备消费能力。请求该服务的过程与读取配置文件类似,虽然可能较慢,但只需按需执行。此外,还能支持不同的主数据集,便于维护每年不同的产品集。
2. 事务处理
随着外键的移除和数据库的拆分,我们需要设计自己的数据完整性处理机制。因为并非所有服务都能在各自的数据存储范围内成功完成事务。
例如,用户订购特定产品时,订单接受时库存充足,但记录订单时,产品服务可能因某种原因无法记录。可能是库存不足,也可能是系统内部通信故障。此时有两种处理方式:
- 重试 :稍后重试未完成的事务部分。这需要对整个事务进行编排,跟踪跨服务的单个事务。对于长时间运行的操作,这种方法可能有效;但对于非长时间运行的操作,重试可能导致其他事务被锁定或等待,使事务无法完成。
- 取消所有事务 :一旦整个事务集中的任何
超级会员免费看
订阅专栏 解锁全文
647

被折叠的 条评论
为什么被折叠?



