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

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

  •  
  •   noli · 44 天前 · 3315 次点击
    这是一个创建于 44 天前的主题,其中的信息可能已经有所发展或是发生改变。
    选课系统和火车购票系统有相似的特点,
    短时间内会有爆发性用户并发,每一次选课或者购票都会影响全局。

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

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

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

    #4 @chinvo

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

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

    运气也是实力的一部分
        24
    967182   43 天前
    按年级、按学科、按老师 拆分选课时间
        25
    ddzy   43 天前
    @hahaayaoyaoyao 暴躁老哥, 在线摊牌
        26
    littlewing   43 天前 via iPhone
    排队
        27
    Eugene1024   43 天前
    先预约,凭号来 ,各时段分流
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1759 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 01:22 · PVG 09:22 · LAX 18:22 · JFK 21:22
    ♥ Do have faith in what you're doing.