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

Microservices 部署微服务-初始数据迁移,microservices,Microservices,假设我们有微服务A(MS A)和微服务B(MS B)。 B女士有关于产品的数据。MS A需要MS B的产品名称 每次添加、更新或删除产品时,MS B都会将一条消息放到消息队列中。 MS A已订阅该队列,因此它可以更新自己的内部状态 现在我的问题是: 当我们第一次将MS A部署到生产环境时,如何填充其内部状态? 我找不到任何关于可能的解决方案的利弊的文档。 我可以想到: 在数据库级别导出/导入 优点:工作量不大 缺点:如果在导出/导入过程中对MS A的数据进行更改,可能会丢失数据 实现对GetDa

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

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

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

  • 在数据库级别导出/导入

    优点:工作量不大

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

  • 实现对GetData和GetDataChangedSince的调用

    优点:故障保护

    缺点:很多工作


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

    您可以使用以下工作流:

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

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