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

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

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

    事件背景:这些年重视身体健康的人越来越多了,大多数人选择了跑步这个项目,国内的马拉松赛事也越来越多了。但是仍然供不应求,国内的赛事名额基本上要靠抢。 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   ·   实用小工具   ·   4798 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 05:40 · PVG 13:40 · LAX 21:40 · JFK 00:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.