Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 微服务资源管理_Java_Spring_Architecture_Microservices - Fatal编程技术网

Java 微服务资源管理

Java 微服务资源管理,java,spring,architecture,microservices,Java,Spring,Architecture,Microservices,假设我们有一组microsericservices(每个服务都有自己的数据库)。我们的客户是其他公司。每个客户都希望拥有自己的数据库 在本例中,每个服务都有许多数据库。是否存在管理资源的最佳实践 我认为所有服务都可以是无状态的。任何公司(我们的客户)都必须有自己的配置和资源描述。示例:数据库、文件存储等 调用任何服务都必须激活资源上下文。接下来的所有服务都必须使用此上下文 例如。 有人打开了他的浏览器网站:clientCompany.com。 我们的第一个服务(示例AuthenticationS

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

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

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

调用任何服务都必须激活资源上下文。接下来的所有服务都必须使用此上下文

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

资源配置:

[  
   {  
      "contextName":"ClientCompanyName",
      "hosts":[  
         "clientCompany.com",
         "client-company.com"
      ],
      "storage":{  
         "path":"/mnt/ClientCompanyName"
      },
      .....
   },
   .....
]
这是一种好的做法吗? 我对使用Java和Spring创建这样一个系统的可能性很感兴趣? 请共享到用于执行此任务的源和工具的链接。
请告诉我您对这种实施的看法?

让您的租户远离“公共”视图非常重要,因此我们将租户分配集成到授权流程中

以下是它对我们的作用:

  • TenantService
    管理所有可用租户的列表,并在添加/删除/更改这些租户时生成集成事件等。每个
    TenantService
    都有一个
    Id
    GUID
    和一个
    缩写
    nvarchar(5)
    -稍后将详细介绍
  • 我们在应用程序和身份提供者(IdP)之间使用OIDC,然后为所有微服务使用承载令牌
  • 当新用户添加到系统中时,必须至少指定一个租户,并将其作为该用户的角色推送到我们的IdP中
  • 我们的角色采用
    tenant\u缩写.role\u name
    格式,这样应用程序就可以读取角色并知道它们应用于哪个租户。在我们的例子中,一个用户可以访问多个租户,每个租户中有不同的角色
  • 登录时,应用程序请求并接收包含用户声明的
    JWT访问令牌
    ——该JWT是访问所有其他服务所必需的。因此,当微服务获得JWT(它验证)时,它知道用户ID以及每个租户可以访问的任何/所有权限
  • 当一个经批准的应用程序调用一个微服务时,它会连同JWT一起在标题中传递当前上下文
    TenantId
    ,这样我们就可以比较索赔和当前租户-如果他们不匹配,这是应用程序中的一个问题
该系统的缺点是需要管理大量的角色/权限,但我们已经实现了自动化,至少在我们的情况下(我们使用Auth0.com),即使有数千个租户,我们的IdP仍能毫无问题地处理它。即使我们的工具稍微慢一点,每个租户的性能仍将保持不变


好处是它非常安全,只需最少的工具即可处理IdP上的工作负载,易于管理和跟踪,并且每个服务都可以获得良好的、细粒度的授权/上下文信息。它还允许灵活地在租户之间混合/匹配用户(如有必要)和/或为每个租户单独设置权限。

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

以下是它对我们的作用:

  • TenantService
    管理所有可用租户的列表,并在添加/删除/更改这些租户时生成集成事件等。每个
    TenantService
    都有一个
    Id
    GUID
    和一个
    缩写
    nvarchar(5)
    -稍后将详细介绍
  • 我们在应用程序和身份提供者(IdP)之间使用OIDC,然后为所有微服务使用承载令牌
  • 当新用户添加到系统中时,必须至少指定一个租户,并将其作为该用户的角色推送到我们的IdP中
  • 我们的角色采用
    tenant\u缩写.role\u name
    格式,这样应用程序就可以读取角色并知道它们应用于哪个租户。在我们的例子中,一个用户可以访问多个租户,每个租户中有不同的角色
  • 登录时,应用程序请求并接收包含用户声明的
    JWT访问令牌
    ——该JWT是访问所有其他服务所必需的。因此,当微服务获得JWT(它验证)时,它知道用户ID以及每个租户可以访问的任何/所有权限
  • 当一个经批准的应用程序调用一个微服务时,它会连同JWT一起在标题中传递当前上下文
    TenantId
    ,这样我们就可以比较索赔和当前租户-如果他们不匹配,这是应用程序中的一个问题
该系统的缺点是需要管理大量的角色/权限,但我们已经实现了自动化,至少在我们的情况下(我们使用Auth0.com),即使有数千个租户,我们的IdP仍能毫无问题地处理它。即使我们的工具稍微慢一点,每个租户的性能仍将保持不变


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

我想您指的是PaaS。这太宽泛了,不值得讨论。好吧,你们要确保无论你们如何确定租户,你们不能让别人开始尝试价值观,看看什么是坚持的。我们将TenantId(一个GUID)放入JWT访问令牌中,该令牌将传递给任何被调用的服务。在UI和服务之间进行调用时,我们进一步在请求头中传递TenantId。这让我们能够验证用户在每个请求中都有权访问特定租户@