计算-计算分离(私有预览)
什么是计算-计算分离?
每个 ClickHouse Cloud 服务都包含
- 一组 ClickHouse 节点(或副本) - **开发**层级服务为 2 个节点,**生产**层级服务为 3 个节点
- 一个端点(或通过 ClickHouse Cloud UI 控制台创建的多个端点),它是一个用于连接服务的服务 URL(例如,
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443
) - 一个对象存储文件夹,服务在其中存储所有数据和部分元数据
图 1 - ClickHouse Cloud 中的当前服务
计算-计算分离允许用户创建多个计算节点组,每个组都有自己的端点,它们使用相同的对象存储文件夹,因此具有相同的表、视图等。
每个计算节点组都有自己的端点,因此您可以选择哪组副本用于您的工作负载。某些工作负载可能只需要一个小型副本即可满足,而其他工作负载可能需要完整的 HA(高可用性)和数百 GB 的内存。计算-计算分离还允许您将读取操作与写入操作分离,以避免它们相互干扰。
图 2 - 计算 ClickHouse Cloud
在此私有预览计划中,您将能够创建额外服务,这些服务与现有服务共享相同的数据,或者创建一个全新的设置,其中多个服务共享相同的数据。
访问控制
数据库凭据
由于所有使用相同对象存储的服务都共享同一组表,因此它们也共享对其他服务的访问控制。这意味着在服务 1 中创建的所有数据库用户也将能够使用服务 2 并具有相同的权限(表、视图等的授权),反之亦然。用户将为每个服务使用另一个端点,但将使用相同的用户名和密码。换句话说,用户在使用相同存储的服务之间共享:
图 3 - 用户 Alice 在服务 1 中创建,但她可以使用相同的凭据访问所有共享相同数据的服务
网络访问控制
限制特定服务被其他应用程序或临时用户使用通常很有用。这可以通过使用网络限制来完成,类似于当前为常规服务配置的方式(在 ClickHouse Cloud 控制台中特定服务的服务选项卡中导航到“设置”)。
您可以分别对每个服务应用 IP 过滤设置,这意味着您可以控制哪些应用程序可以访问哪些服务。这使您可以限制用户使用特定服务。
读 vs 读写
有时限制对特定服务的写入访问并仅允许使用相同存储的一组服务进行写入非常有用。这可以在创建第二个和第 n 个服务时完成(第一个服务始终应该是读写服务)。
扩展
连接到相同数据集(表、视图等集合)的每个服务都可以根据您的工作负载进行调整,包括:
- 节点(副本)数量。目前,节点(副本)的最小数量为 2。
- 节点(副本)的大小
- 服务是否应自动扩展
- 服务是否应在不活动时闲置(不能应用于组中的第一个服务 - 请参阅“限制”部分)
行为变化
一旦为服务启用计算-计算,使用默认集群名称的 clusterAllReplicas()
函数调用将仅使用其调用服务中的副本。这意味着,如果两个服务连接到相同的数据集,并且从服务 1 调用 clusterAllReplicas(default, system, processes)
,则只会显示服务 1 上运行的进程。如果需要,您仍然可以调用 clusterAllReplicas('all_groups.default', system, processes)
(例如)以访问所有副本。
限制
由于此计算-计算分离目前处于私有预览阶段,因此使用此功能存在一些限制。一旦功能发布到 GA(通用可用性),大多数这些限制将被移除。
**原始服务应是最近创建或迁移的。**不幸的是,并非所有现有服务都可以与其他服务共享其存储。在过去一年中,我们发布了一些服务需要支持的功能(如 Shared Merge Tree 引擎),因此未更新的服务大多无法与其他服务共享其数据。这与 ClickHouse 版本无关。
好消息是我们可以将旧服务迁移到新引擎,以便它支持创建其他服务。请联系支持团队,我们将告知您所需的服务是否需要迁移。
**原始服务应始终处于启动状态,并且不应处于闲置状态(限制将在 GA 后一段时间内移除)。**在私有预览期间和 GA 后一段时间内,第一个服务(通常是您希望通过添加其他服务来扩展的现有服务)需要始终处于启动状态,并且应禁用闲置设置。如果第一个服务变为闲置或停止,则第二个服务的一些更改在服务唤醒后可能不会反映出来(特别是
CREATE
/DROP
数据库)。通过参与私有预览计划,您同意在私有预览期间不使原始服务处于闲置或停止状态。**有时工作负载无法隔离。**虽然目标是为您提供一个选项来相互隔离数据库工作负载,但可能存在一些极端情况,其中一个服务中的一个工作负载会影响共享相同数据的另一个服务。这些情况非常罕见,主要与类似 OLTP 的工作负载相关。
**所有读写服务都在执行后台合并操作。**当将数据插入 ClickHouse 时,数据库首先将数据插入到一些暂存分区,然后在后台执行合并。这些合并会消耗内存和 CPU 资源。当两个读写服务共享相同的存储时,它们都在执行后台操作。这意味着可能存在以下情况:服务 1 中有一个
INSERT
查询,但合并操作由服务 2 完成。请注意,只读服务不执行后台合并,因此它们不会在此操作上花费资源。**如果启用了闲置,则一个读写服务中的插入可能会阻止另一个读写服务闲置。**由于前一点,第二个服务将为第一个服务执行后台合并操作。这些后台操作可能会阻止第二个服务在闲置时进入睡眠状态。一旦后台操作完成,服务将进入闲置状态。只读服务不受影响,将立即进入闲置状态。
**默认情况下,CREATE/RENAME/DROP DATABASE 查询可能会被闲置/停止的服务阻止(限制将在 GA 中移除)。**这些查询可能会挂起。要绕过此问题,您可以在会话或每个查询级别使用
settings distributed_ddl_task_timeout=0
运行数据库管理查询。例如
create database db_test_ddl_single_query_setting
settings distributed_ddl_task_timeout=0
价格
在私有预览期间创建的额外服务按常规计费。计算价格对于连接到相同存储的所有服务都是相同的。存储仅计费一次 - 它包含在第一个(原始)服务中。
私有预览计划结束后会发生什么?
私有预览计划结束后,计算-计算分离功能正式发布后,您新创建的服务将作为计算-计算分离功能的一部分保留。不会删除任何数据或服务。
如何开始
要在您的组织中启用计算-计算分离私有预览,请联系 ClickHouse Cloud 支持团队。团队为您启用此功能后,您将能够通过点击加号按钮,为组织中的任何现有服务创建其他服务。
创建后,原始服务和新服务将形成一个仓库 - 一组共享相同数据源的服务。仓库中的所有服务共享相同的
- 区域(例如,us-east1)
- 云服务提供商(AWS、GCP 或 Azure)
- ClickHouse 数据库版本
您可以根据服务所属的仓库对服务进行排序。此外,创建后,仓库将显示在服务卡片上。