微服务数据库设计问题

时间:2018-10-12 22:00:59

标签: microservices

我才刚刚开始将我的项目分成几个微服务。我有一个处理API授权的微服务(检查API请求中提供的apiKey是否有效),为此,我有一个单独的API授权数据库,其中包含具有以下模式的下表:

APIKey: ApiKey(VARCHAR,PK) TenantID(INT,FK)

租户: 租户ID(INT,PK) 名称(VARCHAR)

如您所见,APIKey表已链接到Tenant表。

我有另一个微服务,此微服务处理租户的存储错误,因此需要引用租户表,但是由于租户表位于单独的数据库中,因此我们无法实际使用它。

我曾考虑过创建一个Tenant服务并只为Tenant提供一个DB,但这会导致其他微服务上的数据完整性问题,这需要对Tenant进行一些引用,所以我不确定该怎么做。

有人可以建议应该怎么做吗?

1 个答案:

答案 0 :(得分:0)

针对租户错误的微服务似乎是一种纳米服务。听起来您实际上是在使用它进行监视。还有更多的监视解决方案,例如Splunk和ELK,它们可以执行更多的常规日志记录。如果您还有其他微服务,它们也可以将错误记录到它们。

如果使用监视解决方案,则不需要租户错误微服务,也不需要按照建议的租户微服务。但是,如果您想继续使用各个服务,可以将错误事件和租户事件发布到从API授权服务到租户微服务或租户错误服务的队列中。因此,您将复制数据,并且需要制定策略以使数据保持一致。

可以说,由于您决定如何将其拆分为相应的微服务,因此这会导致更高的复杂性。另一方面,共享的体系结构可以解决您的问题,但同时又会使您的体系结构耦合。存在微服务的原因是要从本质上摆脱耦合,因此我建议回头评估是否决定为服务定义界限的决定,并查看可以结合在一起以消除或最小化复杂性的方法。