Я разрабатываю мультитенантную систему и рассматриваю возможность разделения на арендаторах на уровне приложений вместо базы данных.
Гипотетически, способ, которым это должно работать, заключается в том, что для входящего запроса процесс маршрутизатора имеет глобальную коллекцию клиентов, содержащую основные атрибуты для определения клиента для этого запроса, а также идентификатор виртуального сегмента.Этот идентификатор виртуального осколка дополнительно сопоставляется с действительным осколком.
Фактический осколок содержит как код приложения, так и полные данные для этого арендатора.Этими сегментами будут серверы LNMP (Linux, Nginx, MySQL / MongoDB, PHP).
Процесс маршрутизатора должен действовать как прокси.Он должен иметь возможность запускать некоторый код для определения целевого сегмента для входящего запроса на основе коллекции, хранящейся в некоторых локальных БД или файлах.Чтобы иметь возможность лучше масштабировать это, я рассматриваю возможность того, чтобы сами шарды действовали как маршрутизаторы, чтобы они могли запускать обратный прокси-сервер, который перенаправит запрос соответствующему шарду.Может быть, экземпляр nginx, работающий на шарде, также может выступать в качестве этого обратного прокси.Но как он будет выполнять логику приложения, необходимую для сопоставления запроса с соответствующим шардом.
Буду признателен за любые идеи и предложения по реализации этого маршрутизатора.
Спасибо