V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Actrace
V2EX  ›  程序员

超高速AJAX轮询架构设计的Demo求测试.

  •  
  •   Actrace · 2013-07-29 20:22:47 +08:00 · 6733 次点击
    这是一个创建于 4134 天前的主题,其中的信息可能已经有所发展或是发生改变。
    地址 http://try.maxfs.org/chat.php
    虽然不是服务器推,但是本人有信心承载10000左右的在线用户,求测试.
    第 1 条附言  ·  2013-07-29 22:44:10 +08:00
    就目前情况来看,CPU使用率不足1%,VPS是linode1GB.
    服务器架构是传统的Apache+Mysql,yum一键安装.
    第 2 条附言  ·  2013-07-30 10:23:18 +08:00
    准备用PHP开发一个服务器....APACHE性能有限...
    第 3 条附言  ·  2013-07-30 11:44:33 +08:00
    之所以不用其他的技术而是传统的老技术,主要还是为了降低搭建成本.直接把所有程序上传到根目录就可以用了,何乐而不为呢?当然,我承认这种方式实时性低,但是我觉得也有他适用的范围,性能问题最终的解决方案是架构.
    66 条回复    1970-01-01 08:00:00 +08:00
    andybest
        1
    andybest  
       2013-07-29 20:31:09 +08:00
    超高速。。。5秒轮询。。。
    dndx
        2
    dndx  
       2013-07-29 20:31:38 +08:00
    5秒真的算不上超高速..
    Actrace
        3
    Actrace  
    OP
       2013-07-29 20:33:55 +08:00
    合理优化了...
    Actrace
        4
    Actrace  
    OP
       2013-07-29 20:34:37 +08:00
    @dndx
    @andybest
    我表达错了,超高速响应....
    Actrace
        5
    Actrace  
    OP
       2013-07-29 20:56:26 +08:00
    某君用循环写数据,真邪恶啊.
    ipconfiger
        6
    ipconfiger  
       2013-07-29 20:58:09 +08:00
    long pulling 啊,tornado啊,秒到无延迟,毋需5秒轮训啊
    panlilu
        7
    panlilu  
       2013-07-29 21:11:00 +08:00 via iPad
    5秒。。太短了吧。。可以长连接到http超时的。。
    Actrace
        8
    Actrace  
    OP
       2013-07-29 21:14:21 +08:00   ❤️ 1
    @ipconfiger
    @panlilu
    在web上做无延迟我认为没有任何意义.架构上就不合理.
    panlilu
        9
    panlilu  
       2013-07-29 21:17:15 +08:00 via iPad
    @Actrace php本来不合适做这个,你试试tornado,node.js就知道什么是专业的了。。
    Actrace
        10
    Actrace  
    OP
       2013-07-29 21:38:33 +08:00
    @panlilu 那些成熟的架构我知道,确实很牛逼.我想做的不是去使用别人写好的东西,而是重复造轮子,看下能不能造出更牛逼的轮子.
    pubby
        11
    pubby  
       2013-07-29 21:43:11 +08:00
    "承载10000左右的在线用户"

    这个怎么理解啊,指5s内有请求的算一个在线用户吗?

    如果是10000并发访问你的server.php,那得多牛的服务器才能支撑
    Actrace
        12
    Actrace  
    OP
       2013-07-29 22:03:48 +08:00
    @pubby 10000同时轮询.
    fucker
        13
    fucker  
       2013-07-29 22:19:29 +08:00
    <script>while(1){window.alert("大家好")}</script>
    clc3123
        14
    clc3123  
       2013-07-29 22:26:29 +08:00
    我看六间房也是php轮询,够用就好~
    Actrace
        15
    Actrace  
    OP
       2013-07-29 22:29:52 +08:00
    @clc3123 是啊,够用就好,简单的HTTP请求还容易分发处理.轮流发生查询关系~
    loading
        16
    loading  
       2013-07-29 22:34:23 +08:00
    我用的1秒都没敢说神马高速。。。
    vigoss
        17
    vigoss  
       2013-07-29 23:44:40 +08:00
    @ipconfiger 能给点参考资料不?这样的模型性能上会有问题么?
    @loading 其实楼主说的是服务端高性能啦

    不过楼主你就给个地址出来我们完全不明所以啊,应该给出你的设计是哪些地方出众了. 要是来10000并发感觉从服务器到数据库都顶不住.
    Actrace
        18
    Actrace  
    OP
       2013-07-29 23:48:13 +08:00
    @vigoss 其实也只是理论而已...理论......
    zythum
        19
    zythum  
       2013-07-30 00:08:21 +08:00
    zhuyi吐槽得说:作为实时通信。5秒是不能接受的。
    yautou
        20
    yautou  
       2013-07-30 00:09:44 +08:00
    话说我想了一星期就想搭个这东西,求搭建教程~
    emric
        21
    emric  
       2013-07-30 01:24:32 +08:00
    aveline
        22
    aveline  
       2013-07-30 02:44:55 +08:00
    ab 一下試試。。。
    Actrace
        23
    Actrace  
    OP
       2013-07-30 08:54:05 +08:00
    @zythum 现在是3秒,而且这个不是实时通讯的工具.我个人认为只有UDP驱动的通讯软件才能算是真正意义上的实时通讯.
    thursday
        24
    thursday  
       2013-07-30 10:06:56 +08:00
    Narcissu5
        25
    Narcissu5  
       2013-07-30 11:02:48 +08:00
    #看下能不能造出更牛逼的轮子# 楼主好志向
    Loveyuki
        26
    Loveyuki  
       2013-07-30 11:04:41 +08:00
    看不出任何出彩的地方。
    ritksm
        27
    ritksm  
       2013-07-30 11:09:46 +08:00
    盲目的自信从何而来...
    xdyl
        28
    xdyl  
       2013-07-30 11:10:22 +08:00
    我的葡萄藤之前用了的是Comet.Erlang做后端,Ajax长连接.
    之前信心满满,觉得对于聊天室应用来说完全够用了.

    实际应用中发现Comet的效率完全无法直视.收到消息断开连接重连的策略对于速度的影响是"刚刚的".

    终于痛定思痛决定使用WebSocket了.

    So.WebSocket的效率真是Happy.有兴趣的同学可以开一个多人扫雷试试看.基本上可以达到和本地扫雷相同的速度.

    http://www.ptteng.com
    filod
        29
    filod  
       2013-07-30 13:20:32 +08:00
    咦,楼主是过来说相声的么?
    dulao5
        30
    dulao5  
       2013-07-30 13:45:38 +08:00
    apache + php , 因为php线程不安全,所以你一定用的是apache的进程模式。最大并发数等于最大子进程数。

    你已经将apache这个设置调整成10000了吗?
    然后用ab -c 10000 测试过了吗?
    Actrace
        31
    Actrace  
    OP
       2013-07-30 14:08:52 +08:00
    @dulao5 求测试....
    Reset
        32
    Reset  
       2013-07-30 14:21:00 +08:00
    <script>alert('Test')</script>
    然后就再也不更新了! :(
    Firefox22.0
    ipconfiger
        33
    ipconfiger  
       2013-07-30 16:44:30 +08:00
    @Actrace
    long pulling 的效率更高,更节省服务器资源,而且响应会更快,无论怎么看都优于喜刷刷的这种方式了。
    @vigoss
    楼上有人说了,去看tornado或者node.js 都有chatroom的demo
    Actrace
        34
    Actrace  
    OP
       2013-07-30 16:52:44 +08:00
    刷爆了.....
    @dulao5
    各位大爷我错了...
    ipconfiger
        35
    ipconfiger  
       2013-07-30 16:53:25 +08:00
    @Reset 太坏了
    Actrace
        36
    Actrace  
    OP
       2013-07-30 16:55:02 +08:00
    253负载...
    eric_zyh
        37
    eric_zyh  
       2013-07-30 16:57:58 +08:00
    看完这个贴,最大的感觉 : v2ex 确实比 csdn 文明很多...
    Actrace
        38
    Actrace  
    OP
       2013-07-30 16:59:01 +08:00
    内存是个硬伤啊...
    lyjyiran
        39
    lyjyiran  
       2013-07-30 16:59:39 +08:00
    我想起某个朋友形容拿php做long pulling的比喻, 万人在线就是上万个php进程此起彼伏的跳江南Style
    emptyhua
        40
    emptyhua  
       2013-07-30 17:03:49 +08:00
    emptyhua
        41
    emptyhua  
       2013-07-30 17:10:09 +08:00
    已经义务测试咯
    emptyhua
        42
    emptyhua  
       2013-07-30 17:11:00 +08:00
    Actrace
        43
    Actrace  
    OP
       2013-07-30 17:16:14 +08:00
    挂了...
    emptyhua
        44
    emptyhua  
       2013-07-30 17:25:21 +08:00
    @Actrace

    /opt/node.0.10.3/bin/node ./test.js
    703qps
    703failed
    1970qps
    1970failed
    1985qps
    1985failed
    1908qps
    1908failed
    2120qps
    2120failed
    2029qps
    2029failed
    2000qps
    2000failed
    1917qps
    1917failed
    2006qps
    2006failed
    1855qps
    1855failed
    2126qps
    2126failed
    2045qps
    2045failed
    2192qps
    2192failed
    1930qps
    1930failed
    1997qps
    1997failed
    1950qps
    BOYPT
        45
    BOYPT  
       2013-07-30 17:45:52 +08:00
    说了一堆表示用传统技术方便部署,然后还说有信心……哪来的信心啊(扶额
    Actrace
        46
    Actrace  
    OP
       2013-07-30 18:57:04 +08:00
    linode 1GB压力很大.但是,现在已经不怕你们的压力了~~~
    denghongcai
        47
    denghongcai  
       2013-07-30 18:58:48 +08:00
    说实在的,用webbench你都挡不住,最基本的连接数限制你都没有,看看你的apache进程有多少吧

    连轮询的架构都能把服务器拖垮
    denghongcai
        48
    denghongcai  
       2013-07-30 19:00:25 +08:00
    而且你的bad man,把判断语句写在php里还是一样的扛不住压力测试的,用iptables的recent模块吧
    yakczh
        49
    yakczh  
       2013-07-30 19:13:59 +08:00
    这是出来丢人现眼吗,快回家打怪升级去吧,牛皮都吹爆了在天上飘
    yakczh
        50
    yakczh  
       2013-07-30 19:16:03 +08:00
    php就是套模板,crud,性能垫底的脚本还玩server push,还10000...
    denghongcai
        51
    denghongcai  
       2013-07-30 19:20:58 +08:00
    @yakczh php的性能并不弱,请不要想当然
    chichan
        52
    chichan  
       2013-07-30 20:05:27 +08:00 via Android
    楼主要明白,并发和每秒请求数不是一回事,更不是五秒轮询下的在线用户数
    lhx2008
        53
    lhx2008  
       2013-07-30 20:21:05 +08:00
    apache性能不行啊,好歹你也nginx吧,wenbench apache一下就挂彩了
    Actrace
        54
    Actrace  
    OP
       2013-07-30 21:00:38 +08:00
    @lhx2008 看来真得nginx了.
    pubby
        55
    pubby  
       2013-07-30 21:21:05 +08:00
    nginx直接挂php也未必会好多少,这个架构决定了单机不可能支撑太多并发的。
    nazor
        56
    nazor  
       2013-07-30 22:17:30 +08:00
    测试了 挂了。
    Actrace
        57
    Actrace  
    OP
       2013-07-30 22:53:49 +08:00
    @pubby 其实我想说的是架构...前端是可以通过加硬件来解决负载问题的.但是架构问题不是一时半会可以修复的,大家都误会我的意思的...linode 1GB 的内存局限是摆在哪里的,我选用apache的重要原因是这个远远比nginx+php-fpm稳定,毕竟是做服务.
    @nazor 恢复.
    cst4you
        58
    cst4you  
       2013-07-31 08:38:51 +08:00 via Android
    看了下楼主其他帖子只有俩字:呵呵
    breeswish
        59
    breeswish  
       2013-07-31 08:55:55 +08:00 via Android
    用不恰当的工具做事就是一件吃力不讨好的事情,楼主的东西在某些情况下挺有用,不过作为vps狗表示无兴趣,没有架构的约束做事各种爽。

    另外5秒算超高速么,。看这个标题我还以为0.1秒 把我骗了近来
    Actrace
        60
    Actrace  
    OP
       2013-07-31 09:26:48 +08:00
    @breeswish 不好意思我标题党了.现在是3秒轮询.其实我觉得5秒更好,频繁网络请求会比较消耗电量,昨天没带电源回家,挂着聊天demo明显感觉续航少了很多.
    pubby
        61
    pubby  
       2013-07-31 10:30:11 +08:00
    @Actrace 其实我也是一直apache+php,稳定可靠。不过前面还是要放一个nginx啥的负责连接的玩意,要不然把apache进程浪费在一些低网速客户身上跟找死无异。

    回到你的聊天demo,这架构要支撑大并发实在是不经济。
    yakczh
        62
    yakczh  
       2013-07-31 10:42:35 +08:00
    @denghongcai  弱不弱不是拿嘴吹的,同样的业务代码用不同脚本跑一下就知道
    denghongcai
        63
    denghongcai  
       2013-07-31 10:45:03 +08:00
    @yakczh http://benchmarksgame.alioth.debian.org/u32/benchmark.php?test=all&lang=php&lang2=yarv&data=u32
    在生产环境中你试过么?优化过php的配置么?你自己才应该泡一下试试
    denghongcai
        64
    denghongcai  
       2013-07-31 10:48:19 +08:00
    跟你的硬件的限制没有什么关系,如果你用node.js或者python的gevent的话你的硬件是可以抗住这么多的并发的,主要是php参数的调优以及需要换用nginx的php-fpm
    breeswish
        65
    breeswish  
       2013-07-31 12:45:45 +08:00
    @Actrace 以及为啥不用comet呢。。要知道轮询可是最最古老的没有技术的技术= =。。

    整个互联网都已经从轮询到Ajax Long polling到Flash sockets到Websockets发展了好几代了。。轮询是多么古老的方法。。
    Actrace
        66
    Actrace  
    OP
       2013-07-31 13:44:53 +08:00
    Websockets,服务端怎么办?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1830 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:23 · PVG 00:23 · LAX 08:23 · JFK 11:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.