Есть ли технология/способ удаленной обработки http запросов?
Вехи:
- Точка приема HTTP запросов - публичная точка с высокой нагруженностью. запросы без авторизации.
- Сервер/ы, выполняющие валидацию, обработку запросов и выдающие ответ.
Дано:
Имеются различные, не связанные между собой клиенты (организации).
Имеются пользователи, которые могут выполнять запросы без авторизации не имея данных авторизации
Имеется посредник, желающий организовать билинг и возможность обработки запросов пользователей серверами клиентов
Сервера за NAT и не имеют доступа из вне
URI запросов одинаковы для всех пользователей и серверов
Принадлежность запроса пользователю конкретному клиенту определяется по субдомену (например)
Пользователи не должны знать настоящих адресов серверов.
Продукт:
Посредник предлагает клиенту услугу. А давай, мы предоставим канал для обработки твоими серверами запросов пользователей. У посредника есть публичный адрес. Посредник выделяет субдомен, и пользователи обращаясь к субдомену будут попадать на сервер клиента. Посредник понимает что клиент не хочет светить серверами наружу, да и вообще выключать их иногда, или наоборот докидывать мощностей. Посредник не хранит никакие данные пользователей (только авторизацию клиента), а только транслирует запрос.
Посредник думает как реализовать это.
№1. Организовать websocket сервер, к которому подключаются клиенты, получают запрос, выполняют обработку, получают ответ и отдают ответ пользователю. nginx например с модулем lua. Но серверов посредником может быть много, с балансировщиком, а соединение от клиента к посреднику может быть только одно. Не понятно какому соединение какой запрос отдавать и как возвращать ответы. От клиента может быть много соединений и к одному серверу посрединика и к нескольким
№2 Брокер сообщений. Регулирует балансировку между серверами клиентов. Так же не понятно какой экземпляр посредника должен взять из какой очереди сообщение и какому пользователю отдать. В ответе может быть файл зип архива, все подготовленные ответы должны получаться из очереди, забивая память посредника и только после получения отдавать ответ пользоватею
№3 TCP соединение к посреднику. Тоже не понятно как балансировать, как отдавать и авторизировать серверы клиентов
№4 Модули к rabbitmq или nginx STOMP RPC - отдают в одну сторону, задача пользователям получать обработанный ответ с серверов