Design patterns 微服务间的数据共享
当前架构: 问题: 我们在前端和后端层之间有两步流程Design patterns 微服务间的数据共享,design-patterns,architecture,microservices,aws-api-gateway,data-sharing,Design Patterns,Architecture,Microservices,Aws Api Gateway,Data Sharing,当前架构: 问题: 我们在前端和后端层之间有两步流程 第一步: 前端在microservice 1(MS1)上验证来自用户的输入 第二步: 前端向微服务2提交I1和更多信息 微服务2(MS2)需要验证来自前端的I1的完整性。如何避免对MS1进行新的查询?最好的方法是什么 我试图优化的流程删除步骤1.3和2.3 流程1: 1.1用户X向MS2请求数据(MS2_数据) 1.2用户X在MS1上保存数据(MS2_数据+MS1_数据) 1.3 MS1使用B2B HTTP请求检查MS2_数据的完整性
- 第一步: 前端在microservice 1(MS1)上验证来自用户的输入
- 第二步: 前端向微服务2提交I1和更多信息
- 1.1用户X向MS2请求数据(MS2_数据)
- 1.2用户X在MS1上保存数据(MS2_数据+MS1_数据)
- 1.3 MS1使用B2B HTTP请求检查MS2_数据的完整性
- 1.4 MS1使用MS2_数据和MS1_数据持久化数据库1并构建HTTP响应
- 2.1用户X已将数据(MS2_数据)存储在本地/会话存储器中
- 2.2用户X在MS1上保存数据(MS2_数据+MS1_数据)
- 2.3 MS1使用B2B HTTP请求检查MS2_数据的完整性
- 2.4 MS1使用MS2_数据和MS1_数据持久化数据库1并构建HTTP响应
MS2_数据只是一个实体SID,如产品SID或供应商SID,MS1必须使用它来维护数据完整性 可能的解决方案 其思想是将网关用作api网关请求处理,缓存来自MS1和MS2的一些HTTP响应,并将它们用作对MS2 SDK和MS1 SDK的响应。这样,MS1和MS2之间就不会直接进行通信(同步或异步),也可以避免数据重复 当然,上述解决方案仅适用于跨微服务的共享UUID/GUID。对于完整数据,事件总线用于以异步方式(事件源模式)跨微服务分发事件和数据 灵感:和 相关问题和文档:
- 如果您在这里唯一关心的是阻止前端对数据进行潜在的篡改,那么您可以为MS2发送到前端的数据包创建一种“签名”,并将签名与数据包一起传播到MS1。签名可以是数据包的散列,该数据包与从微服务共享的种子以确定性方式生成的伪随机数相连(因此,MS1可以在不需要额外B2B HTTP请求的情况下重新创建与MS2相同的伪随机数,然后验证数据包的完整性)
- 我想到的第一个想法是验证数据的所有权是否可以修改。如果MS1必须经常访问来自MS2的数据子集,则可以将该子集的所有权从MS2移动到MS1
- 在理想情况下,微服务应该是完全独立的,每个微服务都有自己的持久层和一个复制系统。您说代理不是可行的解决方案,那么共享数据层呢
希望有帮助 从问题和评论中,我了解到您正试图重新排列块以提高系统性能。如图所述,您建议网关查询MicroService 2,而不是MicroService 1查询MicroService 2,然后再查询MicroService 1,向其提供MicroService 2中的信息 因此,我看不出这将如何显著提高系统性能,但这种变化似乎只是改变了逻辑 为了纠正这种情况,应提高关键微服务2的性能。这可以通过分析和优化微服务2来实现