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

2019-09-05 18:02:40 +08:00
 noli
选课系统和火车购票系统有相似的特点,
短时间内会有爆发性用户并发,每一次选课或者购票都会影响全局。

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

譬如可以从减少用户焦虑,提高支撑能力等方面?
4622 次点击
所在节点    程序员
27 条回复
VDimos
2019-09-05 18:05:54 +08:00
加服务器
hahaayaoyaoyao
2019-09-05 18:10:53 +08:00
竞价选课啊,陪读外国学生选课啊
Coolee
2019-09-05 18:14:03 +08:00
服务器跟上了,就不会有问题,就像淘宝双十一
chinvo
2019-09-05 18:15:21 +08:00
队列、扩容、人为限制(比如分系分时段放课、分地区分时段放票)
qq316107934
2019-09-05 18:21:54 +08:00
这类属于秒杀系统,秒杀系统行业有很多成熟的方案,可以参考下。

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

#4 @chinvo

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

#12 @VensonEEE 题外话,如果买火车票要摇号,恐怕会引发更大的非技术层面问题。几百万人不确定自己是不是能回家是很可怕的事情。
chinvo
2019-09-05 20:20:51 +08:00
@noli #14 不管是轮询还是 long polling、ws,用户等待期间只是查询一个状态,开销远比大量业务 /事务压上来低多了
Greatshu
2019-09-05 23:22:48 +08:00
就学校选课而言,这些应该就够了
按照年级分开选课
临时限制多设备登录
给选课超过一定数量的人给予清空课表处理
给脚本用户加验证码
云服务器(学校私有云)临时扩容
dallaslu
2019-09-06 01:09:16 +08:00
这两个问题都是如何公平分配的问题。选课和刷票都是大家拼手速,手快有手慢无,抢到的沾沾自喜,没抢到的骂骂咧咧。另外还有一些常见办法,比如看运气——摇号分配车牌;看需求强烈程度——优先把奶给哭声大的孩子。但是高考填志愿施行多年,没人觉得高考不公平,甚至会说最公平的就是高考了。现在候补票的方式,终于有点靠近这个公平范例了。我把志愿报给你,我只要是周末北京到南京就可以,服从安排,有啥坐啥;隔一段时间给我个结果就行了。根本没必要浪费时间刷几个小时,一等座没刷到,再刷二等座也没了,又刷站票卧铺都没了。
qile1
2019-09-06 07:24:32 +08:00
解决方案就是拿钱咂,好多次看到 12306 上面有票,就是买不到,持续半小时都是那样!
sbbeta
2019-09-06 08:16:28 +08:00
@qile1 因为那是缓存
ybbswc
2019-09-06 08:18:37 +08:00
需求大于供给。没办法。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/598286

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX