39  
多租户
作者: 姜天雨 于 2021年07月23日 发布在分类 / 底层框架资料 / GoQuorum 下,并于 2021年07月23日 编辑

多租户

通过多个私有状态的多租户

在典型的网络中,每个参与者(租户)使用自己的 GoQuorum Tessera 节点。 Tessera 可以配置为管理一个租户拥有的多个密钥对。 随着越来越多的租户加入网络,此模型的运行和扩展成本很高。

Multi-tenancy via Multiple Private States 允许多个租户使用同一个 GoQuorum 节点,每个租户都有自己的私有状态。 租户可以在其私有状态下对任何合约执行所有操作(创建 / 读取 / 写入),并且单个租户可以访问多个私有状态。 多租户允许与运行自己的受管节点的用户类似的用户体验。

公共状态仍然对所有租户公开,私有状态在逻辑上是分开的。

粘贴图片

在这种情况下,组织代表具有多个部门的租户和部门内的用户。 每个租户都在自己的私有状态上运行。 组织中的每个用户都拥有一个或多个隐私管理器密钥对,允许他们对其组织的私有状态进行操作。 网络运营商使用授权服务器管理每个组织的权利和私有状态访问。

JSON RPC security  安全功能用于管理用户对私有状态的访问。 Authentication Server setup 控制此访问。

配置更改

为了运行多租户节点,节点必须具 configuration changes needed for MPS

通过 MPS 启用多租户

多租户要求 Tessera 版本 21.4.0 或更高版本和 GoQuorum MPS enabled.

要启用多租户,请配置  JSON RPC Security plugin并使用 -multitenancy 命令行选项启动 GoQuorum

粘贴图片

在命令中,plugins.json 是包含plugins.json  JSON RPC Security plugin definition的插件设置文件 plugin settings file  查看安全插件文档 security plugins documentation以获取有关如何配置 JSON RPC 安全插件的更多信息。

粘贴图片

企业授权服务器

为了支持多租户,需要配置授权服务器。授权服务器能够通过私有状态标识符向客户端授予私有状态访问权限。查看通过 Multi-tenancy via Multiple Private States 以获取有关如何设置授权服务器和配置多租户网络的更多信息。

访问令牌范围

JSON RPC 安全插件使 geth JSON RPC API 服务器成为符合 OAuth2 的资源服务器。客户端必须首先从授权服务器获取预先验证的访问令牌,然后在调用 API 时出示访问令牌(使用  Authorization HTTP 请求标头)。没有经过身份验证的令牌对仲裁 RPC API 的调用将被拒绝。

在访问令牌(在 JWT 的情况下)或自省回复(在 OAuth2 令牌自省 API 的情况下)中编码的范围的值包含具有以下基于 URL 的语法的 RPC 范围和租户范围:

具体范围详情请见此处……

粘贴图片

在语法中,PSI   PSI URL 编码值,表示租户有权访问的私有状态。

例如,对于有权访问两个私有状态PS1  PS2的客户端,授权服务器操作员将设置并向客户端授予以下范围:

粘贴图片

提供包含上述范围的访问令牌的客户端可以使用任何自我或节点管理的以太坊帐户完全访问(读/ / 创建)私有状态 PS1   PS2 上的私有合约。

多个私有状态

多个私有状态是一项允许 GoQuorum 节点管理多个私有状态的功能。私有状态在共享数据库中逻辑分离。此功能为在 supporting multiple tenants on a single node 奠定了基础。

主要变化

PSI

私有状态由字节序列标识,称为 PSI(私有状态标识符)。 PSI 用于确定用户可以操作的 特定私有状态。

私有状态树

GoQuorum 中引入了私有状态树来跟踪节点管理的所有私有状态。 PSI 是私有状态树中的密钥,它映射到相应私有状态的根哈希。在每个区块,更新所有受影响的私有状态并计算它们的新根哈希,使用 PSI 处的新私有状态根哈希更新私有状态树,计算私有状态树的新根并将其映射到公共区块哈希。

私有状态管理器

GoQuorum 中私有状态管理器的目的是根据输入参数解析 PSI

应用交易

在执行私有交易时,可能会出现交易被寻址到多个本地管理方的情况,因此可能需要将交易应用于多个私有状态。私有状态管理器将每个受管方 tessera 公钥解析为一个私有状态标识符。

用户调用 RPC API

任何 RPC API 调用都必须伴随私有状态标识符或授权令牌。 从令牌中,私有状态管理器必须能够导出用户试图访问的私有状态。

Tesse ra 常驻组

MPS 使用 Tessera Tessera Resident Groups 的概念将租户映射到私有状态。 Tessera 启动期间,对 residentGroups 进行验证以检查每个 tessera 密钥是否属于单个常驻组。 每个 Tessera 密钥都必须在常驻组中才能启动 Tessera 。 在 Quorum 启动期间,residentGroups  retrieved from Tessera并保存在 GoQuorum 的内存中。

 粘贴图片

上述  residentGroups 定义了 2 个居民组(每个有 2 个成员),它们映射到 2 GoQuorum 私有状态。

粘贴图片

了解如何 setup residentGroups in Tessera.

配置更改

GoQuorum

genesis.json 文件已修改为包含 isMPS。此值应设置为 true 以启用 MPS false 以作为独立节点运行。网络中可以混合使用启用 MPS 的节点和独立节点。

Tessera 

新标志 enableMultiplePrivateStates 已添加到 Tessera 配置中,默认为false,并且可以通过将属性添加到配置文件中来启用,就像其他功能一样。如果 iisMPS=true  enableMultiplePrivateStates=falseQuorum 将不会启动。

此外,可以将一个新字段residentGroups 添加到 Tessera 配置中,以定义对特定私有状态的组访问。如果 enableMultiplePrivateStates=true,则必须正确配置 residentGroups才能启动 Tessera 。查看如何在 Tessera 中设置 residentGroups 以获取更多信息。如果节点作为独立节点运行(isMPS=false),则不需要配置residentGroups 

将节点升级到 MPS

如果用户想要将现有的 GoQuorum 节点升级到具有 MPS 功能的节点,则需要执行其他步骤以确保数据库与 MPS 兼容。查看 steps for migration

启用多个私有状态

MPS 需要 Tessera 版本 21.4.0 或更高版本。

对于任何给定节点,首先启动隐私管理器 (Tessera),因此我们允许在 GoQuorum 升级之前使用 MPS 支持升级 Tessera 节点。但是当 GoQuorum 节点升级并使用 isMPS=true 重新初始化 geth 时, GoQuorum 节点将验证 Tessera 运行的版本,如果 Tessera 未运行升级版本,则将无法启动。 GoQuorum 节点会在控制台中报告相应的错误消息,建议用户先升级 Tessera

如果一个节点想要将它的 Tessera 升级到 MPS 版本(或更高版本)以具有其他功能和修复,但还没有准备好升级 GoQuorum ,它可以通过像往常一样运行 GoQuorum 来实现。 GoQuorum 将继续作为独立节点运行。

如果 Tessera GoQuorum 都升级但未配置为运行 MPS ,则该节点将继续作为独立节点运行。

Tessera Q2T 通信更改

MPS 引入了一个新的 QT2 端点 /groups/resident来返回 Tessera 中定义的常驻组。在 GoQuorum 启动时调用此端点以检索所有常驻组。这些细节保存在 GoQuorum 的内存中,因此 Private State Manager 能够将这些常驻组解析为相应的私有状态。

访问私有状态

用户需要指定他们希望操作的私有状态。为了向后兼容,如果用户在没有指定私有状态的情况下进行连接,则将使用默认的私有 标识符。如果未配置 私有 状态,则用户将在空的只读私有状态下操作。

为了指定对用户进行操作的私有状态,有 3 个选项:

优先级

1. 特定 API 调用中的 privacyGroupID (待实现)

2. HTTP 标头

3. 网址参数 

URL参数

可以将 PSI

粘贴图片

参数添加到API URI:

HTTP 标头

每个 RPC 请求都必须附加一个 HTTP 标头 “PSI” ,用于指定要使用的私有状态

IPC 和进程内连接

PSI 附加到 jsonrpcMessage ID 字段

迁移指南

GoQuorum 

MPS GoQuorum 处理私有状态的方式进行了改进,因此升级需要在 Tessera 升级后重新同步节点。

将来,我们将提供一个迁移工具,帮助更新 GoQuorum 数据库以兼容 MPS

向后兼容

如果用户想在不升级 Tessera 的情况下升级 GoQuorum 的版本, GoQuorum 将继续在单一私有状态下以 传统 模式运行。在这种情况下,由于 Tessera 尚未升级,因此无法在 MPS 模式下运行 GoQuorum

Tessera 

租户拥有一个或多个 Privacy Manager 密钥对。公钥用于处理私有交易。有关 Tessera 如何管理多个密钥对的更多信息,请参阅 Tessera keys configuration documentation 

MPS节点升级

Tessera 将需要从它现在支持的独立节点的隐私管理器中重建。来自隐私管理器的所有交易都需要合并到新的 Tessera 存储中。了解有关 how to merge Tesseras 的更多信息。

Tessera 配置文件需要更新以包含相关的 residentGroups 。应配置 residentGroups ,以便每个租户都有自己的私有状态。这将提供与租户运行其单独节点时相同的体验。

独立节点升级

可能存在节点的租户想要升级其节点以支持 MPS 但继续作为唯一租户运行的情况。

在这种情况下,租户的 Tessera 版本将需要升级,并且必须配置residentGroups 。在单个租户的情况下,应配置 residentGroups  以便有一个私有状态包含租户的所有 Tessera 密钥。

MPS API

eth_getPSI

返回用户正在操作的私有状态。





 推荐知识

 历史版本

修改日期 修改人 备注
2021-07-23 17:36:46[当前版本] 姜天雨 创建版本

 附件

附件类型

PNGPNG

  目录
    区块链服务网络发展联盟