Что такое compute-compute separation?
- вычислительные узлы ClickHouse (называемые репликами) с выделенными ресурсами CPU и памяти
- конечную точку (или несколько конечных точек, созданных через консоль ClickHouse Cloud) для подключения к сервису (например,
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443) для локальных подключений и подключений сторонних приложений - папку в объектном хранилище, где сервис хранит все данные и часть метаданных:
Рис. 1 — Один сервис в ClickHouse Cloud Вместо одного сервиса можно создать несколько сервисов с доступом к одному и тому же общему хранилищу. Это позволяет выделять ресурсы под конкретные рабочие нагрузки без дублирования данных. Эта концепция называется compute-compute separation. Compute-compute separation означает, что у каждого сервиса есть собственный набор реплик и конечная точка, но при этом все они используют одну и ту же папку в объектном хранилище и получают доступ к одним и тем же таблицам, представлениям и т. д. Это означает, что вы можете подобрать подходящий объем вычислительных ресурсов для своей рабочей нагрузки. Для одних рабочих нагрузок достаточно одной небольшой реплики, а другим могут потребоваться высокая доступность (HA) и сотни гигабайт памяти на нескольких репликах. Compute-compute separation также позволяет отделить операции чтения от операций записи, чтобы они не мешали друг другу:
Рис. 2 — Разделение вычислительных ресурсов в ClickHouse Cloud
Что такое хранилище?
- Основной сервис
DWH Prod - Вторичный сервис
DWH Prod Subservice
Рис. 3 — Пример хранилища Все сервисы в хранилище имеют одинаковые:
- Region (например, us-east1)
- провайдера облачных услуг (AWS, GCP или Azure)
- версию базы данных ClickHouse
- ClickHouse Keeper (для управления репликами)
Управление доступом
Учетные данные для базы данных
Рис. 4 — пользователь Alice создан в Service 1, но может использовать те же учетные данные для доступа ко всем сервисам, использующим одни и те же данные
Управление сетевым доступом
Рис. 5 — Alice не может получить доступ к сервису 2 из-за настроек управления сетевым доступом Роли и привилегии ClickHouse также можно использовать для управления доступом к данным, когда пользователи подключаются не под пользователем по умолчанию, а от своего имени.
Сервисы только для чтения и с возможностью чтения и записи
- с возможностью чтения и записи
- Могут как читать, так и записывать данные в ClickHouse
- Выполняют фоновые операции слияния (например, слияние частей после вставки данных), которые потребляют CPU и память
- Могут экспортировать данные во внешние системы
- только для чтения
- Могут только читать данные; записывать или изменять данные в ClickHouse они не могут
- Не выполняют фоновые операции слияния вне системных таблиц, поэтому их ресурсы полностью выделены под запросы на чтение
- По-прежнему могут экспортировать данные во внешние системы (например, через табличные функции), но не могут изменять данные внутри ClickHouse
- Переходят в состояние бездействия без задержки, в отличие от сервисов с возможностью чтения и записи, которые фоновые слияния могут удерживать активными
Рис. 6 — Сервисы с возможностью чтения и записи и только для чтения в хранилище
- Сервисы только для чтения в настоящее время поддерживают операции управления пользователями (CREATE, DROP и т. д.).
- Refreshable materialized views выполняются только на сервисах с возможностью чтения и записи (RW) в хранилище.
- Тип сервиса (только для чтения или с возможностью чтения и записи) фиксируется при создании и впоследствии не может быть изменён через Cloud Console. Чтобы переключиться между режимами только для чтения и чтения/записи, создайте в хранилище новый сервис нужного типа.
Масштабирование
- Количество узлов (реплик). Основной сервис (сервис, который был создан в хранилище первым) должен иметь 2 или более узла. Каждый вторичный сервис может иметь 1 или более узлов.
- Размер узлов (реплик)
- Должен ли сервис автоматически масштабироваться (по горизонтали и по вертикали)
- Должен ли сервис переводиться в режим простоя при отсутствии активности
Изменения в поведении clusterAllReplicas
clusterAllReplicas() меняется.
При использовании имени кластера default запрос будет выполняться только для реплик текущего сервиса, а не для всех сервисов в хранилище.
Например, если вы вызываете clusterAllReplicas(default, system, processes) из сервиса 1, будут возвращены только процессы, выполняющиеся на сервисе 1.
Чтобы выполнять запросы по всем сервисам в хранилище, используйте имя кластера all_groups.default:
Вторичные одноузловые сервисы могут вертикально масштабироваться, тогда как основные одноузловые сервисы — нет.
Ограничения
Ограничения изоляции рабочих нагрузок
-
Все сервисы с возможностью чтения и записи по умолчанию выполняют фоновые операции слияния. При вставке данных в ClickHouse база данных сначала записывает данные в промежуточные партиции, а затем выполняет слияния в фоновом режиме. Эти слияния могут потреблять ресурсы памяти и ЦП. Когда два сервиса с возможностью чтения и записи используют общее хранилище, оба выполняют фоновые операции. Это означает, что возможна ситуация, когда запрос
INSERTвыполняется в сервисе 1, а операция слияния завершается сервисом 2. Обратите внимание, что сервисы только для чтения не выполняют фоновые слияния и, следовательно, не тратят на это свои ресурсы. По запросу наша служба поддержки может отключить слияния для сервиса. - Все сервисы с возможностью чтения и записи выполняют операции вставки для движка таблицы S3Queue. При создании таблицы S3Queue на сервисе с возможностью чтения и записи все остальные сервисы с возможностью чтения и записи в хранилище также могут читать данные из S3 и записывать их в базу данных.
- Вставки в одном сервисе с возможностью чтения и записи могут мешать другому сервису с возможностью чтения и записи перейти в режим простоя, если включен режим простоя. Бывают ситуации, когда один сервис выполняет фоновые операции слияния для другого сервиса. Эти фоновые операции могут мешать второму сервису перейти в режим простоя. После завершения фоновых операций сервис перейдет в режим простоя. Сервисы только для чтения этому не подвержены.
Полезные примечания
- Версии ClickHouse: График обновлений определяется настройками основного сервиса. У вторичных сервисов не может быть собственного графика релизов, независимого от основного сервиса.
-
Запросы
CREATE/RENAME/DROP DATABASEпо умолчанию могут блокироваться, если сервис переведён в режим простоя или остановлен. Если выполнять эти запросы, когда сервис находится в режиме простоя или остановлен, они могут зависнуть. Чтобы избежать этого, можно запускать запросы управления базой данных сsettings distributed_ddl_task_timeout=0на уровне сеанса или отдельного запроса.
- Основной сервис с одной репликой Сегодня по умолчанию вторичные сервисы могут иметь одну реплику, а основной сервис — как минимум две. Чтобы включить основной сервис с одной репликой, обратитесь в службу поддержки. По умолчанию эта возможность будет включена во II квартале 2026 года.
- Переход основного сервиса в режим простоя: автоматический переход основного сервиса в режим простоя включен по умолчанию.
Цены
Резервные копии
- Поскольку все сервисы в одном хранилище используют общее хранилище данных, резервные копии создаются только на основном (исходном) сервисе. Таким образом выполняется резервное копирование данных всех сервисов в этом хранилище.
- Если вы восстановите резервную копию с основного сервиса хранилища, она будет восстановлена в совершенно новом сервисе, не связанном с существующим хранилищем. Затем, сразу после завершения восстановления, вы сможете добавить к нему дополнительные сервисы.
Как настроить хранилище
Создание хранилища
Рис. 7 — Нажмите значок плюса, чтобы создать новый сервис в хранилище На экране создания сервиса в раскрывающемся списке в качестве источника данных для нового сервиса будет выбран исходный сервис. После создания эти два сервиса образуют хранилище.
Переименование хранилища
- На странице сервисов в правом верхнем углу выберите “Сортировать по хранилищу”, затем нажмите значок карандаша рядом с названием хранилища
- Нажмите название хранилища в любом из сервисов и переименуйте его там
Удаление хранилища
- Удалите все сервисы, созданные помимо сервиса, который был создан первым;
- Удалите первый сервис (предупреждение: на этом шаге будут удалены все данные хранилища).