Multigress — открытая масштабируемая альтернатива PostgreSQL
В статье описывается проект Multigress — открытая СУБД, созданная для преодоления ограничений масштабируемости традиционной PostgreSQL. Читатель узнает о её архитектуре, использовании NVMe‑накопителей, репликации, высокой доступности и интеграции с Kubernetes.
Multigress объединяет компоненты Multipooler, Multigateway и Multiarchc, обеспечивая эффективное управление соединениями, маршрутизацию запросов и автоматический failover. Благодаря локальным NVMe‑накопителям, репликации и шардингу система достигает планетарного масштаба и уровня доступности 99,999 %. Проект распространяется под открытой лицензией и поставляется с оператором Kubernetes для простого развертывания.
#Проблема масштабируемости традиционных PostgreSQL
Традиционная PostgreSQL зарекомендовала себя как надёжная и гибкая система управления базами данных, однако её возможности масштабирования оказываются ограниченными при работе с действительно большими нагрузками. Автор проекта, после трёхлетнего перерыва, вернулся к консалтингу и обнаружил, что даже крупные компании, использующие PostgreSQL, сталкиваются с проблемами при попытке расширить инфраструктуру. Примером такой компании стала Metronome, которая применяла PostgreSQL в масштабных проектах, но всё равно сталкивалась с ограничениями в производительности и отказоустойчивости. Эти наблюдения стали отправной точкой для разработки собственного решения, способного преодолеть существующие барьеры масштабируемости.
#История создания Multigress
Идея Multigress возникла из опыта работы с системами, обслуживающими огромные объёмы данных, такими как YouTube, Slack, GitHub и Bloomberg. Основатель проекта, Сугу, совместно со своим партнёром, решил построить базу данных, способную поддерживать глобальные нагрузки без потери производительности. Вдохновлённый принципами открытого программного обеспечения, они выбрали путь открытого кода, полагаясь на автономию небольшого, но целеустремлённого коллектива. Сугу подчёркивал важность свободы действий и возможности самозахвата проекта, что позволило сосредоточиться на решении самых критичных задач без давления коммерческих интересов.
#Архитектура Multigress
Multigress представляет собой набор взаимосвязанных компонентов, каждый из которых отвечает за определённый аспект работы системы. Multipooler обеспечивает эффективное подключение к базе данных, управляя пулом соединений и распределяя их между запросами. Multigateway отвечает за маршрутизацию пользовательских подключений, контролируя их распределение по узлам кластера. Multiarchc реализует механизм автоматического переключения (failover) в случае сбоя основной базы, гарантируя непрерывность работы. Кроме того, система использует реплицированное хранилище, позволяющее хранить данные в нескольких копиях для повышения надёжности и ускорения доступа. Архитектурные решения включают поддержку локального NVMe‑накопителя, что существенно повышает скорость ввода‑вывода, а также механизмы шардинга и роутинга запросов, позволяющие распределять нагрузку по десяткам тысяч узлов.
#Производительность и использование NVMe
Одним из ключевых факторов, обеспечивающих высокую производительность Multigress, является интеграция локальных NVMe‑накопителей. Эти устройства предоставляют значительно более низкую задержку и большую пропускную способность по сравнению с традиционными SSD, что особенно важно при работе с интенсивными транзакциями и аналитическими запросами. Благодаря использованию NVMe система достигает заметного прироста скорости обработки запросов, позволяя поддерживать высокую нагрузку без деградации отклика.
#Масштабируемость и репликация
Multigress спроектирована с учётом необходимости масштабирования до планетарных размеров. Система поддерживает репликацию данных, позволяя хранить несколько копий в разных географических регионах, что повышает доступность и ускоряет чтение. Шардинг, реализованный на уровне роутера запросов, распределяет данные по отдельным узлам кластера, что позволяет эффективно использовать ресурсы и поддерживать работу с десятками тысяч серверов. При планировании масштабирования учитываются особенности запросов и логика группировки данных, что помогает оптимизировать размещение информации и минимизировать межузловой трафик.
#Высокая доступность и отказоустойчивость
Одной из целей Multigress является достижение уровня доступности «пять девяток» (99,999 %). Для этого система сочетает репликацию, автоматический failover через компонент Multiarchc и постоянный мониторинг состояния узлов. При возникновении сбоя основной базы данных система мгновенно переключается на резервную копию, обеспечивая непрерывность работы без потери данных. Политика стойкости данных предусматривает сохранение целостности информации даже в случае одновременного отказа нескольких узлов, что делает решение надёжным для критически важных приложений.
#Открытый исходный код и лицензирование
Multigress распространяется под открытой лицензией, что позволяет компаниям свободно использовать, модифицировать и интегрировать её в свои инфраструктуры. При выборе лицензии особое внимание уделяется возможности самозахвата проекта, то есть сохранения контроля над развитием кода без вмешательства сторонних коммерческих организаций. Отсутствие обязательной коммерческой поддержки способствует долгосрочной стабильности и независимости проекта, а открытый характер кода облегчает аудит безопасности и адаптацию под специфические требования пользователей.
#Команда и философия проекта
Разработкой Multigress занимается небольшая команда, что позволяет быстро реагировать на возникающие проблемы и сосредотачиваться на самых приоритетных задачах. Такой подход обеспечивает гибкость и ускоряет процесс внедрения новых функций. Философия проекта основана на ценностях автономии и свободы действий, что отражается в открытом характере разработки и в стремлении к минимальному вмешательству внешних коммерческих интересов. Команда ориентирована на создание решения, которое будет полезно широкому кругу разработчиков и компаний, а не только ограниченному набору клиентов.
#Интеграция с Kubernetes и оператор
Для упрощения развертывания и управления кластерами Multigress разрабатывается открытый оператор Kubernetes. Этот оператор автоматизирует процесс создания, масштабирования и обновления узлов, позволяя администраторам быстро разворачивать полностью готовую к работе инфраструктуру. Оператор поддерживает конфигурацию репликации, настройку NVMe‑накопителей и параметры шардинга, что делает процесс интеграции с существующими облачными средами более прозрачным. Планируется, что оператор будет доступен в публичных репозиториях, что упростит его использование в проектах, стремящихся к планетарному масштабу PostgreSQL.
#Перспективы и планы развития
В ближайшее время ожидается выпуск первой версии Multigress, поддерживающей базовые запросы и базовую репликацию. После этого планируется добавить функции шардинга, расширенные возможности роутинга запросов и более глубокую интеграцию с облачными платформами. Дальнейшее развитие будет направлено на повышение производительности, расширение возможностей мониторинга и обеспечение ещё более высокой степени отказоустойчивости. Позиционирование продукта как базы данных для следующего поколения разработчиков подразумевает упор на простоту использования, позволяя сосредоточиться на создании приложений, а не на решении проблем масштабирования.
#Вывод
Multigress возникла как ответ на ограниченные возможности масштабирования традиционной PostgreSQL, объединяя опыт работы с крупнейшими онлайн‑сервисами и современные технологические подходы. Архитектура, включающая компоненты multipooler, multigateway и multiarchc, обеспечивает эффективное управление соединениями, маршрутизацию запросов и автоматический failover. Использование локального NVMe, репликации и шардинга позволяет достичь высокой производительности и масштабируемости до планетарных размеров, а открытая лицензия и небольшая, автономная команда способствуют гибкой и независимой эволюции проекта. Интеграция с Kubernetes через оператор упрощает развертывание, а планы по дальнейшему развитию делают Multigress перспективным решением для разработчиков, стремящихся к построению масштабируемых и надёжных приложений.