【问题标题】:Is there a Perl PSGI/Plack server available that only speaks PSGI and not also HTTP?是否有可用的 Perl PSGI/Plack 服务器只能说 PSGI 而不是 HTTP?
【发布时间】:2018-02-08 12:29:24
【问题描述】:

过去和现在的常规部署在我看来如下所示:

+------------------+     +---------+ tcp +-------+ tcp
| PSGI Application |----o| Starman |---->| nginx |<----(internet)
+------------------+     +---------+     +-------+

事实上,我在互联网和实际 Web 应用程序之间确实有两个成熟的 Web 服务器。

由于 nginx 直接内置了 uWSGI,并且 uWSGI 支持 PSGI 协议,它是 WSGI 的一个分支,我喜欢使用 PSGI 代理(只有 PSGI 没有 HTTP)而不是完整的 Web 服务器(Starman)。

是否有可用的仅 PSGI 代理解决方案?

【问题讨论】:

标签: perl nginx psgi


【解决方案1】:

PSGI 'protocol'(如 WSGI)本质上是子程序的调用约定。请求作为带有哈希作为参数的子例程调用进入应用程序。应用程序通过子例程的返回值进行响应:一个包含 HTTP 状态代码、HTTP 标头和正文的数组引用。不仅如此,但这些都是必需品。

这意味着只有当进程包含 Perl 解释器时,该进程才能实现 PSGI。为了实现这一点,该过程可以用 Perl 实现,也可以用可以加载 libperl.so 共享库的 C 语言实现。同样,只有包含 Python 解释器的进程才能实现 WSGI。

您的框图包含三个部分,但实际上 PSGI 应用程序位于 Starman 进程中。所以实际上只有两部分(尽管两部分都是多进程容器)。

你说“nginx直接内置了uWSGI”。这并不意味着 WGSI 应用程序在 Nginx 进程中运行。这意味着 WSGI 应用程序在单独的 uwsgi 进程中运行,Nginx 使用 uWSGI 协议通过 TCP 套接字与该进程通信。这本质上与 Nginx 的模型相同,其背后有 Starman,但区别在于与 Starman 的套接字连接将使用 HTTP 协议:

.----------------------.          .-----------.
|       Starman        |          |   Nginx   |
|                      |   HTTP   |           |   HTTP
| .------------------. |<---------|           |<-------(internet)
| | PSGI Application | |          |           |
| '------------------' |          |           |
'----------------------'          '-----------'

HTTP 协议确实比 uWSGI 协议有更高的开销,因此您可以通过运行一个使用 WSGI 套接字协议并可以加载 libperl.so 来实现 PSGI 接口的应用程序服务器来获得更好的性能。 uWSGI can do that:

.----------------------.          .----------.
|        uWSGI         |          |  Nginx   |
|                      |   WSGI   |          |   HTTP
| .------------------. |<---------|          |<-------(internet)
| | PSGI Application | |          |          |
| '------------------' |          |          |
'----------------------'          '----------'

【讨论】:

  • 您能否为您在上一段中描述的性能提升提供任何支持文档或基准?我很好奇。
  • 很难想象一个重要的应用程序的差异会很重要——通常瓶颈在数据库或应用程序代码中。然而,我的评论是基于我不久前读到的一篇关于对一个简单的 PSGI 应用程序进行基准测试的博客文章。可能是this one
  • 比速度更重要的是uWSGI消耗更少的内存并且更稳定。
  • 该博客文章链接将不再加载,而是 there’s a copy in the Wayback Machine。原来它是从 2012 年开始的……很久以前。话又说回来,Starman 并没有随着时间的推移发生太大变化。然而,uWSGI 有一段忙碌的时期,虽然我不认为它的性能会有明显不同,但它很可能会变得更苗条或更肥。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
相关资源
最近更新 更多