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

Sharing huge data between microservices

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

应用程序如下所示;

我有 3 个微服务。

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

一个可能的解决方案是

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

那么在没有

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

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


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

你的问题不是"sharing huge data",而是你选择的分离微服务所依据的边界。

我可以从您的要求中看出,您选择分离的 3 个微服务(评论、验证、Import/Export)实际上在相同的上下文和业务领域中运行......即评论。

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

我假设评论彼此独立,因此验证评论只需要该评论,不需要其他评论。

您不想共享实体,这排除了共享数据库、Hadoop 集群或 Redis 等数据存储之类的东西。您也不希望复制数据,因此排除了普通文件副本或数据库级别的基于触发器的复制。

总而言之,我想说你的目标应该是流。让验证器从有关站点 A 的评论中请求所有内容,但不是批量请求,而是以单个或小包评论流的形式请求。

验证器现在可以一个接一个地处理评论,同时消耗恒定的内存和处理器。为了获得性能,您可以创建多个 Validator 实例,它们同时拉取不同的、分离的流片段。同样,如果单独一个无法足够快地响应请求,您可以创建评论微服务的多个实例。

Validator 不会保留此流,它只会产生错误并将它们存储或发送到某处;这应该满足您的不共享不重复要求。