• 请不要在回答技术问题时复制粘贴 AI 生成的内容
noli
V2EX  ›  程序员

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

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

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

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

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

    #4 @chinvo

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

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

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