Минимизируйте подключение на стороне клиента к мультитенантным базам данных Postgres.

В настоящее время у моего работодателя есть несколько экземпляров Postgres (по одному на каждого клиента, имеющих уникальный код сайта), которые физически разделены на территории клиента. У каждого клиента внутри экземпляра работает от 1 до 4 баз данных, каждая из которых содержит более 20 схем.

Мы пытаемся объединить эти базы данных в одном экземпляре Postgres, либо локально, либо с помощью облачного провайдера (например, RDS), чтобы мы могли упростить доступ и контроль. Клиент продолжит получать доступ к базе данных, однако мы представим общий уровень обслуживания RESTful, где конкретная база данных будет ориентирована на использование кода сайта, добавленного как часть URL-пути каждого API. Чтобы соблюсти наше соглашение об уровне обслуживания в отношении производительности (90% менее 1 с) и снизить использование ресурсов, мы намерены использовать пул соединений на уровне обслуживания.

Основная проблема, с которой мы сталкиваемся, заключается в том, что Postgres требует наличия базы данных во время подключения, а это означает, что нам придется иметь пул соединений для каждого клиента, который будет использовать много ресурсов неэффективно. Поскольку мы не используем ресурсы эффективно, нам может потребоваться больше экземпляров уровня обслуживания, что приведет к увеличению затрат и сложности архитектуры. Хотя можно эффективно «распределить» клиентов по нескольким экземплярам уровня обслуживания, это не решает реальную проблему — неэффективное использование соединений!

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

Спасибо

0 ответов

Другие вопросы по тегам