【发布时间】: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