API-шлюз для WebSocket

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

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

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

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

введите описание изображения здесь

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

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

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

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

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


person Mr.Wang from Next Door    schedule 28.05.2015    source источник


Ответы (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 (...) в коде сервлета и обработчика, чтобы увидеть, что происходит на сервере и что происходит в окно моего браузера.

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

Удачи!
Кен

person Kenigmatic    schedule 29.05.2015

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

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

person Gil    schedule 28.05.2015