
У моего работодателя в настоящее время есть несколько экземпляров Postgres (по одному на клиента, с уникальным кодом сайта), которые физически разделены на территории клиента. У каждого клиента есть 1-4 базы данных, запущенные внутри экземпляра, причем каждая база данных содержит более 20 схем.
Мы пытаемся объединить эти базы данных в одном экземпляре Postgres, либо локально, либо с облачным провайдером (например, RDS), чтобы упростить доступ/контроль. Клиент продолжит получать доступ к базе данных, однако мы внедрим общий уровень обслуживания RESTful, где конкретная база данных будет нацелена с использованием кода сайта, добавленного как часть URL-пути каждого API. Чтобы соответствовать нашему SLA по производительности (90% менее 1 с) и снизить потребление ресурсов, мы намерены использовать пул соединений на уровне обслуживания.
Основная проблема, с которой мы сталкиваемся, заключается в том, что Postgres требует базу данных во время подключения, что означает, что нам придется иметь пул подключений на клиента, что будет неэффективно использовать много ресурсов. Поскольку мы не используем ресурсы эффективно, нам может потребоваться больше экземпляров уровня сервиса, что приведет к увеличению стоимости и сложности архитектуры. Хотя можно эффективно «разбить» клиентов на несколько экземпляров уровня сервиса, это не решает настоящую проблему, которая заключается в неэффективном использовании подключений!
Есть ли еще решение, которое я не рассматривал? Возможно, способ иметь единый пул соединений, где запросы перенаправляются в определенные базы данных? Или, возможно, динамические пулы соединений, которые могут динамически изменять размер в зависимости от нагрузки?
Спасибо
решение1
AWS RDS-проксиможет быть практичным способом снизить требования к подключению.