Есть приложение, написанное на javascript + postgresql + zfs. Это приложение продается клиентам (около 40-50 копий на данный момент). Для предоставления доступа мы поднимаем под каждого клиента один lxc контейнер, где внутри все работают как сервисы приложения и даем https ссылку. Далее клиент уже через прокси работает.
Недавно решили, что хотели бы уйти от такой схемы и сделать единую систему для всех клиентов, и запускать это все в кубере.
Как объединить 50 баз данных в одну?
Вариант 1 - одно приложение, но у каждого клиента своя БД. Тут достаточно просто - у каждого клиента своя учётная запись в приложении и/или в постгрессе, и она определяет, какая схема будет использоваться.
Вариант 2 - и приложение одно, и база одна на всех. Тут придётся перелопатить полприложения, и в каждом запросе добавить выборку только данных, имеющих отношение к текущему пользователю.
Да, вариант, когда для работы любого пользователя используется одна и та же учётная запись на сервере БД, рекомендую даже не рассматривать... чревато боком.
каждого клиента один lxc контейнер
не знаем как нам объединить 50 баз данных в одну
Один SQL-сервер на всех. Для пользователя отдельная база данных, на первых парах. Можно общие (независимые от пользователя) таблицы перенести в одну общую базу данных, по второму заходу. И оцениваете: хотите ли перерабатывать всё приложение с учётом разделения таблиц по пользователям.
Для баз данных существует еще больше способов виртуализации. Кроме docker/kuber можно создавать много баз данных в одном и том-же хосте (pod). Но подумайте будет ли вам удобно бэкапировать такой будерброд. И не будет-ли проблем с безопасностью если кто-то будет создавать в одной базе public объекты.