国内马拉松报名系统有什么好的优化方案? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
bingdong700
V2EX    程序员

国内马拉松报名系统有什么好的优化方案?

  •  
  •   bingdong700
    bingdong700 2015-11-12 16:18:04 +08:00 4337 次点击
    这是一个创建于 3622 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事件背景:这些年重视身体健康的人越来越多了,大多数人选择了跑步这个项目,国内的马拉松赛事也越来越多了。但是仍然供不应求,国内的赛事名额基本上要靠抢。 2015 年长沙马拉松报名系统承受不住压力,网站奔溃,组织方人员居然说是受到黑客攻击,黑客背了好大的黑锅。

    现行方案:现在一个普通点的赛事都有两三万名额,大概会招来十来万的访问量(多浏览器多标签同时刷新)在报名时间点蜂拥而至,预报名成功了,然后通过抽签才有机会参加。作为地方赛事的网站报名系统,毕竟没有淘宝的技术实力,也没有 12306 那样的资金实力,不崩溃的话说明没人来抢咯。港马的报名系统技术含量稍微高点,起码不崩溃,他们采用了在线排队方案,访问者能够实时查看人数,轮到你了才能进入填写资料的页面。

    我知道,如果有钱有技术,地方赛事的报名系统肯定也能做得很好。但是,摆在眼前的事实是这些网站一年才用一次(天),要考虑性价比。那么,技术上,体验上,该如何优化整改呢?

    如:港马和广马不同组别(全程、半程、迷你)是不同时间段来报名,分流缓解压力。

    第 1 条附言    2015-11-13 00:29:27 +08:00
    各地的情况都不一样,所以做个通用的系统可能性不大。解释一下:比如 2016 年的武汉马拉松,只要你参加过 2014 年的后湖半程马拉松,到时候汉马报名直通。 2015 年深圳马拉松,只要你在 2014 年深马规定时间内完赛,优先获得资格。 2016 年厦门马拉松,只有你在 2015 年厦马 4 小时内完赛,报名直通。……也有有全程改跑半程 ,也有半程的升级为全程。个性化需求很大~

    马拉松赛事通常都是由各地方政府体协和执行公司以及赞助商合办,报名系统由执行公司来操办。比如广州的马拉松执行公司就是智美,说被黑客攻击的长沙马拉松网站也是它们做的,基本上的把广州马拉松的网站源码拿过去改了一下。

    这里说说广州马拉松报名流程吧。开放报名的当天的上午十点钟,网站上才出现注册链接,很操蛋的是去年的用户名和账号无法登录,得重新注册。而去年的用户名也是去年注册的,前年的用户名也登录不上。但是好歹注册登录进去以后,根据身份证信息还是能够查询到往届的成绩。记得注册账号成功以后,再去点击报名的链接,会出现一个参赛声明, N 秒钟以后才能跳转到下一个资料录入页面。主要填写的内容有:参赛项目、参赛者姓名、出生日期、血型、身份证号码,国籍、地区、地址、手机号码,过往最好几次的马拉松参赛成绩以及证书图片,然后还有紧急联系人关系、姓名、联系电话。填写完以上资料以后,弹出确认,然后跳转到缴费页面,选择缴费渠道~

    填资料这个阶段最卡的就是 国籍地区三级联动下拉列表名称出不来,需多次刷新,很多人填写好了其他资料才发现这个出不来,只得重新刷新。这里出来了,填写其他资料才有意义。我基本上每次都是开启两三个浏览器, 10 个标签页在那里刷。
    17 条回复    2015-11-13 17:56:50 +08:00
    venster
        1
    venster  
       2015-11-12 16:27:51 +08:00   1
    阿里云租弹性服务器嘛,报名时多组一些,平时就租一台,维持网站运行
    domty
        2
    domty  
       2015-11-12 16:33:13 +08:00
    楼上说的对,找个国内提供比较好的云服务提供商,负载均衡的问题交给他们去解决,比你自己解决的成本低很多
    zingl
        3
    zingl  
       2015-11-12 18:49:32 +08:00
    问题就是商机,搞出解决方案就可以创业了,专门承接马拉松报名,网站名称:我要跑马
    virusdefender
        4
    virusdefender  
       2015-11-12 18:53:53 +08:00
    可以写个系统然后开源啊
    dphdjy
        5
    dphdjy  
       2015-11-12 19:42:39 +08:00
    10w 来说~好像不是很夸张~弹性云~~
    dphdjy
        6
    dphdjy  
       2015-11-12 20:21:53 +08:00
    收回之前的话~~好像很难~
    cevincheung
        7
    cevincheung  
       2015-11-12 20:25:03 +08:00
    报名这种东西不是直接 redis 么
    dphdjy
        8
    dphdjy  
       2015-11-12 21:06:29 +08:00
    @cevincheung 8k/s 好像不够~
    cevincheung
        9
    cevincheung  
       2015-11-12 21:07:26 +08:00
    @dphdjy 可是还有 cluster 啊
    Admstor
        10
    Admstor  
       2015-11-12 21:13:24 +08:00
    别以为什么都能弹性云...
    这网站的架构能不能弹起来还是个问题...
    metaldudu
        11
    metaldudu  
       2015-11-12 21:21:52 +08:00
    地方马拉松应该从机制上改变一下做法,同样可以预报名避免拥堵。
    ddou
        12
    ddou  
       2015-11-12 21:28:53 +08:00
    @zingl 哥们你真逗
    dphdjy
        13
    dphdjy  
       2015-11-12 21:39:44 +08:00
    刚刚去补了一大堆资料~(没多少技术上的~)

    1. 预注册

    2. 用户筛选和屏蔽

    3. 增加验证码难度剃度

    4. 乐观锁 token

    5. 延迟或提早填写流程

    (话说分布式东西好多~我继续恶补)
    master
        14
    master  
       2015-11-12 21:52:52 +08:00
    其实预报抽选的方式还是蛮合理的,是属于欧洲人还是非洲人的问题,而不是谁手快的问题。

    如果非要讲究实时性
    参照电商抢购的做法 基本信息一般都是建议预先注册 并且完成登录的
    这样报名阶段要做的事就很简单 就是选择组别、点击报名

    报名阶段可以分多个时间放名额( 举例中的不同组在不同时间其实也挺好的)

    对于报名的行为,用户提交后可以交给队列来处理(队列可以有多个来分散压力),然后告知用户稍后来获取结果。这样并发压力就在队列上,而不是数据库事务和锁上了。
    dphdjy
        15
    dphdjy  
       2015-11-13 00:44:44 +08:00
    @master 队列对内存需求较大~而且反馈慢~被怀疑暗箱操作(以前抢购就是这样)
    msg7086
        16
    msg7086  
       2015-11-13 00:54:57 +08:00
    静态资源分开存储,首先就能解决刷不开下拉框的问题。
    然后嘛,队列也好怎么也好,都问题不大了。
    开几十台机器负责存用户的资料,中间放一台机器负责报名生效,然后由外网服务器向中心服务器提交数据。
    做得好点的还可以在中心服务器上集群,序列化请求做成队列,并行化请求做成并发,等等。
    优化方法多的是。
    SmiteChow
        17
    SmiteChow  
       2015-11-13 17:56:50 +08:00
    redis 足够了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     933 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:49 PVG 06:49 LAX 15:49 JFK 18:49
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86