微服务之间的数据共享

Leo*_*nel 30 architecture design-patterns data-sharing microservices aws-api-gateway

当前架构:

在此输入图像描述

问题:

我们在前端和后端层之间有两步流程.

  • 第一步:前端在微服务1(MS1)上验证用户的输入I1
  • 第二步:前端向微服务2 提交I1和更多信息

微服务2(MS2)需要验证来自前端的I1的完整性.如何避免对MS1的新查询?什么是最好的方法?

流程我正在尝试优化删除步骤1.3和2.3

流程1:

  • 1.1用户X从MS2请求数据(MS2_Data)
  • 1.2用户X在MS1上保留数据(MS2_Data + MS1_Data)
  • 1.3 MS1使用B2B HTTP请求检查MS2_Data的完整性
  • 1.4 MS1使用MS2_Data和MS1_Data来持久化数据库1并构建HTTP响应.

流程2:

  • 2.1用户X已经存储在本地/会话存储器中的数据(MS2_Data)
  • 2.2用户X在MS1上保留数据(MS2_Data + MS1_Data)
  • 2.3 MS1使用B2B HTTP请求检查MS2_Data的完整性
  • 2.4 MS1使用MS2_Data和MS1_Data来持久化数据库1并构建HTTP响应.

途径

一种可能的方法是在MS2和MS1之间使用B2B HTTP请求,但我们将在第一步中复制验证.另一种方法是将数据从MS1复制到MS2.然而,由于数据量和它的波动性,这是令人望而却步的.复制似乎不是一个可行的选择.

我认为更合适的解决方案是前端有责任获取微服务2上的微服务1所需的所有信息并将其传递给微服务2.这将避免所有这些B2B HTTP请求.

问题是微服务1如何信​​任前端发送的信息.也许使用JWT以某种方式对来自微服务1的数据进行签名,并且微服务2将能够验证该消息.

注意 每次微服务2需要来自微服务1的信息时,执行B2B http请求.(HTTP请求使用ETAG缓存控制:max-age).怎么避免这个?

建筑目标

在此输入图像描述

微服务1需要来自微服务2的数据,以便能够在MS1数据库上保持MS1_Data和MS2_Data,因此使用代理的ASYNC方法不适用于此.

我的问题是,是否存在设计模式,最佳实践或框架,以实现这种推力沟通.

当前体系结构的缺点是在每个微服务之间执行的B2B HTTP请求的数量.即使我使用缓存控制机制,每个微服务的响应时间也会受到影响.每个微服务的响应时间至关重要.这里的目标是存档更好的性能,以及如何使用前端作为网关在多个微服务之间分配数据,但使用推力通信.

MS2_Data只是MS1必须用于维护数据完整性的产品SID或供应商SID的实体SID.

可能解决方案

在此输入图像描述

这个想法是使用网关作为api网关请求处理,它将缓存来自MS1和MS2的一些HTTP响应,并将它们用作对MS2 SDK和MS1 SDK的响应.这样,在MS1和MS2之间不直接进行通信(SYNC或ASYNC),也避免了数据复制.

当然,上述解决方案仅适用于跨微服务的共享UUID/GUID.对于完整数据,事件总线用于以异步方式(事件源模式)跨微服务分发事件和数据.

灵感:https://aws.amazon.com/api-gateway/https://getkong.org/

相关问题和文档:

Leo*_*nel 3

检查我的问题的可能解决方案部分:

这个想法是使用网关作为 api 网关请求处理,它将缓存来自 MS1 和 MS2 的一些 HTTP 响应,并将它们用作对 MS2 SDK 和 MS1 SDK 的响应。这样,MS1 和 MS2 之间就不会直接进行通信(同步或异步),也避免了数据重复。

灵感: https: //aws.amazon.com/api-gateway/https://getkong.org/