API-шлюз для WebSocket

Мне нужен шлюз API для моего приложения веб-сокета.

  1. Анализировать и идентифицировать необычные запросы с определенного IP
  2. Квоты и ограничение скорости
  3. Статистика
  4. Бесплатная или коммерческая
  5. Отличная производительность

Подпротоколом моего WebSocket является WAMP, поэтому я боюсь, что для этой работы не существует какого-либо продукта.

Я намерен разработать один и предположить, что он будет работать следующим образом:

  • Между моим клиентским приложением и сервером веб-сокетов установлен прокси (NGINX или HAProxy).
  • Прокси дублирует запрос / ответ на другое приложение, которое я называю monitor
  • monitor Приложение анализирует поток и контролирует прокси, чтобы ограничить / заблокировать определенный ip.
  • monitor приложение запускается параллельно, и если оно не работает, это не влияет на мое приложение и прокси.

Такой подход звучит осуществимо. Но прокси, похоже, не поддерживает повторное использование восходящего соединения с monitor,

Предположим, что между прокси-сервером и клиентом установлено 10К соединений, затем прокси-сервер также устанавливает 10К соединений как восходящий к monitor приложение? это недопустимо.

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

Есть ли прокси или продукт, удовлетворяющий этому требованию, так что мне нужно только меньше развиваться?

2 ответа

Решение

(TL;DR ... извините!)
Я работаю над проектом, делающим что-то очень похожее с G-WAN. Первоначально я писал API-сервлеты, которые работали довольно хорошо, но не в полной мере использовали возможности G-WAN. С некоторыми указателями из поддержки G-WAN я начал изучать использование обработчиков; Я портировал свои сервлеты API в подпрограмму перезаписи URL в обработчике (подавляющее большинство содержимого, возвращаемого для запроса API, является статическим / предварительно обработанным содержимым). Сейчас я работаю над процедурой из 404 обработчиков, чтобы отследить случаи, когда у нас (пока) нет предварительно отрендеренного контента, превратить их в запросы рендеринга по требованию и динамически выстроить ответ.

Со стороны клиента все выглядит абсолютно динамично. Но, выполняя перезапись URL-адресов для статических путей и позволяя G-WAN отправлять наши запросы по требованию, это уменьшает объем кода, который мы должны писать, и использует некоторые высокооптимизированные функции в G-WAN. Я упоминаю эти детали в качестве примера того, что Гил называл "разрушением формы". Изначально наш подход выглядел очень похоже на то, как мы реализуем реализацию с помощью nginx (за исключением того, что не требуется такой шлюз, как fcgi). Это было значительное улучшение, хотя, как только мы сократили требования и отбросили много предположений о том, как должны создаваться веб-сервисы.

Одно слово предостережения, если вы планируете заниматься разработкой на C++. Связь между G-WAN и внешними библиотеками - это "C", а не "C++". Они сделали это по причинам производительности и памяти (хороший выбор), но я не думал об этом полностью, когда начал писать некоторые библиотечные подпрограммы на C++, на которые я собирался ссылаться из своих сервлетов и обработчиков G-WAN в дополнение к тому, чтобы ссылки из различных приложений C++. Это не демонстратор - множество библиотек C, которые прекрасно работают с приложениями C++. Но было бы неудобно ссылаться на динамическую библиотеку классов C++ (.so) через связь "C" через G-WAN из сервлета. (Моим простым решением было перенести мой "общий" код C++ в файлы.h и просто включить их в мои обработчики и сервлеты G-WAN, а также в мои приложения на C++. Не чисто, но целесообразно.)

К вашим 5 конкретным моментам, с точки зрения G-WAN:

  1. В зависимости от вашего определения "анализировать" и "необычно" это может быть легко сделано в C/C++ в вашем обработчике протокола, или вы можете использовать внешние библиотеки. Есть несколько способов сделать это асинхронным, либо как отдельные процессы, либо, возможно, просто неблокирующий ввод / вывод, если блокировка является проблемой.

  2. Также легко управляется из обработчика.

  3. То же самое.

  4. Да.:) Зависит от уровня поддержки, которую вы хотите. Бесплатно, если вы полагаетесь исключительно на SO и другую поддержку сообщества. Мы выбрали недорогую подписку на поддержку, и ответы значительно превзошли наши ожидания.

  5. О да! Мы подтвердили это в первые несколько дней.

Да, и последнее: после того, как вы потратили час или два на написание некоторых сервлетов G-WAN, вам может быть трудно вернуться к другим механизмам веб / приложений / сервисов. С сервлетами я просто сохраняю свои изменения из редактора и нажимаю кнопку "Обновить" в окне браузера, чтобы увидеть новый результат (попробуйте это с реализацией fcgi!). У меня есть несколько экземпляров G-WAN, запущенных на моем сервере (настроенных для разных IP-адресов и номеров портов), поэтому на одном компьютере у меня есть несколько этапов разработки кода, плюс рабочий сервер. Для разработки я запускаю G-WAN в терминальном сеансе (не как демон) и могу использовать printf(...) в моих кодах сервлета и обработчика, чтобы увидеть, что происходит на сервере, а не в том, что происходит в окно моего браузера.

Для получения дополнительной информации:

Удачи!
кругозор

G-WAN protocol handler позволит вам реализовать такой прокси для мультиплексирования запросов через одно соединение (или соединение на рабочий поток для большей масштабируемости).

Это то, что G-WAN упрощает: ломая форму, создавая индивидуальные решения.

Другие вопросы по тегам