免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2290 | 回复: 5
打印 上一主题 下一主题

[网络管理] 如何同时处理大量连接? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-20 09:28 |只看该作者 |倒序浏览
如题,昨天电话面试的时候被问到这个问题
当时有点发蒙,说了几句人家不满意,我就回答不知道了,后来静下来想想。
首先,我觉得因为一般构建服务器都是使用操作系统中提供的listen函数,这确实会带来一些限制。服务器调用listen后,当客户端有请求连接到来时(SYN),TCP接受这个数据包并维护一个未完成队列。当三次握手完成后,将此项从未完成队列移到已完成队列中,此时accept可从已完成对列中取出信息。由于队列长度有所限制,当短时间内有大量请求到来时,完全可能出现队列满服务器无法响应第一个SYN消息的情况,此时会一般会导致客户端重传SYN。我当时是从这个角度考虑的,确实没想到什么有效的方法,除非加大队列长度。

如果是从创建线程或者进程带来并法效率低下的角度考虑,可以预先创建线程池或进程池(线程池效率较高),个人感觉当时面试官期待的可能是这个答案?

记得以前有人介绍过一些大网站的做法,专门用一台机器当作前置服务器处理连接,在此服务器之后放置几台机器专门处理任务,有前置机做负载均衡。这应该是从处理任务比较消耗资源的角度来考虑吧。但是如果需要后面几台机器同步信息的话就十分复杂了。

关于这个问题大家认为该怎么解决?

查了点资料,有人说windows下用complete port,unix/linux下用异步io。不过我印象里好象记得linux没有真正实现异步io。如果有人用过的请多指教。

论坛徽章:
0
2 [报告]
发表于 2007-03-20 11:00 |只看该作者
加大同时可处理请求数?1024改成4096之类,还有就是加强CPU。。。

论坛徽章:
0
3 [报告]
发表于 2007-03-20 11:09 |只看该作者
squid 集群 squid 集群

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
4 [报告]
发表于 2007-03-20 11:18 |只看该作者
提高硬件,加大带宽,优化服务器配置,负载均衡.

论坛徽章:
0
5 [报告]
发表于 2007-03-20 18:15 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2007-03-20 18:43 |只看该作者
.

可用 T/TCP   (TCP for Transactions)

请见 《TCP/IP 详解》卷三

.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP