1服务器中进程的负载均衡

时间:2008-09-05 05:06:23

标签: linux load-balancing

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

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

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

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


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

让我试一试。

感谢您的帮助。

7 个答案:

答案 0 :(得分:2)

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

通过这种方式,正在进行的工作不会阻止接受更多请求。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

您也可以使用nginx等网络服务器。它可以将您的应用程序与同一应用程序的多个端口进行负载平衡,并且通常用于对Ruby on Rails应用程序(单线程)进行负载均衡。缺点是您需要运行应用程序的多个副本(每个端口一个)以使此负载平衡起作用。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

也许您可以将客户端修改为循环端口(比方说)1000-1009并运行10个流程副本?

或者必须有一些内部重构的方式。

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

基本上你可以使用:

  • Prefork,在那里打开套接字,分叉指定数量的子项,然后共享负载
  • post-fork,你有一个主进程接受所有连接并让子进程处理个别套接字
  • 线程 - 您可以以任何您喜欢的方式共享套接字,因为文件描述符未被克隆,它们只对任何线程可用。