在从单一遗留应用程序的增量迁移中处理状态数据
dealing with state data in an incremental migration from a monolithic legacy app
我有一个非常大的单一遗留应用程序,我的任务是将其分解为不同架构上的许多上下文限制的应用程序。我的管理层正在推动新旧应用程序协同工作,直到所有遗留功能都迁移到当前架构。
不幸的是,与许多单体应用程序的情况一样,这个应用程序为每个用户交互维护了一组非常大的状态数据,并且必须随着用户使用该功能而进行维护。
我的问题是,我可以通过哪些方式负责任地满足混合 legacy/non-legacy 架构,以便在未来所有新的独立应用程序都无可救药地依赖于这种共享状态模型?
我最初的想法是将状态数据写入某种类型的缓存中,旧应用程序和新应用程序都可以访问该缓存,以便它们可以协调工作,直到新应用程序具有独立运行所需的基础架构.我对这种方法非常怀疑,所以我希望得到一些反馈或看待问题的新方法。
每当我处理这种情况时,我都会对数据采用双写入方法,因为它主要是数据迁移问题。当您拆分每个功能块时,您将有效地拥有两个数据模型,直到遗留模型被完全弃用。基本步骤是:
- 拆分组件后,开始将数据写入旧数据库和新数据库。
- 用你需要的旧数据库回填新数据库。
- 验证两者具有相同的数据。
- 将依赖这部分数据的所有内容更改为从新的component/database读取。
- 将所有依赖这部分数据的东西改写到新的component/database。
- 弃用旧数据库中的数据,即。备份然后删除它。这将确认您已迁移该块。
优点是不会丢失数据或功能丢失,并且您有时间测试为组件选择的每个数据模型,看看它是否适用于应用程序流程。分割一个整体可能很棘手,决定你的限界上下文所在的位置是至关重要的,而且没有完美的科学。始终牢记您需要在何处扩展应用程序以及需要执行哪些部分。
我有一个非常大的单一遗留应用程序,我的任务是将其分解为不同架构上的许多上下文限制的应用程序。我的管理层正在推动新旧应用程序协同工作,直到所有遗留功能都迁移到当前架构。
不幸的是,与许多单体应用程序的情况一样,这个应用程序为每个用户交互维护了一组非常大的状态数据,并且必须随着用户使用该功能而进行维护。
我的问题是,我可以通过哪些方式负责任地满足混合 legacy/non-legacy 架构,以便在未来所有新的独立应用程序都无可救药地依赖于这种共享状态模型?
我最初的想法是将状态数据写入某种类型的缓存中,旧应用程序和新应用程序都可以访问该缓存,以便它们可以协调工作,直到新应用程序具有独立运行所需的基础架构.我对这种方法非常怀疑,所以我希望得到一些反馈或看待问题的新方法。
每当我处理这种情况时,我都会对数据采用双写入方法,因为它主要是数据迁移问题。当您拆分每个功能块时,您将有效地拥有两个数据模型,直到遗留模型被完全弃用。基本步骤是:
- 拆分组件后,开始将数据写入旧数据库和新数据库。
- 用你需要的旧数据库回填新数据库。
- 验证两者具有相同的数据。
- 将依赖这部分数据的所有内容更改为从新的component/database读取。
- 将所有依赖这部分数据的东西改写到新的component/database。
- 弃用旧数据库中的数据,即。备份然后删除它。这将确认您已迁移该块。
优点是不会丢失数据或功能丢失,并且您有时间测试为组件选择的每个数据模型,看看它是否适用于应用程序流程。分割一个整体可能很棘手,决定你的限界上下文所在的位置是至关重要的,而且没有完美的科学。始终牢记您需要在何处扩展应用程序以及需要执行哪些部分。