在微服务之间共享海量数据

ygk*_*ygk 0 microservices

我正在设计微服务架构中的评论分析平台。

应用程序如下所示;

  • 从电子商务站点a(site-a)作为excel文件检索的所有产品评论
  • 评论用Excel上传到系统
  • 分析代理可以列出所有评论,对其进行编辑,删除或批准
  • 分析代理可以导出网站-a的所有评论
  • 基于自动正则表达式的检查将应用于上载和编辑的每个审阅。

我有3个微服务。

  • 评论:负责Review Crud操作以及类似于批准/拒绝的操作。
  • 验证:负责定义和应用审阅验证规则。
  • 导出/导入:导出服务在给定站点名称的情况下导出大型文件(例如site-a)

问题出在某个时候,验证服务需要获得站点a的所有评论,应用验证规则并生成错误(如果有)。我知道共享数据库架构和实体会破坏微服务架构。

一种可能的解决方案是

  • 每当验证服务需要对站点进行审阅时,它都会请求网关,网关会将请求重定向到“审阅”服务并采取响应。

这种方法的两个可能的缺点

  • 验证服务知道有关网关?它带来依赖吗?
  • 如果我对某个网站有1b条评论,那么通过其余请求获得所有评论可能是一个问题。(或者,我可以从验证服务到网关发出分页请求。)

那么,在没有服务的情况下在微服务之间共享海量数据的最佳实践是什么?

  • 共享实体
  • 和复制数据

我阅读了很多有关使用消息传递队列的信息,但是我认为使用消息传递队列共享千兆字节的数据并不好。


编辑1:除了共享实体,还可以将数据存储区与rest API一起使用是一种解决方案?假设我正在使用mongodb,而不是在微服务之间共享我的实体对象,我可以使用mongo的rest接口(http://restheart.org/)并尽可能查询数据。

Bis*_*hoy 5

这里的问题不是“共享大量数据”,而是您选择基于其分离微服务的边界。

从您的需求中可以看出,您选择分离的3个微服务(评论,验证,导入/导出)实际上是在相同的上下文和业务域中运行的,即评论。

我鼓励您重新考虑您的设计决策,并考虑将评论作为一个微服务,作为一个黑盒子来处理所有评论操作和逻辑。