我正在设计一个微服务架构的评论分析平台。
应用程序工作方式如下:
- 从电商网站A(site-a)检索所有产品评论,并以excel文件形式上传。 - 评论通过excel文件上传到系统中。 - 分析代理可以列出所有评论,编辑其中一些评论,删除或批准。 - 分析代理可以导出site-a的所有评论。 - 对每个上传和编辑的评论都应用基于正则表达式的自动化检查。
我有3个微服务:
- Reviews:负责评论CRUD操作以及类似批准/拒绝的操作。 - Validations:负责定义和应用评论上的验证规则。 - Export/Import:导出服务根据网站名称(如site-a)导出大型文件。
问题在于,某些时候,验证服务需要获取site-a的所有评论,应用验证规则并生成错误(如果有)。我知道共享数据库模式和实体会破坏微服务架构。
一种可能的解决方案是,每当验证服务需要site-a的评论时,它请求网关,网关将请求重定向到Reviews服务并获取响应。
应用程序工作方式如下:
- 从电商网站A(site-a)检索所有产品评论,并以excel文件形式上传。 - 评论通过excel文件上传到系统中。 - 分析代理可以列出所有评论,编辑其中一些评论,删除或批准。 - 分析代理可以导出site-a的所有评论。 - 对每个上传和编辑的评论都应用基于正则表达式的自动化检查。
我有3个微服务:
- Reviews:负责评论CRUD操作以及类似批准/拒绝的操作。 - Validations:负责定义和应用评论上的验证规则。 - Export/Import:导出服务根据网站名称(如site-a)导出大型文件。
问题在于,某些时候,验证服务需要获取site-a的所有评论,应用验证规则并生成错误(如果有)。我知道共享数据库模式和实体会破坏微服务架构。
一种可能的解决方案是,每当验证服务需要site-a的评论时,它请求网关,网关将请求重定向到Reviews服务并获取响应。
这种方法可能存在的两个缺点是:
- 验证服务是否了解网关?这会带来依赖性吗?
- 如果我有10亿条站点评论,通过rest请求获取所有评论可能是一个问题。(或者不是,我可以从验证服务到网关进行分页请求。)
那么,在不共享实体并且不重复数据的情况下,共享大量数据的最佳做法是什么?
- 使用消息队列的做法很多,但我认为在我的情况下,使用消息队列分享吉格字节的数据并不好。
编辑1:是否可以使用带有REST API的数据存储解决问题,而不是共享实体? 假设我正在使用MongoDB,我可以使用mongo的rest接口(http://restheart.org/)而不是在微服务之间共享实体对象,并尽可能查询数据。