给12306.cn改善并发的7点建议

摘要: 我们作为用户,最容易对网站糟糕的体验吐槽,所有人都有权利这么做,也应该这么做,你不给他们压力,他们就当你愿意。12306的体验真心很糙。

有人说12306.cn的并发是全世界最大,比Facebook,Google还大,我们姑且相信。但这不能成为操蛋体验的借口,网站崩溃的免死金牌。

并发大并不是第一天才知道,去年春运见识过了。那时候网站刚上线不久,还可以理解。9个月过去了,再来说事只能说明铁道部解决这个问题的无能。

我们作为用户,最容易的就是对这个体验吐槽,所有人都有权利这么做,也应该这么做,你不给他们压力,他们就当你愿意。12306的体验真心很糙。

作为技术产品人员,除了吐槽,对于解决并发问题,也提一些意见。这些意见都是在对铁道数据没有很深理解的前提下瞎聊的,所以可能有纰漏。但只要他们愿意开放数据,我相信很多人愿意给他提提专业意见。

把短时间的并发分散到长时间

并不是所有的技术问题一定要技术手段去解决。12306在节假日买票有高并发,其实完全可以引导用户不要在出行前几天再去买票。在主流节假日前可以考虑允许提早30天买票,越早买折扣越多。比如T-30天可以享受9折,T-X可以享受 9+(30-X)/30折扣。鼓励大家提早买票。把短时间的并发分散到这30天去,让系统瞬时负荷峰值尽可能的下降。我很看好这一点,对价格敏感的群众还能享受实惠。

不同线路使用不同的数据库

12306并发最大的问题可能是对于票务资源的锁定。所以最简单的方法就是打散对票务资源的锁定;让不同的线路使用不同的数据库服务器。如果所有的线路只有一个中央数据库,那你怎么做都是崩溃。

繁忙线路的票务资源分块

简单而言,从上海到北京的线路共1000张票,10000个人同时抢,大家都访问一个数据库,这个数据库很容易崩溃。所以,还是要把这个数据库切分 – 很多不同的做法,多个车厢可以有自己的数据库服务器;或者动态分配部分资源到指定服务器,然后动态引导流量到该服务器;不要锁表,锁行;等等。这点,很多数据库专家可以插插嘴。

读写分开,尽可能的限制写

尤其对于读,完全可以用单独的读数据库,上面可以做memcache,local cache来显示票务信息。对于写,只有在用户选定了一个车次信息,真的决定买的时候,再去访问可写的数据库。

借用云服务

12306的特点是一到节假日,资源耗用特别高,平时要小很多。这种特点不适合自己配备所有的服务器。可以考虑租用其他的云服务器,阿里云,百度云,铁道部出马他们应该会热烈欢迎合作滴。

尽可能的把计算推到用户的浏览器端

考察一下典型的用户使用方式,把查找车次,时间的功能推到用户">

">

">/i><

能,俗使用排队,!压力,他们 害受>

<节待厢可盯着屏幕 产见〿里抜窗排队源耗 W"pos-87" h: ;"> @王 2306_7sug pper">

W"pos-87" h: ;"> 《造不是——亲历不是hetmtpo五》正热卖压压站糟糕的体ent-增 二维码图片href="/pro" title="dden" id="is_ext/javascrip-part read-se点建议 本 point 2012-09-21t">• >/span> 的 授权利这䏑

i v.t.ionail86.comeharemeharen-me?url=pper">

:void(0);21账号设置 :void(0);2 data-eharestteheigh_weibo onclick ToWb();return false;21账号设teheigh a,他仓验吐槽,e, f, u) { e.async = 1;;ript'), ToWb()Node.icf8a9url = eheodeURI2.mions.coct']=r;i[库'), r"> cf8a9 = eheodeURI(mpper"> t.qqroper cf8a9ppkey = eheodeURI(m801265171c);//腾讯获得ppkey> cf8a9pic = eheodeURI('');//例能cf8a9pic='图片url1|图片url2|图片url3....)> cf8a9af64"【.f-8" src="http://w3.tmtpost.com/ad/】就当你愿意。12306的体验真心很糙。

> 9af64eheodeURI(_tr"> cf8a9uf64'pper"> eharenv.t.qqroperopdown-me?c=ehare&a=opdow&url='+9url+'&appkey='+9appkey+'&pic='+9pic+'&a ='+9a +'&=/inde'+9t"> fopen(a9u,'ass=这700,为操680,top=0, }"> ike title="阖"站糟糕账号设Shape9 站糟糕账号设 ike-1 站糟糕< um

_popup_/los"" title="退出"><证"件om/ad/<换"箱-full wp-image-12088 alig tc colop padd id="bapl不holval="请输入"箱2 _eight= bo m- W"pos-87" h: eight=; background- ">N bor发d "> nor gray "> id.cmodifyas <更换"箱2 font-wei这: 100%; href58px;"l 站登S bor发d "> nor n"> "> as <,"l 站登Sas read-sogin"> bor发d "> nor gray "> "> id.canc">< 取消a>a,他-po验吐槽,验吐槽验吐dden" i_ent icon-合并pref="/
_merge_popup2 remopdoe-> hid v cl 最9p
< icon-合并-full wp-image-12088 alerroe_msge="text" na系统 COms-21<验吐槽,验吐槽,所有人ms-- xt bo m- colo"pos-87" h: 创业吧<”源-nav 意ize现> <,去幯两做況因进行整合假> <肨选择2306的icon-意"nofol皗 您选择哪6的icon-再6的icon-寎ass=

都合并。起用云朔1造ong> 便,去深感_7sugg-full wp-image-12088 al

-/i> bor发d n"> nor ">选择此icon--f 12" title="商 en" id="i" namede-tag-dropdchila 的功">创业吧 bor发d n"> nor ">选择此icon--f 12" title="商 en" id="i" 验吐槽na系统 CO s v_="sev colohition: 38px;"l 站S bor发d "> nor gray "> id.cmergeas <
人说1"> tajs.qqroperst ts?sId=37367733 UTF-8""/user/2339

统计pref=aent-g天pref=ae, f, uclass="post-info"> <槽cf8a9hmaf649hmafde.insertBe(ript'), () { ateElemenhm.f64"//hm.baiduroperhm.js?c2faa2e59b5c08b979ccf8a901af64a8"; a[0nsertBefos. rpatNode insertBefore(hm, sateElem})(ateertBe(ript'), (i,s,o,g,r,a,m){i['天AnalyticsObj ','> brow/a>< /desk hrropdown?refer=iv>
s.mcasosoftroperzh-comight=net-explore>/down="ar-iena