V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
noli
V2EX  ›  程序员

选课系统,火车购票系统, 这类问题如何优雅解决

  •  
  •   noli · Sep 5, 2019 · 5228 views
    This topic created in 2439 days ago, the information mentioned may be changed or developed.
    选课系统和火车购票系统有相似的特点,
    短时间内会有爆发性用户并发,每一次选课或者购票都会影响全局。

    像这类系统有没有什么通用的经验介绍一下?

    譬如可以从减少用户焦虑,提高支撑能力等方面?
    27 replies    2019-09-06 16:08:28 +08:00
    VDimos
        1
    VDimos  
       Sep 5, 2019 via Android
    加服务器
    hahaayaoyaoyao
        2
    hahaayaoyaoyao  
       Sep 5, 2019 via Android   ❤️ 5
    竞价选课啊,陪读外国学生选课啊
    Coolee
        3
    Coolee  
       Sep 5, 2019
    服务器跟上了,就不会有问题,就像淘宝双十一
    chinvo
        4
    chinvo  
       Sep 5, 2019 via iPhone
    队列、扩容、人为限制(比如分系分时段放课、分地区分时段放票)
    qq316107934
        5
    qq316107934  
       Sep 5, 2019   ❤️ 1
    这类属于秒杀系统,秒杀系统行业有很多成熟的方案,可以参考下。

    减少用户焦虑可以从前端加入等待动画,状态显示;后端热 key 做好集群隔离,用策略打散用户请求时间。
    最后,做好压测,解决性能瓶颈,容量预估,然后看着加机器。
    moonfly
        6
    moonfly  
       Sep 5, 2019 via iPhone
    看到火车购票网站,还有没有人记得一个叫 12306NG.org 的网站?
    lshero
        7
    lshero  
       Sep 5, 2019
    好几百个教授一致同意错峰选课
    kokutou
        8
    kokutou  
       Sep 5, 2019
    所有人分成 10 份,
    放到 10 个不同的位面,
    这问题就解决了。。。
    Narcissu5
        9
    Narcissu5  
       Sep 5, 2019 via Android
    这类系统就不该做成秒杀式的,现在 12306 有个功能候补,思路终于对了
    smdbh
        10
    smdbh  
       Sep 5, 2019
    @VDimos 加服务器的本质是什么,最后结算不是还要到一起么
    JerryCha
        11
    JerryCha  
       Sep 5, 2019
    选课可以不遵循先到先得的规则,到点了关闭通道随机踢人。
    VensonEEE
        12
    VensonEEE  
       Sep 5, 2019
    最好的方案是预约摇号。
    秒杀什么的 ,都是劳神劳力。
    摇号,全凭天意,无话可说。
    gamexg
        13
    gamexg  
       Sep 5, 2019 via Android
    @smdbh 可以拆分
    按铁路线路、用户 id 扩展。
    noli
        14
    noli  
    OP
       Sep 5, 2019   ❤️ 1
    #3 @Coolee 我认为双十一抢购,和选课买火车票,不是同一种业务模型。

    #4 @chinvo

    如果使用队列的话是否意味着,用户需要等待?
    假设用户是 Web 端的,同时多人等待再通知只会造成更大的负荷问题吧?

    #12 @VensonEEE 题外话,如果买火车票要摇号,恐怕会引发更大的非技术层面问题。几百万人不确定自己是不是能回家是很可怕的事情。
    chinvo
        15
    chinvo  
       Sep 5, 2019 via iPhone
    @noli #14 不管是轮询还是 long polling、ws,用户等待期间只是查询一个状态,开销远比大量业务 /事务压上来低多了
    Greatshu
        16
    Greatshu  
       Sep 5, 2019
    就学校选课而言,这些应该就够了
    按照年级分开选课
    临时限制多设备登录
    给选课超过一定数量的人给予清空课表处理
    给脚本用户加验证码
    云服务器(学校私有云)临时扩容
    dallaslu
        17
    dallaslu  
       Sep 6, 2019
    这两个问题都是如何公平分配的问题。选课和刷票都是大家拼手速,手快有手慢无,抢到的沾沾自喜,没抢到的骂骂咧咧。另外还有一些常见办法,比如看运气——摇号分配车牌;看需求强烈程度——优先把奶给哭声大的孩子。但是高考填志愿施行多年,没人觉得高考不公平,甚至会说最公平的就是高考了。现在候补票的方式,终于有点靠近这个公平范例了。我把志愿报给你,我只要是周末北京到南京就可以,服从安排,有啥坐啥;隔一段时间给我个结果就行了。根本没必要浪费时间刷几个小时,一等座没刷到,再刷二等座也没了,又刷站票卧铺都没了。
    qile1
        18
    qile1  
       Sep 6, 2019 via Android
    解决方案就是拿钱咂,好多次看到 12306 上面有票,就是买不到,持续半小时都是那样!
    sbbeta
        19
    sbbeta  
       Sep 6, 2019 via Android
    @qile1 因为那是缓存
    ybbswc
        20
    ybbswc  
       Sep 6, 2019 via Android
    需求大于供给。没办法。
    Coolee
        21
    Coolee  
       Sep 6, 2019
    @noli 抢票,选课,和买电影票是一样的,只不过业务级别差很大吧。
    换种角度,如果能有更好分配先后买票的解决方案,或许可以解决这种问题。
    再换种角度,火车票抢票这种情况只在中国才有,需求量大了,很多问题也就不言而喻了。
    niubee1
        22
    niubee1  
       Sep 6, 2019   ❤️ 1
    火车票购票的问题不光是互联网抢购的问题,还涉及到车站线下购票,购票点购票的问题,多个渠道抢有限资源,还必须兼顾公平,比如 12315 线上购票 11 点后就停止服务了, 因为车站和购票点也都是 11 点就关门停止售票了,如果网上还能抢,对无法上网购票的人来说不公平。这个和选课什么的相比还是要复杂很多
    luojianxhlxt
        23
    luojianxhlxt  
       Sep 6, 2019
    学习小米,点击选课后先 roll 一下,小于 95 的直接下一轮

    运气也是实力的一部分
    967182
        24
    967182  
       Sep 6, 2019
    按年级、按学科、按老师 拆分选课时间
    ddzy
        25
    ddzy  
       Sep 6, 2019
    @hahaayaoyaoyao 暴躁老哥, 在线摊牌
    littlewing
        26
    littlewing  
       Sep 6, 2019 via iPhone
    排队
    Eugene1024
        27
    Eugene1024  
       Sep 6, 2019
    先预约,凭号来 ,各时段分流
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4228 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 128ms · UTC 05:09 · PVG 13:09 · LAX 22:09 · JFK 01:09
    ♥ Do have faith in what you're doing.