Leo*_*nel 30 architecture design-patterns data-sharing microservices aws-api-gateway
当前架构:
问题:
我们在前端和后端层之间有两步流程.
微服务2(MS2)需要验证来自前端的I1的完整性.如何避免对MS1的新查询?什么是最好的方法?
流程我正在尝试优化删除步骤1.3和2.3
流程1:
流程2:
途径
一种可能的方法是在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/
相关问题和文档:
检查我的问题的可能解决方案部分:
这个想法是使用网关作为 api 网关请求处理,它将缓存来自 MS1 和 MS2 的一些 HTTP 响应,并将它们用作对 MS2 SDK 和 MS1 SDK 的响应。这样,MS1 和 MS2 之间就不会直接进行通信(同步或异步),也避免了数据重复。
灵感: https: //aws.amazon.com/api-gateway/和https://getkong.org/