锁定老帖子 主题:web支持高并发
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2013-03-05
记得有篇文章分析了各组件之间的耗时~
最终得出的结论简单操作cpu几乎都耗费在了页面展示的处理 复杂的业务系统才需要强大的数据库后台支持 大并发首先是分散了与业务操作无关的东西,如图片、样式、JS、静态页等,将这些通过CDN等去做 然后就是负载均衡~ action的展示层和业务层分离 数据库通过不同的拆分方式来部署 多子域名也可以均衡数据,就好像qq 不同的二级域名就相当于单独的一套东西,sso单点登录完成不同网站用户验证工作 最后 说了一堆废话~~ 高并发有一台服务器去做的,不过这绝对是少数 参看 oschina.net貌似就一台4核amd cpu的服务器 |
|
返回顶楼 | |
发表时间:2013-03-06
长连接 并不是一个连接就得有一个线程。准确地说是one request per on thread
java的nio技术无阻塞IO select poll epoll等,通常一个线程就能处理多个连接。例如在windows下的select,一个线程能处理1024个连接。 tomcat根据IO模型,connector也有三种bio,nio,apr。 |
|
返回顶楼 | |
发表时间:2013-03-06
呵呵 我没有看清LZ的问题,请忽略我上面的内容
|
|
返回顶楼 | |
发表时间:2013-03-06
长轮询方式的长连接,hold5分钟,不是靠线程超时做到的,而是将这个超时时间放在放在poller的slector loop的超时处理。所以即便是每个连接hold5分钟,也不是一个连接一个线程 |
|
返回顶楼 | |
发表时间:2013-03-07
最后修改:2013-03-07
应该是翻译问题吧
网站需求 : 百万用户同时在线 单位是PV 服务器需求: 动态请求 / 每秒 单位是QPS http://lxy2330.iteye.com/blog/1570312 大约 是: ((80%*100万)/(24小时*60分*60秒*40%))/1 = 231个请求/秒 对于长连接算法不太清楚 但作一个loadrunner的测试就清楚 了. |
|
返回顶楼 | |
发表时间:2013-03-07
hello.world! 写道 sulong 写道 1, 并发数是个模糊的概念,不知道他们所谓的百万并发数是什么意思。是每秒百万并发,还是每分钟百万并发?用什么来衡量并发?一般网站的并发数应该指的是tcp连接的并发数。对于单台物理机器,其并发能力最高会到一个极限,就是本机最多维持的tcp连接的数量。如果要超过这个极限,就只能要多台物理机,还要有更强的交换机。如果要到达每秒百万并发tcp连接,这肯定需要很多很复杂,很高级的设备了。
2,你指的连接还是tcp网络连接吧?没有人规定一个连接就必须有且只有一个线程来对应。只是传统上习惯于用一个线程来处理一个连接,处理完后再处理另一个连接。百万并发不一定意味着百万的线程呀。如果处理每个连接只需要百万分之一的时间,那么单个线程就可以在一秒钟内处理完百万个连接,从外部看起来,就仿佛有百万个连接在同时运行,也就是一秒内并发百万连接了。 关键点就是要搞清楚,并发与并行的区别。 1.我说的并发,是指同一时间,比方说web qq,假如同时几十万人同时在线,每个长连接假如我都维护5分钟,在5分钟内我同时在线的人数假如有50W,那这时候就需要我每个线程处理一个长连接,这个连接不能断,就不可能让当前线程断了,在去处理其他事情,tomcat中多说可以配置最大支持上千的连接,那我们需要多少台服务器那? 2.我说的连接,是指http的长连接,现在我要做一个类似QQweb 的东东,每个用户都要维护一个长连接,假如我的用户数是同时在线10W,现在我用的额服务器是tomcat,配置为600,那我的差不多 10W/600的服务器数,这个还是保守估计,所以我就高不清楚,现在有些网页游戏,号称百万在线,那每个http长连接都需要一个线程处理,每台server的长连接数又是一定的,那岂不是要n多server支持。 至少我公司的游戏的后台是异步的,并不是同步的,有专门线程在分发请求,避免耗时间久的请求堆在队列里而影响后面的请求。 |
|
返回顶楼 | |
发表时间:2013-03-07
xiaoZ5919 写道 长轮询方式的长连接,hold5分钟,不是靠线程超时做到的,而是将这个超时时间放在放在poller的slector loop的超时处理。所以即便是每个连接hold5分钟,也不是一个连接一个线程 哦,这是操作系统的处理吧~ 我原以为长连接就是线程需要hold住,因为不知道这5分钟内应用要做什么,什么时候做~ 所以本线程应该是被本连接持有。 |
|
返回顶楼 | |
发表时间:2013-03-07
xiaoZ5919 写道 呵呵 我没有看清LZ的问题,请忽略我上面的内容
我说的可能也不是很清楚,因为我概念比较含糊,其实我的理解是 一个线程就必须处理一个请求,以为一点一个长连接建立的话,在长连接的一段时间内,本链接就和本线程绑定了。因为在长连接期间应用不知道什么时候用户发起请求,所以本线程就一直处于锁的状态,而唤醒的方式就是请求来~ |
|
返回顶楼 | |
发表时间:2013-03-07
这个应该是表达不清,所说的百万并发应该是指百万在线,对于一些无状态的应用百万在线的难度并不大。
严格讲,并发应该是指1秒钟之内发生的请求,整个地球上能做到百万并发的网站,根本就没有几家。而且对于并发,有状态应用和无状态应用,操作数据库应用和不操作数据库应用,对服务器的压力根本就不在一个数量级上。脱离实际应用情景,孤单的去谈并发是没有意义的。 |
|
返回顶楼 | |
发表时间:2013-03-07
hello.world! 写道 xiaoZ5919 写道 长轮询方式的长连接,hold5分钟,不是靠线程超时做到的,而是将这个超时时间放在放在poller的slector loop的超时处理。所以即便是每个连接hold5分钟,也不是一个连接一个线程 哦,这是操作系统的处理吧~ 我原以为长连接就是线程需要hold住,因为不知道这5分钟内应用要做什么,什么时候做~ 所以本线程应该是被本连接持有。 如果用线程来hold这5分钟,性能就大大打折了。不算是操作系统层面吧 在Selector执行select操作以后,定时执行timeout处理。 |
|
返回顶楼 | |