Архитектура YMatrix
YMatrix использует архитектуру без общего ресурса (share-nothing). Её ключевая особенность заключается в том, что каждый узел работает независимо, не разделяя память или хранилище, а взаимодействует исключительно через сетевое соединение. Такая архитектура широко применяется в распределённых базах данных, системах больших данных и веб-сервисах с высокой нагрузкой.
Базовая архитектура
Полный производственный кластер YMatrix включает:
- 1 мастер-узел
- 1 резервный мастер-узел
- N узлов данных (каждый запускает несколько первичных и зеркальных экземпляров)

Мастер-узел
- Управление сессиями клиентов: Выступает в качестве точки входа для приложений, обеспечивающей приём и управление запросами на подключение клиентов.
- Разбор SQL и планирование запросов: Анализирует SQL-запросы, поступающие от клиентов, и генерирует распределённые планы выполнения (Query Plans).
- Распределение планов и мониторинг выполнения: Распределяет сгенерированный план выполнения на все сегменты данных и отслеживает ход их выполнения.
- Агрегация результатов и возврат клиенту: Собирает результаты со всех сегментов данных и возвращает финальный ответ клиенту.
- Хранение метаданных: Не хранит бизнес-данные; содержит только системные метаданные (словарь данных), включая определения и атрибуты всех элементов данных.
Резервный мастер-узел
- Резервирование данных и согласованность: Поддерживает идентичные данные и функциональность с мастер-узлом.
- Автоматический переход при сбое: При отказе мастер-узла резервный мастер автоматически становится новым мастером, обеспечивая непрерывность сервиса.
- Изолированное развертывание: Резервный мастер должен размещаться на другом физическом хосте, отличном от мастер-узла.
Узел данных
Узлы данных являются основными компонентами хранения и вычислений в YMatrix. Данные таблиц распределяются между первичными экземплярами в соответствии с конфигурацией. Каждый первичный экземпляр содержит уникальный фрагмент данных без пересечений. Во время выполнения запроса мастер генерирует план выполнения и распределяет его на все первичные экземпляры для параллельной обработки, что повышает скорость ответа за счёт параллельных вычислений.
Первичный экземпляр
На одном узле может существовать несколько независимых первичных экземпляров.
- Хранение данных: Данные таблиц распределяются между первичными экземплярами в соответствии с конфигурацией. Каждый первичный экземпляр содержит непересекающийся фрагмент данных.
- Выполнение распределённых запросов: Выполняет планы выполнения, отправленные мастер-узлом, используя параллельные вычисления для ускорения ответа на запросы.
- Ядро обработки данных: Ключевой элемент достижения высокой производительности. Данные и нагрузка равномерно распределяются между несколькими однородными первичными экземплярами, позволяя им одновременно работать над одной задачей и завершать её синхронно.
Зеркальный экземпляр
На одном узле может существовать несколько независимых зеркальных экземпляров.
- Согласованность с первичным экземпляром: Поддерживает идентичные данные и функциональность с соответствующим первичным экземпляром.
- Поддержка отказоустойчивости: При отказе первичного экземпляра (например, из-за отключения питания или сбоя процесса) зеркальный экземпляр автоматически становится активным, беря на себя хранение данных и вычисления, обеспечивая бесперебойную работу. В производственных средах первичные и зеркальные экземпляры обычно размещаются на отдельных хостах для предотвращения единой точки отказа.
Выполнение запросов
Запросы оптимизируются для генерации плана выполнения, который затем исполняется вычислительным и хранилищным движками для чтения данных, выполнения вычислений и возврата результатов.
Оптимизатор
YMatrix предоставляет два оптимизатора:
- PQO (Postgres Query Optimizer): Основан на родном оптимизаторе PostgreSQL, подходит для транзакционных (TP) рабочих нагрузок и большинства аналитических (AP) сценариев.
- ORCA: Оптимизатор на основе Cascades, генерирующий более эффективные планы выполнения для крупных и сложных запросов, снижающий потребление ресурсов и повышающий производительность.
Хранилище
YMatrix поддерживает два движка хранения:
- HEAP: Классический движок хранения по строкам, унаследованный от PostgreSQL, идеально подходящий для транзакционных (TP) рабочих нагрузок с высокой производительностью операций вставки, обновления и удаления.
- MARS3: Высокопроизводительный гибридный движок хранения строк и столбцов, разработанный YMatrix, обеспечивающий отличную производительность в аналитических (AP) и временных рядах, а также высокий коэффициент сжатия.
Вычислительный движок
YMatrix использует полностью векторизованный движок выполнения. В сценариях с большими объёмами данных это значительно повышает скорость выполнения запросов.
Высокая доступность
YMatrix обеспечивает высокую доступность за счёт зеркалирования, а также предоставляет аварийное восстановление между сайтами для поддержания непрерывности сервиса в экстремальных условиях.
Зеркалирование
При включённом зеркалировании каждый первичный экземпляр имеет соответствующий зеркальный экземпляр с идентичными данными и функциональностью. В производственной среде первичные и зеркальные экземпляры размещаются на отдельных хостах.
- В нормальном режиме зеркальные экземпляры не участвуют в вычислениях; они лишь поддерживают синхронизацию данных с первичными.
- При отказе первичного экземпляра или его хоста зеркальный экземпляр бесшовно перенимает его функции, обеспечивая непрерывность сервиса.

Управление состоянием
ALOHA (Advanced Least Operation High Availability) — это новая служба управления состоянием кластера.
В кластере YMatrix случайным образом выбирается нечётное количество узлов для формирования распределённого кластера ETCD, который хранит состояние узлов и экземпляров. При сбое (отказ узла, сбой экземпляра и т.п.) система использует эту информацию для автоматического переключения и миграции отказов, обеспечивая высокую доступность.

Аварийное восстановление между сайтами
YMatrix поддерживает развертывание с аварийным восстановлением между сайтами. При отказе основного кластера сервисы могут переключиться на резервный кластер, который затем функционирует как обычный кластер YMatrix.
