2011-02-09 161 views
1

我最近在一次采访中被问到了这个问题。这是关于网络服务器设计的开放式问题。 Herez问题的要点。提高网络服务器的性能

“队列通常成为web服务器等应用程序的瓶颈,你将对线程处理类,线程池和队列做出什么样的改变来改善瓶颈?”

我指出了像 这样的措施1.线程池管理 2.在队列中使用缓冲区和数据包。

但是面试官不太满意。我应该提及的所有设计措施是什么?显然它是一个开放式的问题,所以答案不必依赖于像Spring,J2EE等底层技术。

如果有好的服务器设计教程,请分享它。

回答

1

我无法抗拒张贴本:

http://www.engineerguy.com/videos/video-lines.htm

与队列的主要问题是,它服务员更深下来的队列。所以设计必须如此之快,以至于队列永不填满,或者必须考虑队列填充。另见bufferbloat吉姆·格蒂斯最近事情已经张贴:

http://gettys.wordpress.com/category/bufferbloat/

凡在现代路由器IP数据包的缓冲导致TCP会严重错误(和它的影响非常间接排队Web服务器内部理论以及)。

0

有一种称为套接字轮的设计模式,用于高级Web服务器中的处理队列。

+0

你能发布一个链接吗?在谷歌搜索套接字轮设计模式导致任意结果。 – Neo 2011-02-09 06:57:04

+0

这里是链接 - http://www.javaspecialists.eu/archive/Issue023.html – 2011-02-09 07:39:41

1

随机答案:

  1. 实际测量整个系统的性能,随机更改代码之前,找出问题所在。 FTW!

  2. 使用IO完成端口(Windows),“epoll”或“kevent”(Linux)。

  3. 考虑有不同的优先级队列。对于已知具有快速响应时间的查询,请将它们放入一个队列中。对于需要更长和更昂贵的响应(例如长数据库事务)的查询,将这些请求放入不同的队列中。考虑使用快速查询给予队列更多的优先权。 (请考虑:在杂货店快速结账,购买12件或更少的商品)。

0

我会增加队列和线程的数量来降低延迟。 (并且每个队列总是有一个线程)