Хранилища
Что такое разделение вычислений?
Разделение вычислений доступно для уровней Scale и Enterprise.
Каждая служба ClickHouse Cloud включает:
- Группу из двух или более узлов ClickHouse (или реплик), но дочерние службы могут быть с одной репликой.
- Конечную точку (или несколько конечных точек, созданных через консоль ClickHouse Cloud UI), которая является URL службы, используемого для подключения к службе (например,
https://dv2fzne24g.us-east-1.aws.clickhouse.cloud:8443
). - Папку объектного хранилища, где служба хранит все данные и частично метаданные:
Дочерние одиночные службы могут масштабироваться вертикально, в отличие от одиночных родительских служб.

Рис. 1 - текущая служба в ClickHouse Cloud
Разделение вычислений позволяет пользователям создавать несколько групп узлов вычислений, каждая из которых имеет свою собственную конечную точку и использует одну и ту же папку объектного хранилища, а значит, и одни и те же таблицы, представления и т.д.
Каждая группа узлов вычислений будет иметь свою собственную конечную точку, так что вы можете выбрать, какой набор реплик использовать для ваших нагрузок. Некоторые из ваших нагрузок могут удовлетворяться только одной небольшой репликой, а другие могут требовать полной высокой доступности (HA) и сотен гигабайт памяти. Разделение вычислений также позволяет отделить операции чтения от операций записи, чтобы они не мешали друг другу:

Рис. 2 - разделение вычислений в ClickHouse Cloud
В этой программе частного предварительного просмотра вы получите возможность создавать дополнительные службы, которые делят одни и те же данные с вашими существующими службами, или создать совершенно новую настройку с несколькими службами, разделяющими те же данные.
Что такое хранилище?
В ClickHouse Cloud хранилище — это набор служб, которые делят одни и те же данные. Каждое хранилище имеет основную службу (эта служба была создана первой) и вторичные службы. Например, на скриншоте ниже вы можете увидеть хранилище "DWH Prod" с двумя службами:
- Основная служба
DWH Prod
- Вторичная служба
DWH Prod Subservice

Рис. 3 - Пример хранилища
Все службы в хранилище делят одно и то же:
- Регион (например, us-east1)
- Провайдер облачных услуг (AWS, GCP или Azure)
- Версию базы данных ClickHouse
Вы можете сортировать службы по хранилищу, к которому они принадлежат.
Контроль доступа
Учетные данные базы данных
Поскольку все в хранилище делят один и тот же набор таблиц, они также делят контроль доступа к этим другим службам. Это означает, что все пользователи базы данных, созданные в Службе 1, также смогут использовать Службу 2 с теми же правами (разрешениями на таблицы, представления и т.д.), и наоборот. Пользователи будут использовать другую конечную точку для каждой службы, но будут использовать одно и то же имя пользователя и пароль. Другими словами, пользователи делятся между службами, работающими с одним и тем же хранилищем:

Рис. 4 - пользователь Алиса была создана в Службе 1, но она может использовать те же учетные данные для доступа ко всем службам, которые делят одни и те же данные
Контроль сетевого доступа
Часто бывает полезно ограничить доступ к конкретным службам для других приложений или произвольных пользователей. Это можно сделать, используя сетевые ограничения, аналогично тому, как это настроено для обычных служб (перейдите в Настройки на вкладке службы в конкретной службе в консоли ClickHouse Cloud).
Вы можете применить настройку фильтрации IP для каждой службы отдельно, что означает, что вы можете контролировать, какое приложение может получить доступ к какой службе. Это позволяет вам ограничить пользователей от использования конкретных служб:

Рис. 5 - Алиса ограничена в доступе к Службе 2 из-за сетевых настроек
Чтение против чтения-записи
Иногда полезно ограничить доступ на запись к конкретной службе и разрешить записи только для подмножества служб в хранилище. Это можно сделать при создании второй и nth служб (первая служба всегда должна быть с правами на чтение и запись):

Рис. 6 - Службы чтения-записи и только для чтения в хранилище
Службы только для чтения в настоящее время позволяют выполнять операции управления пользователями (создание, удаление и т.д.). Это поведение может быть изменено в будущем.
Масштабирование
Каждую службу в хранилище можно настроить для вашей нагрузки по следующим параметрам:
- Число узлов (реплик). Основная служба (служба, которая была создана первой в хранилище) должна иметь 2 или более узлов. Каждая вторичная служба может иметь 1 или более узлов.
- Размер узлов (реплик)
- Должна ли служба масштабироваться автоматически
- Должна ли служба быть приостановлена при бездействии (не может быть применена к первой службе в группе - см. раздел Ограничения)
Изменения в поведении
Когда разделение вычислений включено для службы (когда создана хотя бы одна вторичная служба), вызов функции clusterAllReplicas()
с именем кластера default
будет использовать только реплики из службы, где он был вызван. Это означает, что если есть две службы, подключенные к одному и тому же набору данных, и clusterAllReplicas(default, system, processes)
вызывается из службы 1, то будут показаны только процессы, работающие на службе 1. Если нужно, вы все равно можете вызвать, например, clusterAllReplicas('all_groups.default', system, processes)
, чтобы получить доступ ко всем репликам.
Ограничения
Поскольку это разделение вычислений в настоящее время находится в частном предварительном просмотре, существуют некоторые ограничения на использование этой функции. Большинство из этих ограничений будут сняты после того, как функция будет выпущена в GA (общую доступность):
-
Основная служба всегда должна быть запущена и не может быть приостановлена (ограничение будет снято некоторое время после GA). В течение частного предварительного просмотра и некоторое время после GA основная служба (обычно существующая служба, которую вы хотите расширить, добавив другие службы) всегда будет запущена и настройка приостановки будет отключена. Вы не сможете остановить или приостановить основную службу, если существует хотя бы одна вторичная служба. Как только все вторичные службы будут удалены, вы сможете снова остановить или приостановить оригинальную службу.
-
Иногда нагрузки не могут быть изолированы. Хотя цель состоит в том, чтобы предоставить вам возможность изолировать нагрузки базы данных друг от друга, могут быть крайние случаи, когда одна нагрузка в одной службе повлияет на другую службу, использующую одни и те же данные. Это довольно редкие ситуации, которые в основном связаны с нагрузками, подобными OLTP.
-
Все службы с правами на чтение-запись выполняют фоновые операции слияния. При вставке данных в ClickHouse база данных сначала вставляет данные в некоторые промежуточные разделы, а затем выполняет слияния в фоновом режиме. Эти слияния могут потреблять память и ресурсы CPU. Когда две службы с правами на чтение-запись делят одно и то же хранилище, они обе выполняют фоновые операции. Это значит, что может возникнуть ситуация, когда в Службе 1 есть запрос
INSERT
, но операция слияния завершена Службой 2. Обратите внимание, что службы только для чтения не выполняют фоновые слияния, следовательно, не расходуют свои ресурсы на эту операцию. -
Вставки в одну службу с правами на чтение-запись могут предотвратить приостановку другой службы с правами на чтение-запись, если приостановка включена. Из-за предыдущего пункта вторая служба выполняет фоновые операции слияния для первой службы. Эти фоновые операции могут помешать второй службе перейти в спящий режим во время приостановки. Как только фоновые операции завершены, служба будет приостановлена. Службы только для чтения не затрагиваются и будут приостановлены без задержек.
-
Запросы CREATE/RENAME/DROP DATABASE могут быть заблокированы приостановленными/остановленными службами по умолчанию. Эти запросы могут зависнуть. Чтобы обойти это, вы можете запустить запросы управления базами данных с
settings distributed_ddl_task_timeout=0
на уровне сессии или для конкретного запроса. Например:
-
В очень редких случаях вторичные службы, которые были приостановлены или остановлены на длительное время (дни), могут вызвать снижение производительности у других служб в том же хранилище. Эта проблема будет скоро решена и связана с мутациями, выполняемыми в фоновом режиме. Если вы считаете, что сталкиваетесь с этой проблемой, пожалуйста, свяжитесь с ClickHouse Поддержкой.
-
В настоящее время существует мягкий лимит в 5 служб на хранилище. Свяжитесь с командой поддержки, если вам нужно больше 5 служб в одном хранилище.
Цены
Дополнительные службы, созданные в ходе частного предварительного просмотра, выставляются по обычным тарифам. Цены на вычисления одинаковы для всех служб в хранилище (основных и вторичных). Хранилище выставляется только один раз - оно включено в первую (оригинальную) службу.
Резервные копии
- Поскольку все службы в одном хранилище делят одно и то же хранилище, резервные копии создаются только для основной (первичной) службы. Таким образом, данные для всех служб в хранилище резервируются.
- Если вы восстанавливаете резервную копию из основной службы хранилища, она будет восстановлена в совершенно новую службу, не связанную с существующим хранилищем. Вы можете сразу после завершения восстановления добавить больше служб в новую службу.
Использование хранилищ
Создание хранилища
Чтобы создать хранилище, вам нужно создать вторичную службу, которая будет делить данные с существующей службой. Это можно сделать, нажав на знак плюс на любой из существующих служб:

Рис. 7 - Нажмите на знак плюс, чтобы создать новую службу в хранилище
На экране создания службы оригинальная служба будет выбрана в выпадающем списке в качестве источника данных для новой службы. После создания эти две службы образуют хранилище.
Переименование хранилища
Существует два способа переименовать хранилище:
- Вы можете выбрать "Сортировка по хранилищу" на странице служб в правом верхнем углу, а затем щелкнуть на значок карандаша рядом с именем хранилища.
- Вы можете щелкнуть по имени хранилища на любой из служб и переименовать хранилище там.
Удаление хранилища
Удаление хранилища означает удаление всех вычислительных служб и данных (таблиц, представлений, пользователей и т.д.). Это действие не может быть отменено. Вы можете удалить хранилище только удалив первую созданную службу. Для этого:
- Удалите все службы, которые были созданы дополнительно к службе, созданной первой;
- Удалите первую службу (внимание: все данные хранилища будут удалены на этом этапе).