【问题标题】:Multiple concurrent FastCGI applications on the same server同一服务器上的多个并发 FastCGI 应用程序
【发布时间】:2012-05-28 23:40:43
【问题描述】:

我在后端有一个带有 C++ API 的 RESTful Web 服务。我正在使用 FastCGI 库来促进 REST 接口。我的 C++ API 有多个可以独立使用的函数。我正在寻找一种尽可能快的方法。以下是我得到的一些想法:

  1. 拥有一个 FastCGI 应用程序来获取要执行的函数,执行该函数并返回输出。这样,API 调用会一直等待,直到一个“函数”完成,即使下一次调用是针对不同的独立函数。

  2. 拥有多个 FastCGI 应用程序,每个应用程序只能从 API 访问一个函数,每个应用程序都获取该特定应用程序的输入并单独返回该特定应用程序的输出。

通过这种方式,我可以同时调用所有不同的函数,并为我拥有的每个函数创建单独的进程队列,而不是为 FastCGI 应用程序提供一个由对不同独立函数的调用组成的通用进程队列。

虽然这看起来会更好,但我不确定是否可以实现这样的系统 - 即在同一台服务器上并行运行许多 FastCGI 应用程序。如果可能的话,有人可以告诉我如何实现吗?

【问题讨论】:

  • 与一个 FCGI 应用程序的方式相同...?我不确定你认为哪里有问题。
  • 我担心环境变量。我不确定是否会因为多个应用程序并行运行而发生冲突,每个应用程序都有自己的环境变量。
  • CGI 和 FCGI 截然不同。 FCGI 不通过环境变量进行通信。对于 CGI,每个进程都有自己的环境。
  • 另外,即使 API 中的“函数”相互独立,它们都共享公共头文件并从公共数据库中读取。我也担心这是否会成为问题。
  • 不,不是问题。共享头文件是完全无害的;如果您使用的是半生不熟的本土数据库,那么访问同一个数据库可能会出现问题;但是所有常用的数据库引擎都将具有多个连接的设施作为主要目标之一。

标签: c++ api rest fastcgi


【解决方案1】:

每个 FastCGI 应用程序都是一个单独的程序,循环运行,并以 FastCGI 规范定义的二进制协议与 Apache 通信。唯一可能的并发问题与您在运行并发 CGI 或 PHP 请求时遇到的并发问题相同,只有一个例外:由于 FastCGI 进程不会终止,因此必须仔细管理任何有限的资源。例如,如果您只有一个数据库服务器的 10 个客户端许可证,则不能有 11 个 FastCGI 进程使用该数据库,除非您管理的连接比“开始时打开,结束时关闭”方法更常用CGI 或 PHP。

【讨论】:

  • 我可以在同一台服务器上并行运行的 FCGI 应用程序的数量是否有上限?另外,每个 FCGI 进程/应用程序可以排队的请求数是否有上限?
  • 我不知道预设的限制,即你的配置中没有什么是你不能改变的;但实际上,你受到记忆力的限制。所有 FCGI 进程实际上一直在运行(尽管我认为不活动的进程会处于休眠状态,并且大部分都可以被调出)。我不知道排队。
猜你喜欢
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 1970-01-01
相关资源
最近更新 更多