Решайте свои задачи с Managed Service for PostgreSQL

В 2012 году Яндекс решил перенести сервис Яндекс.Почта с Oracle на другую СУБД. Через четыре года экспериментов и подготовки — в 2016 году — сервис полностью мигрировал на PostgreSQL. С этого момента команда разработчиков и администраторов непрерывно развивает проект: написала свой пулер соединений, доработала системы репликации, восстановления и мониторинга. Сейчас база данных Почты занимает больше 2 ПБ, а пиковые нагрузки достигают 1 миллиона транзакций в секунду.

Вклад в развитие опенсорсной СУБД PostgreSQL позволил не только повысить эффективность работы собственных сервисов, но и предоставить доступ к СУБД клиентам Yandex.Cloud в рамках сервиса управляемой базы данных Managed Service for PostgreSQL.

Почему бизнес выбирает PostgreSQL и в чем преимущество Managed Service?

Популярность PostgreSQL

PostgreSQL — одна из самых популярных реляционных СУБД в мире. Ее разрабатывают с 1986 года как продолжение проекта Ingres, а свое имя PostgreSQL и версию 6.0 СУБД получила спустя 10 лет. Непрерывной доработкой и выпуском новых версий PostgreSQL как опенсорсного проекта занимаются сотни разработчиков по всему миру. У СУБД нет владельца или управляющей компании, каждый пользователь может предложить изменения или включиться в процесс разработки. PostgreSQL свободно распространяется, и пользователи могут дорабатывать базу данных под свои задачи.

Выбор PostgreSQL для реализации высоконагруженных проектов был обусловлен ее универсальностью, надежностью и широкой функциональностью. Основные возможности СУБД:

  • соответствие модели ACID (atomicity, consistency, isolation, durability);
  • поддержка библиотек взаимодействия с различными языками программирования;
  • поддержка репликации, функции MVCC и индексации геометрических объектов;
  • работа со слабоструктурированными данными в формате JSON;
  • предоставление пользователю широких возможностей по расширению (создание новых типов данных, типов индексов, расширений и других способов кастомизации).

PostgreSQL позволяет управлять гигантскими базами данных, она очень надежна, соответствует всем стандартам SQL и отлично справляется с выполнением сложных запросов. СУБД выбрали для решения своих задач такие крупные IT-компании как Apple, Cisco, Facebook, IMDB, Skype, Spotify, Sun Microsystem и Яндекс.

Архитектура PostgreSQL

Архитектура PostgreSQL позволяет эффективно использовать вычислительные ресурсы и систему хранения. СУБД реализована по клиент-серверной модели. Сервер может обрабатывать одновременно несколько сеансов от клиентов, для каждого из них запускается новый процесс, изолированный от других. Когда клиент и сервер находятся на разных хостах, обмен данными происходит по сети TCP/IP. Сервер может находиться за пределами инфраструктуры компании, например, во внешнем дата-центре или облаке провайдера. В таком случае соединение между клиентом и сервером настраивается через интернет-канал.

Для понимания принципов работы PostgreSQL выделим три главных особенности ее архитектуры: процессы, память и организацию данных.

Процессы PostgreSQL

Процессы

В PostgreSQL есть три основных группы процессов. Postmaster–процесс, который первым запускается при старте сервера, инициализирует общую память, запускает другие фоновые процессы, принимает входящие соединения и передает их на серверный процесс Postgres. Фоновые (служебные) процессы выполняют служебные функции: запись в журнал сообщений об ошибках, сброс данных из буфера WAL на диск, автоочистку таблиц от удаленных записей, сбор статистики о работе БД и другие.

Чтобы уменьшить нагрузку на Postmaster при большом числе соединений, необходимо использовать пулер соединения, например, PgBouncer. В Яндексе используется собственный пулер соединения Odyssey, который разработали в 2019 году. Odyssey решил несколько проблем PgBouncer: однопоточность, сложность в диагностике, лимит max_client_pool_conn. Кластеры PostgreSQL, созданные в Yandex.Cloud, автоматически получают Odyssey и их производительность не падает с увеличением числа соединений.

Память

Большую часть общей памяти (Shared Memory), которую использует в работе PostgreSQL, занимает буферный кеш (shared buffers), необходимый для ускорения работы с диском сервера. Второй по значимости раздел общей памяти — буфер WAL (журнала упреждающей записи), который временно хранит все изменения данных в базе. Оставшуюся часть памяти занимает различная служебная информация: данные о блокировках, кеш каталога серверного процесса, планы запросов, рабочие данные фоновых процессов и другие.

Организация данных

В основе хранения PostgreSQL — кластер из нескольких хостов баз данных. Данные на диске хранятся в виде табличных пространств, которые указывают на каталог в файловой системе и могут одновременно использоваться несколькими базами данных. Таблицы и индексы хранятся в одном или нескольких файлах внутри каталога табличного пространства.

Задачи, которые решает PostgreSQL

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

PostgreSQL решает бизнес-задачи в тех сферах, где простои в работе приводят к финансовым и репутационным потерям: в ритейле, e-commerce, в энергетике и промышленности, в финансах и страховании, в образовательных учреждениях и IT-компаниях. С помощью PostgreSQL можно:

  • строить сложные платформы данных для анализа показателей рынка, учета ресурсов и финансовой оценки;
  • хранить данные с датчиков и устройств;
  • быстро запускать на рынок продукты и приложения;
  • обрабатывать и анализировать большие массивы данных;
  • создавать и запускать корпоративные системы управления.

Для решения задач у PostgreSQL есть полный набор возможностей и функций:

  • надежность — ACID, WAL (Write-Ahead Logging), PITR (Point-in-Time Recovery), репликация и резервное копирование;
  • производительность — система индексов, гибкая блокировка, интеллектуальный планировщик запросов, кеширование и буфер;
  • расширяемость — создание новых функций, типов, агрегатов и индексов, перенос логики приложения на БД;
  • расширенная поддержка SQL и многочисленных типов данных.

Но все эти возможности хорошо работают при квалифицированной настройке и обслуживании СУБД. Администратор должен правильно прописать параметры БД в конфигурационном файле, организовать круглосуточный мониторинг, контролировать работу дополнительных сервисов, следить за нагрузкой фоновых процессов, подбирать и модернизировать аппаратную платформу и виртуализацию, корректно спланировать схему данных, настроить репликацию и резервное копирование. У каждой компании-заказчика есть внутренние требования к организации работы PostgreSQL, что повышает ответственность при эксплуатации БД:

  • DevOps-инженерам нужна возможность быстро создавать новые экземпляры СУБД, автоматизировать развертывание программного обеспечения, легко распространять конфигурации по всем работающим экземплярам как в тестовых средах, так и в продукте.
  • Разработчики хотят сократить число ручных операций, чтобы приложение разворачивалось без сбоев, тестирование обновлений и новых функций было автоматизировано, а для обеспечения целостности данных и безотказной работы были настроены репликации и план резервного копирования.
  • Бизнес требует, чтобы в работе не было простоев и строго соблюдалось SLA, а в случае аварии система в самый короткий срок вернулась в рабочее состояние.

Благодаря подробной документации и помощи членов сообщества PostgreSQL штатные специалисты при наличии достаточного опыта могут самостоятельно выполнить настройку и интеграцию СУБД для вашей организации, нести ответственность и риски за ее работу. Но есть и альтернативные варианты — воспользоваться услугами компаний-интеграторов для первичной настройки и дальнейшего сопровождения или заказать услугу Managed Service for PostgreSQL.

Преимущества управляемой PostgreSQL перед локальной

Главный принцип Managed Service для СУБД или других услуг из облака — передача части вопросов обслуживания от пользователя к облачному провайдеру. Managed Service for PostgreSQL позволяет управлять кластерами объектно-реляционной СУБД PostgreSQL, развернутыми на инфраструктуре Yandex.Cloud.

Облачный провайдер берет на себя организацию и обслуживание аппаратного комплекса, сетей, платформы виртуализации, операционной системы, ПО СУБД и его обновление, защиту данных, обеспечение безопасности, инструменты мониторинга, а также задачи репликации, отказоустойчивости, резервного копирования и восстановления.

Например, сейчас автоматическая отказоустойчивость внутри группы высокой доступности (HA) в кластерах Managed Service for PostgreSQL обеспечивается одной синхронной репликой, которая в реальном времени записывает данные мастера, и одной или несколькими асинхронными.

Схема с синхронной и асинхронной репликами

Но уже в летнем обновлении сервиса будет реализована кворумная синхронная репликация (quorum synchronous replica). Данные мастер-хоста будут автоматически реплицироваться на две синхронные реплики внутри HA, а в случае отказа основного мастера одна из них возьмет на себя его роль.

Схема кворумной синхронной репликации

Управляемый сервис решает самые сложные и рутинные вопросы администрирования баз данных — от создания кластера до регулярных обновлений. Эти процедуры требуют высокой квалификации инженеров и связаны с риском «поломать то, что работает». В инфраструктуре on-premise такие задачи необходимо решать самостоятельно, что не всегда возможно. Поэтому их делегирование на облачного провайдера позволяет организовать безотказную работу PostgreSQL — вы получаете готовую к работе надежную и безопасную систему. Также управляемый сервис БД по сравнению с самостоятельным развертыванием в on-premise и в ВМ оказывается дешевле в долгосрочной перспективе за счет экономии на оборудовании и персонале.

Managed Service for PostgreSQL дает возможность гибкого управления кластерами БД, быстрого масштабирования и удобного мониторинга, например:

  • В несколько кликов развернуть базу в одном или нескольких экземплярах, получив кластер, причем его узлы могут быть в разных зонах доступности. Добавлять новые серверы в кластер, увеличивая его мощность.
  • Управлять кластером с помощью веб-консоли, CLI, Terraform, REST API или SDK.
  • Осуществлять синхронную репликацию внутри HA-группы или каскадную асинхронную репликацию.
  • Вручную переключаться между репликами.
  • Подключаться к хостам БД не по IP, а по FQDN-именам, которые прописаны в C-NAME и для мастера, и для одной из реплик.
  • Изменять размер дисков не конкретного хоста, а всего кластера с автоматической репликацией на другие узлы без остановки работы сервиса.
  • Вести мониторинг кластера БД и хостов с помощью инструментов Яндекса.
  • Восстанавливать базу из любой временной точки за последнюю неделю — point-to-time из автоматически созданной резервной копии.
  • Гарантировать своему бизнесу доступ к базе 99,99% на чтение и 99,95% на запись по SLA с облачным провайдером.
  • Оплачивать только потребляемые ресурсы и иметь круглосуточную техническую поддержку инженеров Yandex.Cloud.

Для решения бизнес-задач вам остается только спроектировать схему данных и запросы, а в процессе эксплуатации вести мониторинг с помощью инструментов Yandex Managed Service for PostgreSQL и контролировать свободное место на дисках.

Managed Service for PostgreSQL — это удобный инструмент для развития вашего бизнеса. Принцип управляемых сервисов позволяет оставить себе только задачи стратегического управления, мониторинга производительности и масштабирования и не заниматься обслуживанием, обновлением и репликацией.

Ваши данные будут находиться в безопасной и технически современной инфраструктуре Yandex.Cloud с гарантированной отказоустойчивостью и надежностью.

Создайте свой первый кластер PostgreSQL →

  • Статьи