事件背景:这些年重视身体健康的人越来越多了,大多数人选择了跑步这个项目,国内的马拉松赛事也越来越多了。但是仍然供不应求,国内的赛事名额基本上要靠抢。 2015 年长沙马拉松报名系统承受不住压力,网站奔溃,组织方人员居然说是受到黑客攻击,黑客背了好大的黑锅。
现行方案:现在一个普通点的赛事都有两三万名额,大概会招来十来万的访问量(多浏览器多标签同时刷新)在报名时间点蜂拥而至,预报名成功了,然后通过抽签才有机会参加。作为地方赛事的网站报名系统,毕竟没有淘宝的技术实力,也没有 12306 那样的资金实力,不崩溃的话说明没人来抢咯。港马的报名系统技术含量稍微高点,起码不崩溃,他们采用了在线排队方案,访问者能够实时查看人数,轮到你了才能进入填写资料的页面。
我知道,如果有钱有技术,地方赛事的报名系统肯定也能做得很好。但是,摆在眼前的事实是这些网站一年才用一次(天),要考虑性价比。那么,技术上,体验上,该如何优化整改呢?
如:港马和广马不同组别(全程、半程、迷你)是不同时间段来报名,分流缓解压力。
1
venster 2015-11-12 16:27:51 +08:00 1
阿里云租弹性服务器嘛,报名时多组一些,平时就租一台,维持网站运行
|
2
domty 2015-11-12 16:33:13 +08:00
楼上说的对,找个国内提供比较好的云服务提供商,负载均衡的问题交给他们去解决,比你自己解决的成本低很多
|
3
zingl 2015-11-12 18:49:32 +08:00
问题就是商机,搞出解决方案就可以创业了,专门承接马拉松报名,网站名称:我要跑马
|
4
virusdefender 2015-11-12 18:53:53 +08:00
可以写个系统然后开源啊
|
5
dphdjy 2015-11-12 19:42:39 +08:00
10w 来说~好像不是很夸张~弹性云~~
|
6
dphdjy 2015-11-12 20:21:53 +08:00
收回之前的话~~好像很难~
|
7
cevincheung 2015-11-12 20:25:03 +08:00
报名这种东西不是直接 redis 么
|
8
dphdjy 2015-11-12 21:06:29 +08:00
@cevincheung 8k/s 好像不够~
|
9
cevincheung 2015-11-12 21:07:26 +08:00
@dphdjy 可是还有 cluster 啊
|
10
Admstor 2015-11-12 21:13:24 +08:00
别以为什么都能弹性云...
这网站的架构能不能弹起来还是个问题... |
11
metaldudu 2015-11-12 21:21:52 +08:00
地方马拉松应该从机制上改变一下做法,同样可以预报名避免拥堵。
|
13
dphdjy 2015-11-12 21:39:44 +08:00
刚刚去补了一大堆资料~(没多少技术上的~)
1. 预注册 2. 用户筛选和屏蔽 3. 增加验证码难度剃度 4. 乐观锁 token 5. 延迟或提早填写流程 (话说分布式东西好多~我继续恶补) |
14
master 2015-11-12 21:52:52 +08:00
其实预报抽选的方式还是蛮合理的,是属于欧洲人还是非洲人的问题,而不是谁手快的问题。
如果非要讲究实时性 参照电商抢购的做法 基本信息一般都是建议预先注册 并且完成登录的 这样报名阶段要做的事就很简单 就是选择组别、点击报名 报名阶段可以分多个时间放名额( 举例中的不同组在不同时间其实也挺好的) 对于报名的行为,用户提交后可以交给队列来处理(队列可以有多个来分散压力),然后告知用户稍后来获取结果。这样并发压力就在队列上,而不是数据库事务和锁上了。 |
16
msg7086 2015-11-13 00:54:57 +08:00
静态资源分开存储,首先就能解决刷不开下拉框的问题。
然后嘛,队列也好怎么也好,都问题不大了。 开几十台机器负责存用户的资料,中间放一台机器负责报名生效,然后由外网服务器向中心服务器提交数据。 做得好点的还可以在中心服务器上集群,序列化请求做成队列,并行化请求做成并发,等等。 优化方法多的是。 |
17
SmiteChow 2015-11-13 17:56:50 +08:00
redis 足够了
|