【问题标题】:Microservices resource management微服务资源管理
【发布时间】:2020-01-31 23:59:00
【问题描述】:

假设我们有一组微服务(每个服务都有自己的数据库)。我们的客户是其他公司。每个客户都希望拥有自己的数据库。

在这种情况下,每个服务都有许多数据库。是否存在管理资源的最佳实践?

我认为所有服务都可以是无状态的。任何公司(我们的客户)都必须有自己的配置和资源描述。示例:数据库、文件存储等。

调用任何服务都必须激活资源上下文。并且所有后续服务都必须使用此上下文。

示例。 有人在他的浏览器中打开网站:clientCompany.com。 我们的第一个服务(例如 AuthenticationService)检查此配置并在“hosts”部分找到主机名“clientCompany.com”。 然后它激活这个上下文,整个服务链使用这个上下文中的存储、数据库和其他资源。

资源配置:

[  
   {  
      "contextName":"ClientCompanyName",
      "hosts":[  
         "clientCompany.com",
         "client-company.com"
      ],
      "storage":{  
         "path":"/mnt/ClientCompanyName"
      },
      .....
   },
   .....
]

这是一个好习惯吗? 我对使用 Java 和 Spring 创建这样一个系统的可能性感兴趣吗? 请分享用于执行此任务的资源和工具的链接。 说说你对这种实施的看法?

【问题讨论】:

  • 我认为您指的是 PaaS。范围太广,无法讨论。
  • 好吧,你要确保无论你如何确定租户,你都不能让某人开始尝试价值来看看什么是有效的。我们将 TenantId(一个 GUID)放入我们的 JWT 访问令牌中,该令牌会传递给任何被调用的服务。在 UI 和服务之间进行调用时,我们会在请求标头中进一步传递 TenantId。这让我们可以验证用户是否有权访问每个请求的特定租户。
  • @MikahBarnett 谢谢!我认为这是正确的方式!
  • 当然@Vladimir,为后代添加了更详细的答案。

标签: java spring architecture microservices


【解决方案1】:

让您的 TenantID 不被“公开”查看非常重要,因此我们将租户分配集成到我们的授权流程中。

它对我们的工作方式如下:

  • TenantService 管理所有可用租户的列表,并在添加/删除/更改等时生成集成事件。每个Tenant 都有一个Id GUID 和一个Abbreviation nvarchar(5) - 稍后会详细介绍
  • 我们在应用程序和身份提供者 (IdP) 之间使用 OIDC,然后为所有微服务使用承载令牌
  • 将新用户添加到系统时,必须指定至少一个租户,并将其作为该用户的角色推送到我们的 IdP
  • 我们的角色采用tenant_abbreviation.role_name 格式,以便应用程序可以读取角色并知道它们适用于哪个租户。在我们的例子中,一个用户可能有权访问多个具有不同角色的租户。
  • 登录时,应用程序请求并接收包含用户声明的JWT Access Token - 此 JWT 是访问所有其他服务所必需的。因此,当微服务获得 JWT(它对其进行验证)时,它会知道 UserId 以及他们可以访问每个租户的任何/所有权限。
  • 当已批准的应用程序调用微服务时,它会连同 JWT 一起在标头中传递当前上下文 TenantId,以便我们可以比较 Claims 与当前租户 - 如果它们不匹配,则说明存在问题应用

该系统的缺点是需要管理大量角色/权限,但我们已经实现了自动化,至少在我们的案例中(我们使用 Auth0.com),即使有成千上万的租户,我们的 IdP 仍然可以处理它没问题。即使我们的工具速度稍微慢了一点,每个租户仍然可以正常工作。

优点是它非常安全,使用最少的工具来处理 IdP 上的工作负载,易于管理和跟踪,并且每项服务都可以获得良好、精细的授权/上下文信息。它还允许在租户之间混合/匹配用户(如有必要)和/或为每个租户单独权限提供很大的灵活性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多