Вопрос архитектуры — обратный клиент и сервер

#c# #.net #angular #architecture

#c# #.net #угловой #архитектура

Вопрос:

У меня есть приложение angular, работающее против.Централизованный серверный сервер NET core По запросу от клиента angular этот серверный сервер должен извлекать информацию из сторонних баз данных (нескольких), расположенных в другой сети. Каждый клиент назначается определенной базе данных. База данных недоступна напрямую, и невозможно установить API, который будет возвращать соответствующую информацию из этой базы данных из-за сетевых ограничений. Однако возможно поместить агент рядом с каждой такой базой данных, которая сможет взаимодействовать с серверной частью (исходящее соединение).

Таким образом, одной из возможностей, очевидно, является синхронизация требуемой информации с центральной базой данных. Это проблематично по многим причинам, в основном из-за очень большого объема информации, из которой будет использоваться только небольшая часть.

Второй возможностью было бы заставить агента возвращать информацию по требованию — в режиме реального времени.

Идеальным был бы следующий сценарий:

  1. Угловой клиент вызывает конечную точку X на серверной части
  2. Серверная часть вызывает конечную точку X на «агенте» (не напрямую, а скорее заставляет агента отвечать информацией на серверную часть
  3. Информация возвращается клиенту

Я предполагаю, что серверная часть служит прокси-сервером между клиентом и агентом, но существует проблема с тем, что агент недоступен из серверной части.

Каков был бы наилучший подход для реализации чего-то подобного, без повторного изобретения колеса? Учитывая тот факт, что количество API-интерфейсов не очень мало, и ответ агента должен быть в режиме реального времени

Комментарии:

1. Превратить это в сетевую проблему, используя какую-либо форму VPN «точка-точка»?

2. Это невозможно, поскольку каждый такой агент отправляется другому клиенту и должен быть легким в установке, без необходимости настраивать какой-либо общедоступный ip или другую конфигурацию сети для работы. Должен работать как клиент в сетевом смысле, а не как сервер

3. Вам нужно выбрать протокол для извлечения данных. Если это http и json, то вам нужно будет прокси-запросы через что-то. Решите эту проблему, и вы сможете использовать любые инструменты, которые вам нравятся.

4. Да, я понимаю, что могу сделать это, используя необработанные сокеты tcp, если на то пошло, и составить свой собственный протокол для обмена данными между сервером и агентом и каким-то образом поставить запрос клиента в очередь, пока я не получу ответ от агента. Я просто ищу что-то похожее на это готовое, вместо того, чтобы писать все это с нуля