# Cloud PostgreSQL

## Назначение сервиса

**Cloud PostgreSQL** - это управляемый облачный сервис реляционной базы данных PostgreSQL. Он позволяет развернуть и использовать отказоустойчивый кластер базы данных без необходимости самостоятельно настраивать серверы, репликацию и механизмы отказоустойчивости.

PostgreSQL - это современная система управления базами данных, которая поддерживает стандарт SQL и используется для хранения и обработки данных приложений.

В **Cloud PostgreSQL** все основные операции по управлению кластером выполняются автоматически.  

Сервис самостоятельно:
- управляет ролями серверов базы данных (основной сервер и реплики);
- отслеживает состояние узлов;
- автоматически переключает основной сервер при сбоях.

Для обеспечения стабильной работы сервиса используется несколько инфраструктурных компонентов:
- **Patroni** - управляет кластером PostgreSQL и автоматическим переключением при отказах;
- **etcd** - хранит состояние кластера и обеспечивает согласованность работы узлов;
- **HAProxy** - обеспечивает единую точку подключения и распределяет клиентские подключения между узлами.

Подключение к базе данных выполняется через прокси-узлы сервиса. Пользователю не требуется подключаться к отдельным серверам кластера — все операции производятся через единую точку доступа.

Для управления базами данных и пользователями доступен [web-интерфейс **pgAdmin**](./pgadmin.md), позволяющий выполнять администрирование непосредственно через браузер.

## Конфигурации кластера

Сервис **Cloud PostgreSQL** поддерживает версии СУБД с 13 по 17 включительно.

Кластер предоставляется в архитектуре Primary–Standby, которая обеспечивает:

- синхронную репликацию данных;
- повышенную отказоустойчивость.

В рамках данной конфигурации создаётся кластер из виртуальных серверов, включающий:

- **Primary** (основной сервер) — обязательный узел, на котором выполняются операции записи данных;
- **Replica** (реплики) — дополнительные узлы (от 0 до 4), создаваемые по желанию пользователя.

Реплики являются полноценными участниками кластера PostgreSQL и могут использоваться для выполнения запросов, не изменяющих данные (например, SELECT).

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

## Режимы репликации

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

Если в кластере настроено несколько реплик, синхронный режим применяется только к одной из них. Остальные реплики работают в асинхронном режиме — изменения передаются на них без ожидания подтверждения.

При необходимости режим репликации может быть изменён на полностью **асинхронный**. В этом случае изменения сначала фиксируются на основном сервере, а затем передаются на реплики с задержкой.

## Доступ к серверам и оптимизация соединений

Прямой доступ к серверам кластера (например, по протоколу SSH) не предоставляется. Пользователь взаимодействует с базой данных исключительно через точки подключения, предоставленные сервисом.

На каждом узле кластера установлен пулер соединений **PgBouncer**, который может использоваться для ускорения работы приложений за счёт оптимизации подключений к базе данных.

::: warning Примечание

Использование PgBouncer не является обязательным - подключение возможно как напрямую к PostgreSQL, так и через пулер, а также одновременно обоими способами.

:::

## Возможности сервиса

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

Сервис обеспечивает:

- автоматическое управление кластером PostgreSQL;
- высокую доступность за счёт репликации и автоматического переключения primary-узла;
- единую точку подключения к базе данных через прокси;
- автоматическое переключение при отказе узлов кластера без вмешательства пользователя;
- web-доступ к управлению базами данных и пользователями через pgAdmin;
- совместимость со стандартными клиентскими инструментами PostgreSQL;
- возможность установки расширений PostgreSQL в базу данных.

## Сценарии использования сервиса

**Cloud PostgreSQL** подходит для использования в системах, где требуется надёжное хранение данных и упрощённое управление инфраструктурой базы данных.

Сервис может применяться в следующих сценариях:

- размещение production-баз данных с высокими требованиями к доступности;
- использование PostgreSQL в микросервисной архитектуре с единой точкой подключения к базе данных;
- хранение критичных данных с минимальным временем простоя при отказах инфраструктуры;
- быстрое развёртывание PostgreSQL-кластера без необходимости ручной настройки репликации и failover;
- администрирование баз данных через веб-интерфейс без прямого доступа к серверам кластера.

