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

时间:2018-01-19 10:13:43

标签: microservices

假设我们有微服务A(MS A)和微服务B(MS B)。 MS B有关于产品的数据。 MS A需要MS B的产品名称。

每次添加,更新或删除产品时,MS B都会在消息队列中放置消息。 MS A订阅了该队列,因此它可以更新它自己的内部状态。

现在我的问题: 当我们第一次将它部署到生产中时,我们如何填补MS A的内部状态? 我找不到任何有关可能解决方案的利弊的文档。 我能想到:

  1. 在数据库级别导出/导入。

    优点:工作量不大。

    缺点:如果在导出/导入过程中更改了MS A的数据,可能会丢失数据。

  2. 实现对GetData和GetDataChangedSince的调用

    优点:失败保险

    缺点:很多工作

  3. 还有其他选择吗?还有其他优点/缺点吗?

2 个答案:

答案 0 :(得分:0)

您可以使用以下工作流程:

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

答案 1 :(得分:0)

听起来您的架构中缺少服务/ API调用。将服务转移到生产中应该与从故障中恢复并没有什么不同,并且不需要任何额外的步骤。也许消息应该由另一个服务从队列中消耗,然后可以查询该消息以获得完整的产品列表。