1

我有 1 个进程从 1 个linux服务器中的端口 1000 接收传入连接。但是,1 个进程的速度不足以处理所有传入的请求。

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

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

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


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

让我试试看。

谢谢您的帮助。

4

7 回答 7

2

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

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

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

您要查看的两个 kes 系统调用称为fork 和 exec

于 2008-09-05T05:28:09.313 回答
2

听起来您只需要将服务器与xinetd集成。

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

于 2008-09-05T06:54:36.657 回答
2

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

于 2008-09-05T07:13:01.993 回答
1

您需要多处理或多线程。您没有具体说明服务器的详细信息,因此我无法就具体操作提供建议。马特建议的 fork 和 exec 可以是一个解决方案,但实际上:我们在谈论什么样的协议/服务器?

于 2008-09-05T16:28:13.217 回答
0

我正在考虑运行多个类似于ypops的应用程序。

于 2008-09-07T06:23:48.113 回答
0

nginx 很棒,但如果你不喜欢一个全新的 web 服务器,带有 mod 代理平衡器的 apache 2.2 将做同样的工作

于 2008-09-07T07:20:34.517 回答
0

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

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

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

所以基本上你可以使用:

  • Prefork,在你打开套接字的地方,分叉指定数量的子节点,然后分担负载
  • 分叉后,您有一个主进程,它接受所有连接并分叉子进程来处理各个套接字
  • 线程 - 您可以以任何您喜欢的方式与它们共享套接字,因为文件描述符不会被克隆,它们仅可用于任何线程。
于 2008-09-21T10:25:30.340 回答