构建可演化的软件架构:数据管理与架构原则
1. 数据管理在架构中的挑战与策略
1.1 数据完整性与事件驱动同步
在数据管理中,确保信息删除能传播到可能仍引用该删除实体的其他服务至关重要。事件驱动架构中的一些模式可处理这类后台任务。例如,当用户界面通过交易员 blotter 服务拒绝一笔交易时,它会在持久消息队列上传播一条消息,所有感兴趣的服务都会监听该队列,并根据需要更新或删除更改。不过,数据库中的引用完整性虽然强大,但有时会造成不必要的耦合,需要权衡其利弊。
1.2 数据复制问题
当团队习惯使用单一关系数据库时,往往不会将读写操作分开考虑。但在微服务架构中,必须仔细区分哪些服务可以更新信息,哪些只能读取信息。常见的情况是多个服务需要访问系统的关键部分,如参考数据、审计表、配置信息和客户数据等。一种解决方案是将表共享给所有感兴趣的服务,这种方式虽然方便,但违反了微服务架构避免服务与公共数据库耦合的原则。一旦表结构发生变化,会影响到与之耦合的服务。另一种方法是将每个共享信息建模为一个独立的服务,但这可能会导致服务间通信过多,影响性能。还有一种常见做法是使用进程内缓存进行只读访问,左侧的服务组件“拥有”数据,每个感兴趣的服务在启动时读取并缓存感兴趣的数据,并设置合适的缓存更新频率。若右侧服务需要更新共享值,可通过向拥有该数据的服务发送请求来实现。
1.3 替换触发器和存储过程
数据团队常用的存储过程,虽然在操作数据方面功能强大且性能高,但在现代软件工程实践中存在一些挑战,如难以进行单元测试、重构支持差以及将行为与源代码中的其他行为分离等。向微服务迁移时,由于数据不再集中在单个数据库中,数据团队通常需要重构存储过程
超级会员免费看
订阅专栏 解锁全文

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



