zaishanfeng
V2EX  ›  问与答

需要做个支持两万并发的抢购程序,只有一台服务器

  •  
  •   zaishanfeng · Nov 13, 2014 via Android · 14826 views
    This topic created in 4225 days ago, the information mentioned may be changed or developed.
    瞬间并发量能达到两万,服务器四核8g,备选语言php python,求方案
    62 replies    2014-11-13 16:08:35 +08:00
    wzxjohn
        1
    wzxjohn  
       Nov 13, 2014 via iPhone
    黄牛你好。
    zaishanfeng
        2
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @wzxjohn 怎么是黄牛?
    msg7086
        3
    msg7086  
       Nov 13, 2014
    并发两万是什么概念?

    瞬时连接数到两万的话,建议考虑基于event模型的架构,比如openresty。

    PHP的瞬时连接数能到500就不错了。
    abelyao
        4
    abelyao  
       Nov 13, 2014 via Android
    @wzxjohn 以为你要去抢别人
    zaishanfeng
        5
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @msg7086 客户需求是这样的 要求达到瞬间两万 现在考虑用hhvm 候选golang
    zjxubinbin
        6
    zjxubinbin  
       Nov 13, 2014 via Android
    Gunicorn+gevent
    coldwinds
        7
    coldwinds  
       Nov 13, 2014
    swoole
    msg7086
        8
    msg7086  
       Nov 13, 2014
    @zaishanfeng hhvm跟不上的吧。
    顺便一提,都瞬间并发2万的,最起码得来个几十万的资金支持吧。
    瞬间2万,每个请求假定是100ms,那就是每秒20万请求,每天至少能跑170亿请求。
    京东这级别的都不知道平时有没有并发2万。
    RemRain
        9
    RemRain  
       Nov 13, 2014 via iPhone
    PHP 是进程或者线程模型,一个线程同时只能处理一个请求,并发两万个线程能要了 server 的命。除非用 PHP 裸写 socket,用 pool 或者 epoll 模型才有一点希望
    goofansu
        10
    goofansu  
       Nov 13, 2014 via iPhone
    数据库才是瓶颈
    zaishanfeng
        11
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @msg7086 这个是临时需求 他们不愿意花钱买服务器
    zaishanfeng
        12
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @goofansu 这个级别server也是瓶颈
    zaishanfeng
        13
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    也许nginx + lua可以扛得住?
    zaishanfeng
        14
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    据我估计他们真实并发能有五六千就不错了,可是客户很强硬,搞死我了,哎
    abelyao
        15
    abelyao  
       Nov 13, 2014 via Android
    @zaishanfeng 了解一下实际可能的访问量,有时候客户尽会瞎扯,浪费了许多时间去滥开发
    changsha
        16
    changsha  
       Nov 13, 2014 via iPhone
    都在bb 能不能给点实际的?
    zaishanfeng
        17
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @abelyao 他们前期推广做的比较好,到时候抢购的人应该会比较多
    msg7086
        18
    msg7086  
       Nov 13, 2014
    @zaishanfeng 加钱嘛?

    nginx+lua的速度还是不错的,基本都异步而且开发应该也不算太麻烦。

    特别是如果请求和返回值不要求严格一致的话,还可以扔进redis队列里慢慢处理。

    之前写了个简单的bt tracker,每秒250请求在一台i3上基本看不出CPU占用。
    serco
        19
    serco  
       Nov 13, 2014 via iPad
    @zaishanfeng 必须event IO模型才可能,语言限定的话
    abelyao
        20
    abelyao  
       Nov 13, 2014 via Android
    @zaishanfeng 其实就是文字上的表述问题,例如 “每分钟处理20000次请求” 听起来也是 “瞬间”,但平均下来每秒只要处理大约 333 次就可以了,具体还是要看实际访问量+沟通吧,如果真的是每秒 20000 次请求,不加钱别谈了,这么大的项目还这么吝啬。
    zaishanfeng
        21
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @abelyao 就跟抢购小米一样,整点的那几秒,请求会很多,也就那几秒,他们也不好估计那几秒究竟有多少请求,他们老板不懂这些
    zaishanfeng
        22
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @serco 我比较熟悉php python 实测根本达不到,现在考虑用golang, 抢购业务不复杂,页面很简单
    blaboy
        23
    blaboy  
       Nov 13, 2014 via Android
    搞一个排队程序。哈哈哈。
    msg7086
        24
    msg7086  
       Nov 13, 2014
    @zaishanfeng 小米那请求量,营业额都能上亿了,只用一台服务器这不搞笑么……
    服务器要是挂了那可是上亿损失啊。
    zaishanfeng
        25
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @msg7086 打个比方而已 他们销售额不多,利润也很低,纯粹为了推广。我现在打算让他们加服务器,不知道加多少合适?
    zaishanfeng
        26
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    楼主没有高并发开发经验,跪求指点!
    shawngao
        27
    shawngao  
       Nov 13, 2014
    @zaishanfeng Golang我测过,没数据库的话我的Macmini能跑1W6这样子,所以一定要用redis之类的,或者逻辑不复杂的话直接加载到内存。
    wzxjohn
        28
    wzxjohn  
       Nov 13, 2014
    @zaishanfeng
    @abelyao
    原来是被抢。。。好吧。。。
    msg7086
        29
    msg7086  
       Nov 13, 2014
    @zaishanfeng 建议还是先分析一下具体的需求再定。

    首先是要确定瞬间并发2万还是每秒并发2万还是每分钟并发2万。这差别大了去了。

    然后他并发的是什么东西?静态网页还是购物车?多少东西可以缓存?什么东西是一定要hit到你app stack上的?

    最后你记得跟他们老板说一下带宽的问题。每秒2万请求,1个请求50K,已经跑满万兆网卡了,放在机房里光带宽费就要超过5位数咯。
    zaishanfeng
        30
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    如果页面加上cdn的话,本机需要多少带宽才扛得住,每个页面大概100k,cdn不知道有没有带宽限制
    msg7086
        31
    msg7086  
       Nov 13, 2014
    @zaishanfeng 100KB × 20kPV = 2GB

    如果是20kPV/min的话就是267Mbps,半个千兆就行。
    如果是20kPV/s的话就是2GB/s就是跑满2块万兆网卡,或者20多块千兆网卡。
    如果是并发20kPV的话,假定是0.1s执行速度那就是20GB/s,你需要20块万兆网卡和一层楼的带宽量,服务器数十台,外加各种交换机数十台,成本可参考12306。
    rrfeng
        32
    rrfeng  
       Nov 13, 2014
    nginx

    return 204

    2 万没问题妥妥的
    zaishanfeng
        33
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @shawngao 逻辑不复杂 就一个登录 一个预定 一个结果页 , 都可以放在内存里。

    现在就按一分钟并发两万,前十秒并发1万,瞬间并发2000算吧。

    带宽需要多少,加cdn。服务器要加几台。

    如果卡住了,什么样的应对措施比较好?是很前两天联通抢购流量包一样来个服务器忙,还是什么都不做,让他慢慢等?
    zaishanfeng
        34
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @msg7086 。。。。
    mgc
        35
    mgc  
       Nov 13, 2014   ❤️ 1
    alert('服务器繁忙,请稍后再试');
    icqdany
        36
    icqdany  
       Nov 13, 2014
    Gearman
    m_z
        37
    m_z  
       Nov 13, 2014
    不愿意买,去租阿
    zaishanfeng
        38
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @m_z 是租 我没说清楚
    loading
        39
    loading  
       Nov 13, 2014
    知道AWS吗?刚开始就是用来支撑圣诞节的!
    这临时需求,居然买永久性的服务器,有病!
    zaishanfeng
        40
    zaishanfeng  
    OP
       Nov 13, 2014 via Android
    @loading 额 怪我没说清楚 这个肯定不会永久性的,是租,阿里云或者其他什么的
    CupTools
        41
    CupTools  
       Nov 13, 2014
    @zaishanfeng 短期的话做Cloud bursting,租用公共云资源。阿里云可以

    长期的话必须自己买设备自己做
    ipconfiger
        42
    ipconfiger  
       Nov 13, 2014
    这样子的连接数能满足不?node.js+redis
    阿里云4核8G主机


    cpu 20% mem 30%
    xoxo
        43
    xoxo  
       Nov 13, 2014
    别纸上谈兵了.
    架构搞好 + 异步处理订单 + 大流量弹神兽验证码

    感觉是最好的方案了
    Comdex
        44
    Comdex  
       Nov 13, 2014
    golang想你所想
    mhycy
        45
    mhycy  
       Nov 13, 2014
    @abelyao
    某地方部门给我们一个X6550服务器上的虚拟机...8G内存.........
    结果跑下来就30m带宽(他们说百兆接入,我们内网跑的数字,可以想象母机负载有多高)
    要求做个类似于领导热线的在线留言板....
    满足峰值5W在线的需求.........(5W这个数字不用担心,因为公务员都得上线)
    ScotGu
        46
    ScotGu  
       Nov 13, 2014
    @xoxo 大流量弹神兽验证码 可以有效降低负载,同事屏蔽低端用户, 值得推广。。
    abelyao
        47
    abelyao  
       Nov 13, 2014
    @mhycy 我勒个去…
    jiongjionger
        48
    jiongjionger  
       Nov 13, 2014
    2W并发,纯php、python显然不太现实了。除非你叫钱多多。
    另外弱弱的问下,您说的是峰值2W还是平均2W?峰值2W,完全可以上验证码限制一下,还能过滤不少机器人和低端用户。平均2W,你这是比京东还屌的节奏啊
    yangff
        49
    yangff  
       Nov 13, 2014 via Android
    临时花几千块租个云用几天咯。
    RemRain
        50
    RemRain  
       Nov 13, 2014
    LZ,不用租机器可以搞定的,给你回复到这了 /t/146139
    mhycy
        51
    mhycy  
       Nov 13, 2014
    @RemRain 果然是好办法.....
    zaishanfeng
        52
    zaishanfeng  
    OP
       Nov 13, 2014
    @jiongjionger 验证码不太好吧 我还没发现哪个抢购的还有验证码 峰值预计四五千
    zaishanfeng
        53
    zaishanfeng  
    OP
       Nov 13, 2014
    @mhycy 亲 你们是怎么对付员员们的?
    mhycy
        54
    mhycy  
       Nov 13, 2014
    @zaishanfeng 作为乙方只能尽量满足对方需求....
    最近几天做新项目兼容IE6..........囧
    benjiam
        55
    benjiam  
       Nov 13, 2014
    瞬间2万吗? 还是很容易的。 可以在微博上搜我的文章 c1000k实践手册。 我那个框架 可以接收同时12万并发请求的瞬间接入, 不会有掉线。服务器是7年前的 4核心。所以应该没问题
    cxe2v
        56
    cxe2v  
       Nov 13, 2014
    @zaishanfeng 天猫的抢购都有验证码,谁说没有
    mhycy
        57
    mhycy  
       Nov 13, 2014
    @benjiam 大神请明示,微博按照关键字没找到....
    zts1993
        58
    zts1993  
       Nov 13, 2014
    @mgc 棒极了。
    zts1993
        59
    zts1993  
       Nov 13, 2014
    随机数判断啊


    不和条件直接返回false。
    23333333333333333333333
    benjiam
        60
    benjiam  
       Nov 13, 2014
    查 c1000k
    clino
        61
    clino  
       Nov 13, 2014
    @zaishanfeng 用python的话应该用gevent,twisted,tornado 才有可能吧

    @benjiam 微博上搜到个 https://github.com/xiaojiaqi/C1000kPracticeGuide ,是这个吗?
    jiongjionger
        62
    jiongjionger  
       Nov 13, 2014
    @zaishanfeng 天猫的不就有么,还有些虽然没验证码,但是抢的时候需要回答问题,和验证码一个性质,都是为了防止峰值和机器人
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3921 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 105ms · UTC 04:18 · PVG 12:18 · LAX 21:18 · JFK 00:18
    ♥ Do have faith in what you're doing.