淘宝下单高并发解决方案

标签: 淘宝 并发 | 发表时间:2012-04-23 18:12 | 作者:
出处:http://www.iteye.com

周末参加了 @淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享。这里我把淘宝下单高并发解决方案的个人理解分享一下。我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的。

在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍。

要优化下单,提高下单的TPS (Transaction per second),我们首先要做的是对下单的逻辑剥离,只保留核心部分,而把附加功能剔除出去。比如说下单要考虑库存量,考虑发短信,要给卖家发旺旺消息通知,要对订单做统计,要做销售额统计等等,这些功能是必要的,但是也是附加的功能,要最大程度提高下单这一步的TPS,就要先不考虑这些东西。

下单必然会涉及到买家查看订单,和卖家查看收到的订单,修改订单价格等,这是下单的核心。 在下单这个操作中有买家和卖家两个密切关联而有不同的视角。牧劳称为两个不同的维度。据牧劳的介绍下单这一步只有5张表,这5张表涵盖了这两个维度的操作。

下单是在一个数据库事务中进行的,要提高数据库的事务并发数,最有效的办法是拆分,拆分有两种,一是对库进行拆分,另一种是在同一个库中对表进行拆分。要做拆分首先就要考虑拆分依据的字段,淘宝是根据订单号做拆分的,而下单中有两个维度,买家和卖家,对订单做拆分之后,必须还是可以通过买家,卖家方便的查询着两个维度的数据。该怎么办呢?这里留个疑问,我先介绍淘宝拆分的规模,淘宝将订单表拆分到16个mysql库中,而在每个库中又将订单表横向拆分为64份,相当于将一个表拆分为1024份。拆分之后事务会分散到1024套表中,这必然会很大程序上增加并发的事务处理能力(这儿我说是必然,但是淘宝在使用这种方案之前是要经过压力测试,实际测试出这种方案的TPS之后,才会逐步采用这种方案的)。上面留了一个疑问,经过拆分之后如何保证买家卖家快速的查询其下的订单呢?最好的办法是保证买家,卖家下的订单在一张表中,如何保证呢?淘宝的做法是将买家的id取模后放到订单号中。假定一个订单号是142424594267664;这个订单号对应的订单该放在哪台服务器上的哪个表中,是根据订单的后四位7667,对1024取模之后决定的;同时7667是买家id的后四位。这样买家在查询其订单时就可以通过其id获得其订单所在库以及表,就可以方便有效的查询买家订单了。这里会带来另外一个问题,卖家查询订单时怎么办?前面我们已经提到卖家和买家被分成两个不同的维度来做表设计,卖家查询时不是直接查订单表,而是通过卖家维度的表来做查询。卖家维度的表的插入,更新是通过在订单插入时发一个消息来通知插入的。同样对于发短信、发旺旺也是通过消息来处理的,这些附加功能不参与到下单的事务中去。

即使这样做了库,表的拆分,依然会有问题。淘宝在双11时的一天的交易量就达到了5000多万,这样几个月过去后,这些拆分后的表中的数据量也会达到很大的一个量,处理速度就会下降。淘宝的做法是把三个月之前的老数据迁移到其他库中,这样就避免了数据量增大导致的系统响应时间降低的问题。但是会带来另外一个问题,用户在查询订单时需要同时查两个库,一个是历史数据表,另一个是近期数据表;这个问题无可避免,就是通过查询两次解决。

也许有的朋友会想到拆分之后对全数据做统计会有问题。如果在拆分后的表上做统计,是肯定会有问题的。怎么做呢?其实很简单,把数据迁移到别的库中去做统计。

表做拆分可以大大的提高TPS,但是也会带来一些问题,需要通过可靠的消息通知机制通知其他模块做非核心处理的事情,需要通过高效的搜索系统保证搜索数据的及时更新。

以上是我个人对淘宝下单高并发设计的理解。这是肤浅的,实际做的时候肯定还需要考虑更多的问题,比如数据库的调优,磁盘IO方式,服务器稳定性;方案的可测试性,可量化等等。

上周六的技术还分享介绍了很多其他方面的精彩内容。感谢主办方,主持人! 期待 @淘宝技术嘉年华 更多精彩的技术沙龙。



作者: yukaizhao 
声明: 本文系ITeye网站发布的原创文章,未经作者书面许可,严禁任何网站转载本文,否则必将追究法律责任!

已有 81 人发表回复,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [淘宝 并发] 推荐:

淘宝下单高并发解决方案

- - ITeye论坛最新精华讨论帖
周末参加了 @淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享. 这里我把淘宝下单高并发解决方案的个人理解分享一下. 我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的. 在session中牧劳为我们介绍了淘宝下单部分的技术方案变迁,我不介绍变迁,而只对现有系统做介绍.

淘宝“伤”城

- 品味视界 - FT中文网_英国《金融时报》(Financial Times)
秦苏为英国《金融时报》中文网撰稿. 中国互联网的野蛮生长,再次震惊了电子商务市场. 10月11日晚间,为抗议淘宝商城大幅提高技术服务年费和保证金,约7000家中小卖家通过YY网络语音等组织方式,对韩都衣舍、欧莎、七格格、优衣库等大卖家进行攻击,包括利用规则进行购物、给差评、到货付款或申请退款等. 通过集中拍下某商品,导致这些商家的大部分商品下架“被拍死”.

淘宝维权记

- loudly - 马日拉
我先是在八月上旬从淘宝卖家“偶遇燕燕”处购买了两张高凳. 货送到时仅用塑料气泡纸包装,无硬纸包装. 因为外包装并无破损,所以当时就签收了. 快递走后,拆开包装,发现其中一个凳子凳面完全裂成两半,一个凳脚连接处完全碎裂. 两张凳子平放在一起,高度有一公分以上的落差,说明:1.卖家为减小货物体积,省略了硬质外包装,虽然物品表面由于有气泡纸保护完全无损,但运送途中,一个外形不规则的货物用脚指头想想也知道会因为堆叠、搬运等等情况,造成结构性的损毁.

淘宝养活谁

- - 《商业价值》杂志
成长在互联网时代的我们恐怕无人不知淘宝了,淘宝网由于其巨大的用户群成为了中国电子商务领域的航母. 然而这艘航母在行进过程中,伴生了无数相关联行业的成长. 首先获利的当然是淘宝的600多万商家,凭借着成本优势,电子商务已经在很大程度上深入人心,过亿的日成交额让不少淘宝商家获利颇丰. 数据显示,2011年TMALL平台品牌电商进一步增加,品牌数达7万多个,相较上年的3万个,品牌数增幅超过1倍.

马云致全淘宝同仁公开信:淘宝是大家的淘宝

- Yu - cnBeta.COM
针对近期淘宝更改新规所引发的争议和群体事件,网络上悄然出现了一封马云的公开信,以下为公开信内容. 全体淘宝亲们:大家下午好!首先我代表阿里巴巴及淘宝公司所有员工向大家表示衷心的感谢. 感谢大家九年来对淘宝及我马云本人自始至终的信任和大力支持,感谢你们把淘宝培养成了中国最好最强最受欢迎的网络商业零售圈.

贝叶斯在淘宝

- Dash - 搜索技术博客-淘宝
Shared by 车东. 搜狐邮箱不幸上榜…… @qiuyingbo.           随着电子商务的快速发展,淘宝的规模也逐渐壮大,淘宝在业界的影响力也越来越大. 目前,淘宝网的日独立访问数已逾4000万,而注册的用户数现在已经达到1.63亿,中国网民也就3.3亿,在所有的中国网民中,几乎有一半都是淘宝的用户.

淘宝店主太强了

- Pan - 水木社区 Joke/笑话连篇 保留区
发信人: richal (areer_Plaza), 信区: Joke. 发信站: 水木社区 (Wed Jul 20 14:39:34 2011), 站内. 刚买的新车,选车号时没弄成自选的,. 在网上看到有那种金属字母,贴到车尾. 我想如果把姓名缩写贴上去,应该挺酷的. 结果刚下单不久,淘宝店主就打来电话.

淘宝提价很粗暴

- 宋大妈 - FT中文网_英国《金融时报》(Financial Times)
笨狸为英国《金融时报》中文网撰稿. 据报道,马云曾经说过这样一段话:“2001年的时候,我犯了一个错误,我告诉我的18位共同创业的同仁,他们只能做小组经理,而所有的副总裁都得从外面聘请. 现在十年过去了,我从外面聘请的人才都走了,而我之前曾怀疑过其能力的人都成了副总裁或董事. 现在,马云告诉淘宝上的中小商家说他们不适合继续呆在商城里,而且也不给安排什么出路,简单粗暴的一条提价协议就把曾经帮助淘宝发家的中小商家拒....

利用淘宝 API 在新浪微博上分享淘宝商品,赚取淘宝客返利

- Ken - python.cn(jobs, news)
前段时间做了个新浪应用,在新浪微博上分享淘宝商品. 淘宝api申请好几次都没能通过审核. 于是把代码共享,为学习flask的朋友多一个参考项目. 项目地址:https://github.com/laoqiu/sinaapp. 项目实例:http://tuibei.viimii.li (网站功能已无法正常使用).

拿淘宝说对内品牌管理

- htmlor - 胖胡斐:发现 美好
以后我要从事品牌方面的一些工作,所以这几天在整理自己的一些有关品牌的知识和思路. 偶然想起,何不就用我最熟悉的一个品牌,淘宝,从品牌管理的角度,来谈一点呢. 我算是伴随淘宝的品牌成长起来的人,看着它一点点发展. 从弱小,到强大,到逐渐混乱,再到现在的几乎失去管理. 品牌管理是个系统工程,要规范和控制整个品牌在企业内部和外部的各种形象,使其和企业发展和经营目标相贴合.