假设我们有一个组微服务器(每个服务都有自己的DB )。我们的客户是其他公司。每个客户都想拥有自己的数据库。
在本例中,每个服务都有许多数据库。管理资源是否存在最佳实践?
我认为所有的服务都可以是无状态的。任何公司(我们的客户)都必须有自己的配置和资源描述。例如: DB、文件存储等。
调用任何序列化必须激活资源上下文。接下来的所有服务都必须使用这个上下文来工作。
举例说明。有人打开了他的浏览器网站: clientCompany.com。我们的第一个服务(例如AuthenticationService)检查这个配置,并在"clientCompany.com“部分找到主机名”clientCompany.com“。然后激活这个上下文,整个服务链使用存储、DB和来自这个上下文的其他资源。
资源配置:
[
{
"contextName":"ClientCompanyName",
"hosts":[
"clientCompany.com",
"client-company.com"
],
"storage":{
"path":"/mnt/ClientCompanyName"
},
.....
},
.....
]这是个好做法吗?我对使用Java和Spring创建这样一个系统的可能性感兴趣吗?请共享用于执行此任务的源和工具的链接。告诉我你对这样的实现有什么看法?
发布于 2019-10-04 13:07:11
让TenantID远离“公共”视图是很重要的,因此我们将租户分配集成到我们的授权过程中。
下面是它对我们的工作原理:
microservices
TenantService管理所有可用租户的列表,并在它们被添加/删除/更改时生成集成事件,等等。每个Tenant都有Id GUID和Abbreviation nvarchar(5),稍后将详细介绍tenant_abbreviation.role_name格式,以便应用程序能够读取角色并知道它们应用于什么租户。在我们的示例中,一个用户可能可以访问多个不同角色的租户。JWT Access Token --这个JWT是访问所有其他服务所必需的。因此,当一个微服务获得一个JWT (由它验证)时,它知道UserId以及每个租户可以访问的任何/所有权限。TenantId,这样我们就可以比较索赔和当前租户--如果它们不匹配--这在应用程序中是一个问题。
这个系统的缺点是有很多角色/权限需要管理,但是我们已经实现了自动化,至少在我们的例子中(我们使用Auth0.com),即使有成千上万的租户,我们的IdP仍然可以毫无问题地处理它。即使我们的工具慢了一点,每个租户还是会表现得很好。
优点是它是相当安全的,使用最小的工具来处理IdP上的工作负载--它易于管理和跟踪,并且每个服务都获得良好的、细粒度的授权/上下文信息。它还允许在租户(如果需要的话)和/或每个租户单独的权限之间混合/匹配用户,具有很大的灵活性。
https://stackoverflow.com/questions/58206026
复制相似问题