首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >微型服务资源管理

微型服务资源管理
EN

Stack Overflow用户
提问于 2019-10-02 16:57:14
回答 1查看 458关注 0票数 1

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

在本例中,每个服务都有许多数据库。管理资源是否存在最佳实践?

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

调用任何序列化必须激活资源上下文。接下来的所有服务都必须使用这个上下文来工作。

举例说明。有人打开了他的浏览器网站: clientCompany.com。我们的第一个服务(例如AuthenticationService)检查这个配置,并在"clientCompany.com“部分找到主机名”clientCompany.com“。然后激活这个上下文,整个服务链使用存储、DB和来自这个上下文的其他资源。

资源配置:

代码语言:javascript
复制
[  
   {  
      "contextName":"ClientCompanyName",
      "hosts":[  
         "clientCompany.com",
         "client-company.com"
      ],
      "storage":{  
         "path":"/mnt/ClientCompanyName"
      },
      .....
   },
   .....
]

这是个好做法吗?我对使用Java和Spring创建这样一个系统的可能性感兴趣吗?请共享用于执行此任务的源和工具的链接。告诉我你对这样的实现有什么看法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-04 13:07:11

让TenantID远离“公共”视图是很重要的,因此我们将租户分配集成到我们的授权过程中。

下面是它对我们的工作原理:

microservices

  • When
  • A TenantService管理所有可用租户的列表,并在它们被添加/删除/更改时生成集成事件,等等。每个Tenant都有Id GUIDAbbreviation nvarchar(5),稍后将详细介绍
  • ,我们在应用程序和身份提供者(IdP)之间使用OIDC,然后向系统中添加所有新用户的OIDC令牌,必须指定至少一个承租者,并将其推入我们的IdP中,作为该用户
  • 的角色,我们的角色为tenant_abbreviation.role_name格式,以便应用程序能够读取角色并知道它们应用于什么租户。在我们的示例中,一个用户可能可以访问多个不同角色的租户。
  • 在登录时,应用程序请求并接收包含用户声明的JWT Access Token --这个JWT是访问所有其他服务所必需的。因此,当一个微服务获得一个JWT (由它验证)时,它知道UserId以及每个租户可以访问的任何/所有权限。
  • 当一个经过批准的应用程序调用一个微服务时,它与JWT一起在头中传递当前上下文TenantId,这样我们就可以比较索赔和当前租户--如果它们不匹配--这在应用程序

中是一个问题。

这个系统的缺点是有很多角色/权限需要管理,但是我们已经实现了自动化,至少在我们的例子中(我们使用Auth0.com),即使有成千上万的租户,我们的IdP仍然可以毫无问题地处理它。即使我们的工具慢了一点,每个租户还是会表现得很好。

优点是它是相当安全的,使用最小的工具来处理IdP上的工作负载--它易于管理和跟踪,并且每个服务都获得良好的、细粒度的授权/上下文信息。它还允许在租户(如果需要的话)和/或每个租户单独的权限之间混合/匹配用户,具有很大的灵活性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58206026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档