Закрытая альфа-версия Multigres: автоматическое переключение при сбоях для Supabase Postgres

Источник: Supabase•

Закрытая альфа-версия Multigres: автоматическое переключение при сбоях для Supabase Postgres

Multigres добавляет автоматическое переключение при сбоях в Supabase Postgres и доступен в рамках закрытой альфа-версии для организаций на платном тарифе.

Multigres добавляет высокую доступность в проекты Supabase, и теперь он находится в стадии закрытой альфа-версии. Организации на платном тарифе могут запросить доступ и создавать проекты, работающие на трех узлах Postgres в разных зонах доступности, с поддержкой автоматического переключения при сбоях и пулинга соединений.

Сегодня каждый проект Supabase выполняет запись на единственный первичный узел Postgres. Это отлично работает для большинства приложений и останется поведением по умолчанию. Обратная сторона заключается в том, что происходит при сходе с строя первичного узла. Если в базовом оборудовании происходит сбой или в зоне доступности случается авария, ваша база данных становится недоступной до восстановления.

Команды, которые не могут смириться с таким простоями, обычно настраивают высокую доступность самостоятельно. Они запускают реплики, добавляют менеджер failover, устанавливают пулер перед ними и пишут инструкции для случаев, с которыми утилиты не справляются. Самое сложное — убедиться, что ни одна подтвержденная запись не будет потеряна при повышении реплики. С помощью Multigres компания Supabase берет все это на себя.

Multigres — это операционная система с открытым исходным кодом для Postgres, созданная командой Vitess. Vitess был разработан в YouTube для масштабирования MySQL. В 2025 году мы анонсировали Multigres, чтобы создать аналогичную систему для Postgres. Мы выпустили Multigres v0.1 с открытым исходным кодом в июне по лицензии Apache 2.0, и эта закрытая альфа-версия — первый случай ее запуска на платформе Supabase. Впервые мы показали Multigres на конференции Supabase Select 2 октября.

Multigres не является форком Postgres. Ваши данные хранятся в стандартном Postgres, а Multigres управляет окружающим его кластером: маршрутизацией соединений, пулингом, репликацией, переключением при сбоях и резервным копированием.

При создании проекта с включенным Multigres вы получаете:

  • Трехузловой кластер Postgres, распределенный по зонам доступности в одном регионе, благодаря чему потеря одной зоны не выводит из строя вашу базу данных.
  • Автоматическое переключение при сбоях. Если первичный узел выходит из строя, Multigres повышает реплику в течение нескольких секунд.
  • Встроенный пулинг соединений. Нет необходимости настраивать или запускать отдельный пулер.
  • Одна стандартная строка подключения Postgres. Вам не нужно менять код приложения для перехода на Multigres.
  • Большую часть возможностей Supabase. Аутентификация, REST API данных, хранилище (Storage), Edge Functions и все клиентские библиотеки работают с проектами Multigres.

Большинство инструментов высокой доступности Postgres рассматривают переключение при сбоях как проблему мониторинга. Они обнаруживают исчезновение первичного узла, выбирают реплику и повышают ее. Самая сложная задача — выбрать реплику, которую безопасно повышать. Если старый первичный узел подтвердил запись, которая так и не дошла до повышаемой реплики, эта запись теряется, даже если вашему приложению уже сообщили об ее успешном завершении.

Вместо этого Multigres рассматривает переключение при сбоях как задачу консенсуса. Он использует обобщенный протокол консенсуса, построенный поверх синхронной репликации Postgres. Ваше приложение получает подтверждение записи только после того, как она реплицирована на достаточное количество узлов для переживания сбоя. Это гарантирует, что каждая подтвержденная запись существует как минимум на одном уцелевшем узле. Когда первичный узел падает, оставшиеся узлы приходят к согласию относительно полного набора подтвержденных записей и следят за тем, чтобы повышаемая реплика содержала каждую из них перед приемом новых записей. Именно так подтвержденные коммиты переживают сбой.

Во время переключения шлюз Multigres может задерживать входящие запросы до готовности нового первичного узла, вместо возврата ошибок подключения вашему приложению.

В PgBouncer вы заранее выбираете режим пулинга. Текстовый режим позволяет множеству клиентов использовать небольшое количество соединений, но ограничивает функции уровня сеанса. Режим сеанса поддерживает эти функции, но каждый клиент удерживает соединение все время, пока он подключен.

Multigres анализирует каждый запрос и отслеживает создаваемое им состояние сеанса, поэтому самостоятельно принимает решения об обработке каждого запроса. Вам не нужно выбирать режим. Кроме того, каждый пользователь базы данных получает собственный пул, а алгоритм справедливого распределения делит бюджет соединений между пользователями, чтобы одна активная роль не лишила ресурсов остальные. Подготовленные выражения дедуплицируются, что означает: Postgres парсит и кэширует инструкцию один раз, а не для каждого клиента. Подробности работы читайте в статье Пулинг без выбора режима в блоге Multigres.

  • Запросите доступ. Заполните форму раннего доступа. Мы добавляем организации в альфа-версию постепенно, поэтому опция не появится на вашей панели управления (Dashboard), пока ваша организация не получит приглашение.
  • Создайте проект с высокой доступностью. Откройте пункт «Создать новый проект» в панели управления. Включите переключатель «Высокая доступность» (High availability).
  • Завершите настройку и подключитесь. Установите пароль базы данных, регион и размер вычислений, затем нажмите кнопку «Создать новый проект». Подключайтесь к нему так же, как к любому другому проекту Supabase.

Multigres бесплатен во время альфа-тестирования для двух проектов на организацию. Он недоступен на бесплатном тарифе (Free), и цены могут измениться после завершения альфа-тестирования.

  • Не для продакшена. Проекты Multigres не подпадают под действие соглашения об уровне обслуживания (SLA) по бесперебойной работе во время альфа-тестирования.
  • Выбирается при создании проекта. Вы не можете включить Multigres в существующем проекте, и на данный момент не существует управляемого пути возврата к стандартному проекту Postgres.
  • Без Realtime. Multigres пока не поддерживает логическую репликацию, от которой зависит Realtime.
  • Без восстановления на определенный момент времени (Point-in-Time Recovery). Доступны стандартные ежедневные резервные копии.
  • Один регион. Вы можете создавать проекты только в регионе Восток США (Северная Вирджиния). Межрегиональные реплики для чтения пока не поддерживаются.
  • Фиксированный размер. Размер вычислений, диск и количество реплик нельзя изменить после создания проекта. Если вам требуется большая пропускная способность чтения или больше клиентских подключений, свяжитесь с нами, и наша команда поможет.
  • Multigres или OrioleDB. Проект может использовать что-то одно, но не оба решения одновременно.

О чём эта статья

Ещё в разделе «Разработка ПО»

Все →

Ещё от Supabase