请阅读我一直有这个问题,并分享你的想法和解决方法。
我们目前正在构建一个由多个微服务组成的系统。
为简单起见,假设如下场景:
有---------| microservice A | microservice B | microservice C |
---------| RDS for A | | RDS for B | | RDS for C|
现在我们遇到了一个问题,我们需要
Column Amount
从RDS A
的Table TA1
记录中排序到RDS C
的Table TC1
记录中
如果这是一个单一的DB应用程序,我们通常会在共同的IDTA1.id = TC1.ta1_id
上继续Joining
两个表
由于这些微服务不能共享一个公共DB,这违背了微服务的模式。对于这些用例,最好的解决方案是什么?
一个新的微服务来聚合数据?如果是这样,我们如何处理内存错误,如果计划加载每条记录,而不是做一个连接,即两个选择查询。由于这些微服务不能共享一个公共数据库,这违背了微服务的模式。这是一个模式,它有上下文和假设
- 您确定您的服务确实是独立的服务,而不是单个服务的各个方面吗?如果您发现服务共享大量数据,那么可能是重新考虑您的服务边界的好时机
- 仍然存在从多个服务获取数据有意义的报告场景。在这些情况下,我使用聚合报告模式,其中发生的事件作为只读副本发送到中央数据库,该数据库以报告友好的方式组织数据
- 另一个可以做的事情是缓存来自服务中的其他服务的数据-如果它是作为事件发布的(最好是不可变的和幂等的-所以它总是正确的),只要你有一些方法来理解数据是陈旧的
- 最后-有时只做"客户端"是有意义的;加入esp。如果它确实只是一次性的
因为你的问题真的很一般-很难说哪个选项对你来说是正确的