我有 1 个进程从 1 中的端口 1000 接收传入连接 操作系统 服务器。然而,1 个进程的速度不足以处理所有传入的请求。

我想在服务器中运行多个进程,但有 1 个端点。这样,客户端只会看到 1 个端点/进程,而不是多个。

我检查了LVS和其他负载均衡解决方案。这些解决方案似乎适合多服务器负载平衡。

还有其他解决方案可以帮助解决我的情况吗?


我正在寻找更像 nginx 的东西,我需要运行我的应用程序的多个副本。

让我试试看。

谢谢您的帮助。

有帮助吗?

解决方案

您可能还想使用像这样的网络服务器 nginx. 。它可以针对同一应用程序的多个端口对您的应用程序进行负载平衡,并且通常用于负载平衡 Ruby on Rails 应用程序(单线程)。缺点是您需要运行应用程序的多个副本(每个端口一个)才能使负载平衡发挥作用。

其他提示

这个问题对我来说有点不清楚,但我怀疑您正在寻找的答案是让一个进程从网络接受任务,然后分叉“工作进程”来实际执行工作(在将结果返回给用户)。

这样,正在完成的工作就不会阻止接受更多请求。

正如您所指出的,负载平衡一词包含多个服务器的含义 - 您想要查找的是有关如何编写 Linux 网络守护程序的信息。

您想要查看的两个 kes 系统调用称为 分叉并执行.

听起来您只需要将您的服务器与 西内特.

这是一个监听预定义端口(您通过配置控制)并分叉进程来处理该端口上的实际通信的服务器。

您需要多处理或多线程。您没有具体了解服务器的详细信息,因此我无法为您提供具体该怎么做的建议。正如 Matt 所建议的 fork 和 exec 可能是一个解决方案,但实际上:我们正在谈论什么样的协议/服务器?

我正在考虑运行多个类似于 ypops.

nginx 很棒,但如果您不喜欢全新的 Web 服务器,带有 mod 代理平衡器的 apache 2.2 也可以完成相同的工作

也许您可以将客户端修改为循环端口(例如)1000-1009 并运行该进程的 10 个副本?

或者必须有某种内部重构的方法。

多个进程可以通过在调用 fork() 之前打开同一个套接字来同时侦听该套接字,但是(如果它是 TCP 套接字)一旦调用accept(),生成的套接字就属于成功接受连接的进程。

所以本质上你可以使用:

  • Prefork,打开套接字,分叉指定数量的子级,然后共享负载
  • 分叉后,您有一个主进程,它接受所有连接并分叉子进程来处理单个套接字
  • 线程 - 您可以以任何您喜欢的方式共享套接字,因为文件描述符不会被克隆,它们仅可供任何线程使用。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top