论坛首页 Java企业应用论坛

web支持高并发

浏览 18991 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2013-03-05  
记得有篇文章分析了各组件之间的耗时~
最终得出的结论简单操作cpu几乎都耗费在了页面展示的处理
复杂的业务系统才需要强大的数据库后台支持

大并发首先是分散了与业务操作无关的东西,如图片、样式、JS、静态页等,将这些通过CDN等去做
然后就是负载均衡~ action的展示层和业务层分离 数据库通过不同的拆分方式来部署
多子域名也可以均衡数据,就好像qq 不同的二级域名就相当于单独的一套东西,sso单点登录完成不同网站用户验证工作

最后 说了一堆废话~~ 高并发有一台服务器去做的,不过这绝对是少数
参看 oschina.net貌似就一台4核amd cpu的服务器

0 请登录后投票
   发表时间:2013-03-06  
长连接 并不是一个连接就得有一个线程。准确地说是one request per on thread
java的nio技术无阻塞IO select poll epoll等,通常一个线程就能处理多个连接。例如在windows下的select,一个线程能处理1024个连接。
tomcat根据IO模型,connector也有三种bio,nio,apr。
0 请登录后投票
   发表时间:2013-03-06  
呵呵 我没有看清LZ的问题,请忽略我上面的内容
0 请登录后投票
   发表时间:2013-03-06  


长轮询方式的长连接,hold5分钟,不是靠线程超时做到的,而是将这个超时时间放在放在poller的slector loop的超时处理。所以即便是每个连接hold5分钟,也不是一个连接一个线程
0 请登录后投票
   发表时间:2013-03-07   最后修改:2013-03-07
应该是翻译问题吧

网站需求 : 百万用户同时在线  单位是PV
服务器需求: 动态请求 / 每秒  单位是QPS
http://lxy2330.iteye.com/blog/1570312

大约 是: ((80%*100万)/(24小时*60分*60秒*40%))/1 = 231个请求/秒

对于长连接算法不太清楚
但作一个loadrunner的测试就清楚 了.
0 请登录后投票
   发表时间: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支持。


至少我公司的游戏的后台是异步的,并不是同步的,有专门线程在分发请求,避免耗时间久的请求堆在队列里而影响后面的请求。
0 请登录后投票
   发表时间:2013-03-07  
xiaoZ5919 写道


长轮询方式的长连接,hold5分钟,不是靠线程超时做到的,而是将这个超时时间放在放在poller的slector loop的超时处理。所以即便是每个连接hold5分钟,也不是一个连接一个线程

哦,这是操作系统的处理吧~  我原以为长连接就是线程需要hold住,因为不知道这5分钟内应用要做什么,什么时候做~ 所以本线程应该是被本连接持有。
0 请登录后投票
   发表时间:2013-03-07  
xiaoZ5919 写道
呵呵 我没有看清LZ的问题,请忽略我上面的内容

我说的可能也不是很清楚,因为我概念比较含糊,其实我的理解是  一个线程就必须处理一个请求,以为一点一个长连接建立的话,在长连接的一段时间内,本链接就和本线程绑定了。因为在长连接期间应用不知道什么时候用户发起请求,所以本线程就一直处于锁的状态,而唤醒的方式就是请求来~
0 请登录后投票
   发表时间:2013-03-07  
这个应该是表达不清,所说的百万并发应该是指百万在线,对于一些无状态的应用百万在线的难度并不大。

严格讲,并发应该是指1秒钟之内发生的请求,整个地球上能做到百万并发的网站,根本就没有几家。而且对于并发,有状态应用和无状态应用,操作数据库应用和不操作数据库应用,对服务器的压力根本就不在一个数量级上。脱离实际应用情景,孤单的去谈并发是没有意义的。
0 请登录后投票
   发表时间:2013-03-07  
hello.world! 写道
xiaoZ5919 写道


长轮询方式的长连接,hold5分钟,不是靠线程超时做到的,而是将这个超时时间放在放在poller的slector loop的超时处理。所以即便是每个连接hold5分钟,也不是一个连接一个线程

哦,这是操作系统的处理吧~  我原以为长连接就是线程需要hold住,因为不知道这5分钟内应用要做什么,什么时候做~ 所以本线程应该是被本连接持有。

如果用线程来hold这5分钟,性能就大大打折了。不算是操作系统层面吧
在Selector执行select操作以后,定时执行timeout处理。
1 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics