当前位置: 首页 > 知识库问答 >
问题:

微服务数据库设计问题

阎庆
2023-03-14

我刚刚开始将我的项目分离到小微服务中。我有一个处理 API 授权的微服务(检查 API 请求中提供的 apiKey 是否有效),因此为此,我有一个单独的 API 授权数据库,其中包含下表和以下架构:

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

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

如您所见,APIKey表链接到租户表。

我有另一个微服务,这个微服务处理租户的存储错误,因此需要引用租户表,但是因为租户表在单独的数据库中,我们实际上不能使用它。

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

有人能建议应该怎么做吗?

共有1个答案

王声
2023-03-14

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

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

可以说,由于您决定将其拆分为相应的微服务,这导致了更大的复杂性。另一方面,共享的体系结构可以解决您的问题,但同时也可以耦合您的体系结构。微服务存在的原因本质上是为了远离耦合,所以我建议回去评估一下是否决定为服务定义这些边界,看看你可以结合在一起以消除或最小化复杂性。

 类似资料:
  • 我计划将一个整体ASP. Net MVC应用程序迁移到微服务架构。 该应用程序位于教育领域,下面是当前拥有的子模块, 系统管理员 研究所管理员 候选人/学生门户 辅导员/教师门户 课程设置(可由辅导员或学院管理人员完成) 考试门户 报告门户[新] 视频会议门户[新] 为了实现微服务架构,我打破了当前的系统,如下图所示,并为每个模块创建DB。 在这里我面临一个问题,比如说考试 Db 目前与课程和科目

  • 想要改进此问题?更新问题,以便它仅通过编辑这篇文章来关注一个问题。 我计划使用微服务架构来实现我们的网站。我想知道在服务之间共享数据库是否正确,或者为每个服务使用单独的数据库是否更好。在这方面,我可以考虑为所有服务使用一个通用数据库吗?还是它违反了微服务体系结构的本质?

  • 如果一个微服务只知道它自己的领域,但是有一个数据流需要多个服务以某种方式交互,那该怎么做呢? 假设我们有这样的东西: 为论证起见,假设一个订单发货后,就应该创建发票。 我确实知道这可以被认为是高度基于意见的。但它也有具体的一面,因为微服务不应该做上述的事情。因此,必须有一个“根据定义它应该做什么”,这不是基于意见的。 开枪啊。

  • 微服务是一种分布式系统解决方案,推动细粒度服务的使用,这些服务协同工作,且每个服务都有自己的生命周期。因为微服务主要围绕业务领域建模,所以避免了由传统的分层架构引发的很多问题。 微服务也整合了过去十年来的新概念和技术,因此得以避开许多面向服务的架构中的陷阱。本书包含了业界使用微服务的很多案例,包括 Netflix、Amazon、Gilt 和 REA 等。这些组织都发现这种架构有一个很大的好处,就是

  • 我读过萨姆·纽曼的《微服务》一书,在关于分裂整体的一章中,他举了一个“打破外键关系”的例子,他承认跨API进行连接会更慢--但他接着说,如果你的应用程序足够快,它比以前慢有关系吗? 这似乎有点油嘴滑舌?人的经历是什么?您使用了哪些技术来使API联接执行得令人满意?

  • 1.1 MongoDB 元数据设计 1.1.1 接口设计 接口 功能 实现方法 /mongo/db/list 列举出所有 db 下的所有 collection 已有实现。 /mongo/db/table/desc 描述该集合的属性的名称和值域。 使用元数据表记录每个 collection 的元数据。 1.1.2 元数据表设计 字段名称 字段格式 数据库名称 字符串 表名称 字符串 属性名称和值域