@gkozyrev

Как сделать чтобы большая БД держала нагрузку?

Всем доброго времени суток!

Запускаю свою облачную платформу, код и архитектура создана с нуля.
Суть моей DBaaS: shared-сервер, пользователями создаются БД с префиксом "username_"
Предоставляемые СУБД: MySQL, PostgreSQL.

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

Заранее спасибо)
  • Вопрос задан
  • 688 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Ооо.... Вы это сейчас вообще серьёзно?

Если вы запускаете DBaaS платформу и не знаете что делать собственно с базами - то у вас не
Запускаю свою облачную платформу, код и архитектура создана с нуля.

У вас нет вообще абсолютно ещё ничего и уж архитектуры - в особенности. Кроме "идеи", над которой бьётся давно и много кто, при том имея ресурсы на собственные команды DBA.

Например: юзер пишет какой-то запрос и ему не нужно указывать на какой сервер что отправлять или откуда читать, для него это один сервер.

Значит этому юзеру достаточно ходить только на мастер.
Для сферического в вакууме приложения нет средств автоматически распределять запросы по репликам. И такое сделать вовсе невозможно без накладывания ограничений на использование. Например,
select somefunc();
Что делает эта функция? Она только читает данные и потому можно отправить на реплику или она пишет и потому должна быть на мастере? Хотите правильный ответ от контрибьютора postgresql? Это достоверно не знает даже сама база до тех пор пока не выполнит функцию.

Другой пример:
begin isolation level repeatable read;
select ...
update ...
commit;

Как максимум на запросе select вы должны уже знать можете ли вы эту транзакцию отправить на читающую реплику. Откуда бы вам это узнать заранее?
И прочие принципиально-нерешаемые вопросы.

DBaaS это не про большие базы. Как бы не хотелось маркетингу убедить в обратном. Это про небольшие или стартующие проекты, где проще переплатить сервису за относительно вменяемую настройку и сопровождение типовой конфигурации.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Используйте пуллеры соединений и балансировщики. Например, haproxy и pgbouncer для pgsql.
Изучите материалы, статьи, проведите исследование подходящих вариантов.
Вот статья с разбором примера от percona, может быть неплохой отправной точкой https://www.percona.com/blog/2018/10/02/scaling-po...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы