2015-11-25 27 views
0

会发生什么: 如果我写了数百万线程的线程池支持的服务器应用程序,它会每秒百万处理数以百万计的请求/秒:如何做负载均衡器(主服务器线程)的作品

请求

我一直在开发Web服务。 Web服务部署在具有前端负载均衡器的1000台计算机上。负载平衡器的工作是在实际处理Web请求的服务器之间分配流量。 所以我的问题是,因为在负载平衡器本身内部运行的进程本身是单线程来监听端口上的web请求,所以它如何处理每秒接受数百万次请求。负载平衡器可能正在忙于委派一项任务,那么在该时刻发生的传入请求会发生什么情况?

在我看来,所有客户端将无法处理,因为只会有一个请求处理线程来传递传入请求的线程池

这样没有多线程服务器应该永远工作。 我不知道Facebook/amazon每秒处理数百万次请求。

+1

认为通过增加线程数量导致并发性增加是错误的。你的系统核心数量有限,所以它的工作量与此成正比。 –

+0

拥有数百万个线程的线程池?有人非常困惑。 – SergeyA

+0

我的意思是支持1000台服务器的负载均衡器。 同样的类比适用于具有由工作线程池支持的单个传入请求处理程序线程的进程 – Saby

回答

0

你是对的,它不会工作。单个计算机可以处理的数量是有限的,这与它运行多少个线程无关。

亚马逊和Facebook等公司处理它的方式是让数百或数千台服务器遍布全球,然后将请求传递给各种服务器。这是一个很大的问题,但如果你想知道更多,我建议你阅读分布式计算,并回来,如果你有具体问题。

+0

我想您可能想根据缺乏知识的问题开始较小。 :)如果不是谷歌是你的朋友,我不知道推荐什么书 –

+0

请检查更新的问题 – Saby

0

随着编辑,问题变得更有意义。 每秒发送百万个请求并不困难。一个分布操作应该在几十纳秒的粘度上稍微有点并且仅仅包括将接收到的套接字推入队列。没什么大不了的。

一旦完成,平衡器已准备好接受下一个请求。

+0

是的,你有我的问题的要点。我同意你的意见,它会花费纳秒,但我真的很感兴趣知道会发生什么,如果让我们说1000个完全相同时间的请求,即1000个请求在相同纳秒时间点击服务器端口第二,只有一个请求会到达服务器线程,其余999将被丢弃?尽管如此,请参阅一些关于这些东西的阅读材料(如何实现负载平衡器) – Saby

+0

以下解释了几件事http://computer.howstuffworks.com/internet/basics/question342.htm – Saby

+0

和这个:http:///www.forbes.com/sites/reuvencohen/2013/11/26/google-shows-how-to-scale-apps-from-zero-to-one-million-requests-per-second-for-10/ – Saby

相关问题