Правильный расчет ресурсов оборудования для кластера ClickHouse зависит от объема данных, сложности запросов, скорости обработки данных и потребности в репликации. Вот структурированный подход к оценке необходимого объема CPU, RAM, хранилища и сетевых ресурсов.

1. Ключевые факторы, влияющие на требования к оборудованию

ФакторВлияние на ресурсы
Объем данныхОпределяет требования к хранилищу и I/O диска
Сложность запросовВлияет на использование CPU и RAM
Чтение/запись данныхВысокая скорость записи требует лучшего пропускного канала для дисков
Потребности в репликацииБольшее количество реплик требует дополнительных ресурсов для хранения и CPU
Коэффициент сжатияСнижает требования к хранилищу, но увеличивает нагрузку на CPU

2. Требования к CPU

📌 ClickHouse сильно зависит от CPU из-за векторной обработки запросов.

✅ Большее количество ядер = Быстрее выполнение запросов.

Руководство по CPU

Сценарий использованияРекомендуемое кол-во CPU
Малый (100M строк/день)4-8 vCPU на узел
Средний (1B строк/день)16-32 vCPU на узел
Крупный (10B+ строк/день)32-64 vCPU на узел
Высокая конкуренция (500+ запросов/сек)64+ vCPU на узел

🔹 Советы по оптимизации: ClickHouse хорошо масштабируется с большим количеством ядер (используйте хотя бы 8+ ядер). Динамически настраивайте max_threads для оптимизации использования CPU:

SET max_threads = 32;

3. Требования к памяти (RAM)

📌 ClickHouse хранит промежуточные результаты запросов в памяти. ✅ Большее количество RAM снижает необходимость чтения с диска и ускоряет сложные запросы.

Руководство по RAM

Сценарий использованияРекомендуемая RAM
Малый (100M строк/день)16-32 GB
Средний (1B строк/день)64-128 GB
Крупный (10B+ строк/день)128-512 GB
Сложные агрегации256 GB+

🔹 Советы по оптимизации: Контролируйте использование памяти:

SELECT * FROM system.metrics WHERE metric = 'MemoryUsage';

4. Требования к хранилищу

📌 ClickHouse требует быстрого и ёмкого хранилища.

✅ Используйте SSD/NVMe для лучшей производительности.

Оценка требований к хранилищу

Хранилище = Размер данных * Коэффициент сжатия * Коэффициент репликации * Период хранения

Руководство по хранилищу

Сценарий использованияРекомендуемое хранилище
Малый (100M строк/день, 1 год хранения)1-5 TB SSD
Средний (1B строк/день, 1 год хранения)5-20 TB NVMe
Крупный (10B+ строк/день, 1 год хранения)20-100 TB NVMe RAID

🔹 Советы по оптимизации: Используйте формат хранения MergeTree с сжатием ZSTD:

ALTER TABLE events MODIFY SETTING compression_codec = 'ZSTD';

5. Требования к пропускной способности сети

📌 Сетевые скорости влияют на репликацию и распределённые запросы.

✅ Используйте как минимум 10GbE (предпочтительно 25GbE или выше).

Руководство по сети

Размер кластераРекомендуемая сеть
1-3 узлаEthernet 1-10 Gbps
3-10 узловEthernet 10-25 Gbps
10+ узловEthernet 40-100 Gbps или InfiniBand

🔹 Советы по оптимизации: Разрешите параллельное выполнение запросов между узлами:

SET distributed_product_mode = 'local';

6. Cheat Sheet для расчета аппаратных ресурсов ClickHouse

Сценарий использованияCPURAMХранилищеСеть
Малый (100M строк/день)4-8 vCPU16-32 GB1-5 TB SSD1 Gbps
Средний (1B строк/день)16-32 vCPU64-128 GB5-20 TB NVMe10 Gbps
Крупный (10B+ строк/день)32-64 vCPU128-512 GB20-100 TB NVMe25+ Gbps
Высокий пропуск (500+ запросов/сек)64+ vCPU256+ GB100 TB+40+ Gbps

Оценка необходимого числа узлов для кластера ClickHouse зависит от объема данных, сложности запросов, нагрузки на запись и потребности в репликации. Ниже приведен структурированный пошаговый подход к расчету идеального размера кластера.

1. Ключевые факторы для определения числа узлов

ФакторВлияние на количество узлов
Объем данныхЧем больше данных, тем больше шардов
Нагрузка по запросамВысокая конкуренция — больше реплик
Нагрузка на записьВысокая скорость записи — больше узлов для записи
Потребности в репликацииВысокая доступность — больше реплик
ОтказоустойчивостьОбеспечение избыточности узлов

2. Базовая формула для оценки числа узлов

Общее количество узлов (T) в кластере ClickHouse рассчитывается по формуле:

T = (Шарды * Реплики) + Выделенные узлы (для записи, запросов, резервного копирования)

Где:

  • Шарды = (Общий размер данных / Хранилище на узел)
  • Реплики = (Уровень отказоустойчивости)
  • Выделенные узлы (необязательно) = Узлы для записи, резервного копирования или запросов

3. Оценка количества узлов на основе объема данных

Объем данныхНеобходимое количество шардовРекомендуемое количество узлов
< 1 ТБ (Малый)1-2 Шарда1-3 Узла (1 основной + 1 реплика)
1-10 ТБ (Средний)2-4 Шарда3-6 Узлов (2 шардов, 1-2 реплики на шард)
10-100 ТБ (Большой)4-8 Шардов6-12 Узлов (4-6 шардов, 1-2 реплики на шард)
100 ТБ+ (Большие данные)10+ Шардов12+ Узлов (Шардинг + Репликация)

📌 Правило большого пальца:

  • Малые рабочие нагрузки могут работать на 1-3 узлах (один узел с резервной копией).
  • Средние рабочие нагрузки требуют 3-6 узлов (шардинг + репликация).
  • Рабочие нагрузки большого масштаба требуют 6+ узлов (выделенные узлы для записи и аналитики).

4. Оценка узлов на основе нагрузки по запросам и записи

Нагрузка по запросамНагрузка по записиРекомендуемое количество узлов
Низкая (≤ 100 запросов/сек)≤ 10M строк/день1-3 Узла
Средняя (100-500 запросов/сек)10M-1B строк/день3-6 Узлов
Высокая (500+ запросов/сек)1B+ строк/день6-12 Узлов

📌 Рабочие нагрузки с высокой частотой запросов выигрывают от большего количества реплик.

📌 Рабочие нагрузки с высокой скоростью записи выигрывают от выделенных узлов для записи.

5. Учет высокой доступности (Репликация и отказоустойчивость)

Для избежания точек отказа используйте репликацию.

Уровень отказоустойчивостиРекомендуемый коэффициент репликацииОбщее количество узлов
Базовый (без избыточности)1 (Без репликации)1+ Узлов
Стандартная HA (1 реплика)2 (1 реплика на шард)3+ Узла
Enterprise HA (Многоуровневая репликация)3 (2 реплики на шард)6+ Узлов

📌 Для критически важных систем используйте как минимум 2 реплики на шард.