PostgreSQL: в чём преимущества управляемой БД перед локальной
Рассказываем, в чём причина популярности СУБД PostgreSQL, для каких задач она подходит и почему работать с управляемым сервисом проще и удобнее.
9 июля 2021 г.
10 минут чтения
В 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 есть три основных группы процессов. 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 есть полный набор возможностей и функций:
производительность — система индексов, гибкая блокировка, интеллектуальный планировщик запросов, кеширование и буфер;
расширяемость — создание новых функций, типов, агрегатов и индексов, перенос логики приложения на БД;
расширенная поддержка 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 и контролировать свободное место на дисках.
Производительность 1С на PostgreSQL в Яндекс Облаке
Managed Service for PostgreSQL — это удобный инструмент для развития вашего бизнеса. Принцип управляемых сервисов позволяет оставить себе только задачи стратегического управления, мониторинга производительности и масштабирования и не заниматься обслуживанием, обновлением и репликацией.
Ваши данные будут находиться в безопасной и технически современной инфраструктуре Yandex Cloud с гарантированной отказоустойчивостью и надёжностью.