【发布时间】:2015-06-28 00:05:55
【问题描述】:
对于将单体应用程序拆分为微服务的人,您如何处理拆分数据库的难题。出于性能和简单性的原因,我从事过的典型应用程序进行了大量的数据库集成。
如果您有两个逻辑上不同的表(如果您愿意的话,是有界上下文),但您经常对大量数据进行聚合处理,那么在单体应用中,您很可能会避开面向对象,而是使用您的数据库的标准 JOIN 功能,用于在将聚合视图返回到您的应用层之前处理数据库上的数据。
您如何证明将此类数据拆分为微服务的合理性,在这些微服务中您可能需要通过 API 而不是在数据库中“加入”数据。
我读过 Sam Newman 的微服务一书,在关于拆分 Monolith 的章节中,他举了一个“打破外键关系”的例子,他承认跨 API 进行连接会更慢 - 但他继续说如果你的应用程序足够快,它是否比以前慢?
这似乎有点油嘴滑舌?人们的经验是什么?您使用了哪些技术来使 API 连接的性能可接受?
【问题讨论】:
-
好问题,我遇到了同样的问题,我最终获得了物化视图并对此进行了连接。我不喜欢它,但我想这对微服务来说将是一个挑战。没有正确的方法可以做到这一点,它只是一种设计选择。我知道很多人说我们可以有一个具体化的视图,但是汇总的响应成为一个问题。如果您发现更好的东西,请告诉我。
-
我知道这是旧的,但是,这是 graphql 解决的问题吗?我也在研究这个进行分段迁移,似乎 graphql 是使这个无缝的方法。
-
在某些时候,你应该意识到教条主义不是要走的路。 GraphQL 是在数据源之外进行聚合的一个不错的例子,它通常工作得很好。
标签: database integration microservices