大量数据的微服务和连接

4
尽管我发现进入微服务技术非常吸引人且有许多可获得的奖励,但我遇到了一个问题,即当你传统地基于JPA编写查询时,可能会连接客户与地址(这只是一个例子)。
问题在于,我们需要返回许多客户记录(每次100条),其中每个地址都分配给一个客户(假设为一对一关系)。
使用Join和JPA很容易解决此问题,但在微服务中,实际上我们需要两个微服务,一个用于客户,一个用于地址。问题是,我们可能首先获取客户记录,但是如何返回与每个客户相关的所有地址记录,因为地址记录依赖于正在查询的客户呢?
我认为我们不能在每个微服务中使用单个查询来返回每个地址,除非我们使用第一个结果中的每个客户ID,因为这种方法会带来很多问题。
由于查询条件可能不涉及到两个微服务(例如:如果我们按姓氏搜索),因此我们没有单个标准值可以在两个微服务中使用,从而使我们能够轻松地将数据映射到网关中。
那么我们该怎么办呢?
2个回答

1
如果你发现自己经常需要返回大型报告式列表(用更好的术语来说),那么提供一个“搜索”微服务可能是答案。
如果这两个实体明显不属于一起(你可以从你的例子中争辩,地址只是客户的属性,所以他们为什么会在两个不同的地方),那么维护一些归一化或ViewModel友好的表示形式将是合理的。

我曾考虑过这样做,并在每个微服务中保留关系,但如果引入新实体(例如带有地址的其他形式的人),则可能存在数据冗余的风险,因此每个微服务数据库都将包含2个地址表,它们共享相同的模式但包含自己的数据。我想这是一个权衡。正如您所提到的,搜索在某些情况下可能有效,但是即使搜索结果返回了更大的子集行(可能是100行),我也不确定搜索是否能解决问题。感谢您的意见。 - Gary Waddell

0

微服务架构鼓励复制,但为粒度级别的可扩展性打开了大门。在传统的单体应用中,这是不可能的,因为需要整体扩展单体应用,这是不明智的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接