V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
qq286735628
V2EX  ›  问与答

弹性高并发处理

  •  
  •   qq286735628 · 2011-05-15 22:56:03 +08:00 · 6183 次点击
    这是一个创建于 4975 天前的主题,其中的信息可能已经有所发展或是发生改变。
    相信很多高校都会遇到这个问题,全校性的公选课是集中在一两天,由全体学生上网选课。

    学生为了选到好的课,往往是公选课一开选,就纷纷登录去选课。

    这样导致那一瞬间的并发访问量特别多

    大家选课有2个途径

    路径1:校园网用户是直接访问学校的选课的服务器,但由于服务器承受不了这么大的压力,返回大量错误(忘记了是返回什么错误,但是可以肯定的是服务器没有崩溃,因为有的人可以登录,并且成功选课,但有的人就打开不了网站)

    路径2:ADSL用户通过学校的6台代理服务器访问选课的服务器,做了DNS轮询,但基本上代理全部挂掉,代理服务器是squid

    有什么方法可以在不增加大量设备投入的情况下,改善这种情况呢?

    因为平时服务器基本上没什么负载,就是选课这两天压力特别大,如果能有什么弹性的机制就更好

    个人有个想法:

    如果在前端再加一层队列机制,会不会好一点,因为运行选课程序的网站是没有崩溃的,但是直接返回错误,导致大家不停的刷新网站,给网站跟大的压力;给大家来个排队,让大家知道自己前面有多少人在等待,并提示大家不要刷新页面,会不会好点?

    一个业余的人问的问题,每到选课的时候都非常头疼
    21 条回复    1970-01-01 08:00:00 +08:00
    raptium
        1
    raptium  
       2011-05-16 00:34:15 +08:00
    加队列不错 前天 battle.net 也是用排队来解决人多的问题的~~

    另外我们学校的选课系统 以前不能支持所有人一起选课 所以是给每个学生指定半小时 错开选的
    去年全套系统换了 peoplesoft 竟然就能支持所有人一起选了= =
    qq286735628
        2
    qq286735628  
    OP
       2011-05-16 00:43:37 +08:00
    @raptium 但是错开的话就有公平性的问题勒~如果保留某些位置,又会像广商那样搞得选个课要选两三次
    qq286735628
        3
    qq286735628  
    OP
       2011-05-16 00:44:37 +08:00
    很头疼,不可能为了每个学期的这么一两天,去增加服务器设备~学校3、4万人啊~
    raptium
        4
    raptium  
       2011-05-16 02:44:57 +08:00 via iPad
    开网页都困难的话 先到先得其实也不是最公平的
    我们学校之前是主修分时段实时选
    选修课给一个礼拜填志愿 之后直接公布结果
    GordianZ
        5
    GordianZ  
    MOD
       2011-05-16 03:05:04 +08:00
    不同学年分开时段选就好了。
    breakaway
        6
    breakaway  
       2011-05-16 07:28:13 +08:00
    这不就是云计算的最佳应用场景吗?此时不云,何时云……弹性,就是云的最大优势。
    manhere
        7
    manhere  
       2011-05-16 08:47:54 +08:00
    1.学校选课系统并发没有想象中那么高;
    2.对于不能处理的请求,直接丢掉就是,学生们会重试;
    3.对于已经成功的请求,排队。
    manhere
        8
    manhere  
       2011-05-16 08:54:17 +08:00
    ps:市面上早就有了楼主描述的选课系统,忘记名字了,貌似和“海洋”相关
    mywaiting
        9
    mywaiting  
       2011-05-16 09:15:04 +08:00
    学校的并发会超过两万么?前面挂着几个Nginx,后面一堆的Server怎么可能会挂呢?我莫名其妙的不理解啊。。。
    lepture
        10
    lepture  
       2011-05-16 09:58:16 +08:00
    其实还是程序的问题,再高并发能有多高!像 @mywaiting 说的, 能超过两万么?
    9hills
        11
    9hills  
       2011-05-16 10:02:30 +08:00
    学校不过几万人,如果正常选课的话负载并不大

    或许lz该看看是不是有人用脚本刷课,选课加验证码是个不错的选择
    samuel
        12
    samuel  
       2011-05-16 10:20:11 +08:00 via Android
    数据库和web服务是否分机器部署了?
    istef
        13
    istef  
       2011-05-16 10:47:41 +08:00
    好好修修选课程序就好了,学校不会有特别大的并发,一台大内存的机子 nginx 或 varnish 在前面挡着应该没问题。。。。。我们学校原来选课系统也是这个问题,而且有很多学生写脚本刷课。。。后来承包给软件学院重做了系统,就啥事儿都没有了
    而且我觉得学校也不缺钱,我们学校校内放在线电影网站的服务器都是8片IBM,看的我那个眼馋
    qq286735628
        14
    qq286735628  
    OP
       2011-05-16 13:02:36 +08:00
    @mywaiting 我忘记了返回的错误是什么了,后台的服务器没有挂,但走电信的6台代理基本挂掉,返回500错误
    qq286735628
        15
    qq286735628  
    OP
       2011-05-16 13:04:56 +08:00
    那套程序是正方现代教学管理信息系统
    应该很多高校都是这个系统
    qq286735628
        16
    qq286735628  
    OP
       2011-05-16 13:05:47 +08:00
    @raptium 为什么先到先得是最不公平?
    qq286735628
        17
    qq286735628  
    OP
       2011-05-16 13:07:18 +08:00
    @mywaiting 但是很多学校的确是有这个问题,就算能成功登录系统,也不一定能打开选课的页面,就算能打开选课的页面,也不一定能保证能成功提交
    qq286735628
        18
    qq286735628  
    OP
       2011-05-16 13:07:48 +08:00
    @9hills 用脚本刷课这个我到没有想到,有这个可能
    raptium
        19
    raptium  
       2011-05-16 13:25:47 +08:00
    @qq286735628
    我说“不是最公平”…… 不是说“最不公平”
    anyway 我的意思是 在网页很难打开的情况下 先到未必能够先得 所以是不公平的
    我选不到课可能不是因为我来得不够早 而是因为我打开网页出错了 而晚来的同学打开网页没出错
    另外 如果网页很难打开而要用到脚本刷课 那么学工科的同学就比学文科的同学更有优势了吧?
    所以其实个人以为报多个志愿然后用某个算法来随机分配可能更加公平
    =========
    其实选课除了时间上有优先权之外 还可以有其他优先权的
    比如我们学校对不同的课 会注明是 高年级同学有优先权 还是低年级同学有优先权 等等
    实时选课其实没法做到考虑这些因素(晚来的有高优先权的人会把早来的挤掉?) 所以最终结果还是把志愿记录下来统一安排的
    qq286735628
        20
    qq286735628  
    OP
       2011-05-16 13:37:37 +08:00
    @raptium 呵呵,不好意思,没注意看

    因为广东商学院就是采用的你这种志愿的方法,把选课周期拉得很长,同时,报了的同学又会提心吊胆,因为不知道最终自己能不能选上那门课~
    同时,这种做法,不见得能给服务器减少多少压力,广商照样是选课的时候很难打开选课的页面
    可能真的很多人用脚本在刷吧~
    最后还是谢谢你的解答^_^
    manhere
        21
    manhere  
       2011-05-16 14:21:21 +08:00
    @qq286735628
    这种选择系统无所谓公平
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2784 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 03:48 · PVG 11:48 · LAX 19:48 · JFK 22:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.