介绍
ClickHouse Cloud 自诞生之初,其使命就是为用户提供能够大规模开发分析应用程序的能力,而无需担心基础设施规划、大小调整和管理复杂扩展操作的运营开销。出于这个原因,该服务从一开始就支持垂直自动扩展,因此用户无需过度配置或监控其使用情况。根据内存和 CPU 使用情况,该服务会扩展以在用户指定的范围内适应工作负载。
现在,我们很高兴将水平扩展引入 ClickHouse Cloud 私有预览版。此功能适用于 ClickHouse Cloud 中的生产实例。水平扩展将允许客户控制其服务中的副本数量,以匹配其工作负载需求。
作为私有预览版的一部分,此功能可通过 ClickHouse Cloud API 访问。我们还将很快通过云控制台启用水平扩展。要访问您的服务的水平扩展功能,请联系 ClickHouse 支持团队,邮箱地址为 [email protected]。
为什么进行水平扩展
在我们详细了解 ClickHouse Cloud 中的水平扩展之前,让我们先了解一下水平扩展和垂直扩展之间的区别。
垂直扩展通常涉及增加单个机器或集群中的一组机器的可用资源,即添加更多内存或 CPU。更大的机器可以处理更大的负载,尤其是那些希望所有资源都适合单个机器内存的负载,例如支持跨表的 large joins。但是,垂直扩展存在物理限制——机器的尺寸存在上限。
另一方面,水平扩展涉及添加更多机器。通常,这些机器的大小都相同,以便扩展同类机器(或副本)的集群。然后,工作负载将分布在大量较小的机器上(与垂直扩展中少数大型机器相比)。
水平扩展提供了更好的容错性,因为负载分散在更大的副本集上。通过添加较小的机器,通常比通过增加现有副本的大小来水平扩展服务的速度更快。由于水平扩展的工作机制,它也比垂直扩展更少破坏性,因为正在添加新的副本(而不是调整现有副本的大小或更换副本)。
水平扩展和垂直扩展有助于处理不同类型的工作负载。需要从单个机器获取大量资源的工作负载受益于垂直扩展。对于高并发工作负载,水平扩展可能是很好的选择。例如,您可能需要将大量数据导入 ClickHouse。添加额外的副本将允许导入过程更快地进行。在请求速率不断增加的情况下,水平扩展也比垂直扩展效果更好,因为您需要快速向集群添加容量而不会影响现有容量。
水平扩展的实际应用
在服务上启用水平扩展后,您可以使用 ClickHouse Cloud 的 公共 API 通过更新服务的 扩展设置 来扩展您的服务。
让我们看看水平扩展是如何工作的。
-
首先,检查分配给您的集群的内存以及副本数量。您可以通过查看云控制台仪表板以及服务设置中的副本数量来完成此操作。这里我们有一个 3 副本集群,每个副本分配了 16 GiB 内存,总共为集群分配了 48 GiB 内存。
ClickHouse Cloud 控制台中的服务扩展设置
-
假设我们现在想要将集群水平扩展到 6 个副本,每个副本 16 GiB。这意味着在扩展完成后,我们最终应该在 6 个副本中获得总共 96 GiB 的内存。
注意:API 目前假设最小和最大总内存是基于 3 个副本,这是默认生产 ClickHouse 集群中的副本数量。这意味着
minTotalMemoryGb
和maxTotalMemoryGb
的值分别为 24 和 96,这意味着每个节点的内存最小值为8GiB
,最大值为32GiB
,如 UI 所示。如果我们想从 3 个副本水平扩展到 6 个副本,我们只需要更改 API 中的numReplicas
,或者 UI 中的节点数量
,而无需更改最小和最大内存大小。因此,对于16GiB
的副本大小,我们的总内存将在 6 个副本中达到96GiB
为此,我们发出一个 patch 请求,以调整集群中的副本数量,如下所示(来自 postman 客户端的屏幕截图)。
更新 numReplicas 的 PATCH 请求
PATCH 请求的响应
-
发出 PATCH 请求后,您将看到扩展设置屏幕现在显示集群中副本数量的设置为“6”。需要注意的是,这不是集群中当前的副本数量,而是所需的副本数量。
-
回到此集群的监控屏幕,我们现在可以看到集群确实已扩展到总共 96 GiB 内存。
展望未来
如前所述,我们很快将通过云控制台直接提供水平扩展功能。在私有预览版期间,我们将根据客户反馈改进水平扩展 ClickHouse Cloud 服务的 UI 和 API 体验,然后使其普遍可用(GA)。
实现水平扩展自助服务和 GA 只是第一步。在不久的将来,我们还将实现水平自动扩展,即 ClickHouse Cloud 用户能够在其服务上设置最小和最大副本数量作为其服务应该自动扩展的界限。根据集群的负载,我们将根据需要自动水平扩展集群,以紧密匹配实际利用率。我们的最终目标是提供水平和垂直自动扩展的混合方案,根据工作负载实现服务的最佳性能。