微服务部署-初始数据迁移

3
假设我们有微服务A(MS A)和微服务B(MS B)。 MS B有关于产品的数据。MS A需要MS B的产品名称。
每次添加、更新或删除产品时,MS B都会将消息放入消息队列中。 MS A已订阅了该队列,因此它可以更新自己的内部状态。
现在我的问题是: 当我们第一次将它部署到生产中时,我们如何填充MS A的内部状态? 我找不到任何关于可能解决方案的优缺点的文档。 我可以考虑以下几种:
1.数据库级别的导出/导入。 优点: 不需要太多工作。 缺点: 如果在导出/导入期间对MS A的数据进行更改,则可能会丢失数据。
2.实现GetData和GetDataChangedSince调用。 优点: 容错性强。 缺点: 需要大量工作。
还有其他选项吗?还有其他的优缺点吗?
2个回答

0
您可以使用以下工作流程:
  • 准备微服务B将事件推送到队列中,或者如果它已经在向队列推送,则停止它;相反,它将推送到循环缓冲区(当缓冲区满时会被重写),并等待来自微服务A的信号。
  • 将微服务A部署到生产服务器上,但您不需要从任何地方引用它;它只是运行,并等待队列中的事件。
  • 运行一个脚本,从微服务B获取所有产品名称,并将它们作为模拟事件推送到队列中;当它完成产品名称时,它会向微服务B发出信号(可选择告知日期、序列号或任何去重技术,以检测重复事件)。
  • 微服务B然后将比微服务A最后推送的更新的缓冲区事件复制到队列中(或者它自己从队列中找出最后一个事件),然后忽略缓冲区,并继续正常工作。

0

听起来你的架构中缺少了一个服务/API调用。将服务投入生产应该与从故障中恢复没有任何区别,也不需要任何额外的步骤。也许消息应该由另一个服务从队列中消费,然后可以查询完整的产品列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接