Nginx WebSocket的API网关

Nginx WebSocket的API网关,nginx,proxy,haproxy,g-wan,3scale,Nginx,Proxy,Haproxy,G Wan,3scale,我需要一个API网关为我的websocket应用程序 分析并识别来自特定IP的异常请求 配额和利率限制 统计数字 免费的还是商业的 坚实的性能 我的WebSocket的子协议是WAMP,因此恐怕没有现有的产品来完成这项工作 我打算开发一个,并假设它将以这种方式工作: 在我的客户端应用程序和websocket服务器之间安装了一个代理(NGINX或HAProxy) 代理将请求/响应复制到另一个应用程序,我称之为monitor 监视器应用程序分析流量并控制代理限制/阻止特定ip monitor应用

我需要一个API网关为我的websocket应用程序

  • 分析并识别来自特定IP的异常请求
  • 配额和利率限制
  • 统计数字
  • 免费的还是商业的
  • 坚实的性能
  • 我的WebSocket的子协议是WAMP,因此恐怕没有现有的产品来完成这项工作

    我打算开发一个,并假设它将以这种方式工作:

    • 在我的客户端应用程序和websocket服务器之间安装了一个代理(NGINX或HAProxy)
    • 代理将请求/响应复制到另一个应用程序,我称之为
      monitor
    • 监视器
      应用程序分析流量并控制代理限制/阻止特定ip
    • monitor
      应用程序会同时运行,如果它关闭,则不会影响我的应用程序和代理
    这种方法听起来是可行的。但是代理似乎不支持重用到
    监视器的上游连接

    假设从代理服务器到客户端建立了10K连接,那么代理服务器还建立了10K连接作为
    monitor
    app的上游?这是不能接受的

    我希望在代理和
    监视器
    之间只建立一个或多个连接来发送重复的请求/响应。当然,代理会为每个请求/响应通知
    monitor
    真正的源/目标


    是否有任何代理或产品满足此要求,因此我只需要开发较少的产品?

    G-WAN
    协议处理程序将允许您通过一个连接(或每个工作线程的连接以获得更大的可伸缩性)实现这样的代理以多路复用请求

    这就是G-WAN使之变得容易的地方:打破模式,创建定制解决方案。

    (TL;DR…抱歉!)
    我正在做一个与G-WAN非常相似的项目。最初,我编写了API servlet,它工作得很好,但没有充分利用G-WAN功能。有了G-WAN支持的一些指针,我开始探索处理程序的使用;我将API servlet移植到处理程序中的URL重写例程(API查询返回的绝大多数内容是静态/预呈现内容)。我现在正在开发一个404处理程序例程,以捕获我们(尚未)预先呈现内容的情况,将它们转换为按需呈现请求并动态构建响应

    从客户端来看,这一切看起来完全是动态的。但是,通过将URL重写到静态路径并允许G-WAN按需发送案例,它减少了我们必须编写的代码量,并利用了G-WAN中的一些高度优化的功能。我将这些细节作为Gil称之为“打破模式”的一个例子来提及。最初,我们的方法看起来很像使用nginx实现的方式(除了不需要像fcgi这样的网关)。这是一个相当大的改进,尽管一旦我们剥离到需求,抛弃了关于如何构建web服务的许多假设

    如果你计划在C++中做开发,那么就要小心一个字。从G-WAN到外部库的链接是“C”,而不是“C++”。他们做了这些性能和内存占用的原因(好的选择),但我没有完全想到,当我开始写一些库例程在C++中,我打算从我的G-WAN servlet和处理程序中引用,除了引用来自各种C++应用程序。它不是一个展示器-大量的“C”库在那里工作,只是罚款与C++应用程序。但是,通过一个servlet通过G-WAN引用一个“C”链接,动态引用C++类库(.so)是繁琐的。(我的简单解决方案是把我的“共享”C++代码移到.h文件中,只把它们包含到我的G-WAN处理器和servlet中,也可以把它们包含在我的C++应用程序中。 从广域网的角度来看,您的5个具体要点:

  • 根据您对“分析”和“异常”的定义,这可以在协议处理程序中的C/C++中轻松完成,也可以使用外部库。有多种方法可以使这种异步化,或者作为单独的进程,或者如果阻塞是一个问题,则可能只是非阻塞I/O

  • 也可以从处理程序轻松管理

  • 同上

  • 是。:)取决于您想要的支持级别。如果您完全依赖SO和其他社区支持,则免费。我们选择了一个便宜的支持订阅,而且响应远远超出了我们的预期

  • 哦,是的!我们在最初几天就证实了这一点

  • 哦,还有最后一件事:一旦你花了一两个小时写了一些G-WAN servlet,你可能很难回到其他web/app/service机制。使用servlet时,我只需保存编辑器中的更改,然后在浏览器窗口中点击refresh即可查看新结果(使用fcgi实现试试!)。我的服务器上运行着多个G-WAN实例(配置为不同的IP地址和端口号),因此在一台机器上,我有多个开发阶段的代码库,还有一个生产服务器。对于开发,我在终端会话中运行G-WAN(而不是作为守护进程),并且可以在servlet和处理程序代码中使用printf(…)来查看后端发生了什么,而不是浏览器窗口中发生了什么

    有关更多信息:

    • (从第34页开始)
    • 还可以查看G-WAN安装包的handlers文件夹中的示例
    祝你好运