2008-09-05 33 views
1

我有1个进程接收来自端口1000的传入连接,其中服务器是1 linux服务器。但是,1个进程不足以处理所有传入的请求。1服务器中进程的负载平衡

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

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

任何其他解决方案,以帮助我的情况?


我看起来更像nginx,我需要运行我的应用程序的多个副本。

让我试试看。

感谢您的帮助。

回答

2

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

2

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

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

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

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

2

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

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

1

您需要多处理或多线程。您对服务器的详细信息没有具体说明,因此我无法给您提供有关如何执行的建议。正如Matt建议的fork和exec可以是一个解决方案,但是真的:我们在谈论什么类型的协议/服务器?

0

我想运行多个应用程序类似于ypops

0

nginx的是伟大的,但如果你不喜欢一个全新的Web服务器,与国防部代理平衡器Apache 2.2的会做同样的工作

0

也许你可以修改你的客户为round-robin端口(说)1000 -1009并运行10个进程的副本?

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

几个进程可能在调用fork()之前立即侦听同一个套接字,但是(如果它是TCP套接字)一旦调用accept(),结果套接字就成功地属于哪个进程接受了这个连接。

所以基本上你可以使用:

  • prefork的,在那里你打开插座,叉儿指定数量,然后进行负载分担
  • 后叉,那就是你有一个主进程,它接受所有的连接和分叉儿童处理单独的套接字
  • 线程 - 你可以用任何你喜欢的方式共享套接字,因为文件描述符没有被克隆,它们只能用于任何线程。