本文是《淘宝网的技术发展史》系列连载文的第二篇,在告别个人网站时代后,淘宝网的技术发展迎来了由Oracle开启的第二个时代。
文/淘宝技术大学培训专家 子柳

MySQL撑不住了

淘宝网作为个人网站发展的时间其实并不长,由于它太引人注目了,马云在2003年7月就宣布了这个是阿里巴巴旗下的网站,随后在市场上展开了很成功的运作。最著名的就是利用中小网站来做广告,突围eBay在门户网站上对淘宝的广告封锁。到了2003年底, 靠MySQL已经无法支撑迅速上涨的流量和交易量,技术的替代方案随之诞生,即把MySQL换成Oracle。换Oracle的原因除了它容量大、稳定、安全、性能高之外,还有人才方面的原因。

在2003年的时候,阿里巴巴已经有一支很强大的DBA团队了,前期不仅有冯春培、汪海(七公)这样的人物,后期还有冯大辉、陈吉平(花名拖雷)。有如此强大的技术后盾,把MySQL换成Oracle是顺理成章的事情。

调优Oracle

更换数据库不是只换个库就可以的,访问方式、SQL语法都要跟着变,最重要的一点是,Oracle并发访问能力之所以如此强大,有一个关键性的设计——连接池。但对于PHP语言来说它是放在Apache上的,每一个请求都会对数据库产生一个连接,它没有连接池这种功能(Java语言有servlet容器,可以存放连接池)。

那如何是好呢?这帮人打探到eBay在PHP下面用了一个连接池的工具,是BEA卖给他们的。我们知道BEA的东西都很贵,我们买不起,于是多隆在网上寻寻觅觅,找到一个开源的连接池代理服务SQL Relay,这个东西能够提供连接池的功能,多隆对它进行了一些功能改进之后就拿来用了。这样系统的架构就变成了如上图所示的样子。

数据一开始是放在本地的,DBA们对Oracle做调优的工作,也对SQL进行调优。后来数据量变大了,本地存储不行了,买了NAS(Network Attached Storage,网络附属存储),NetApp的NAS存储作为数据库的存储设备,加上Oracle RAC(Real Application Clusters,实时应用集群)来实现负载均衡。

七公说这实际上是走了一段弯路,NAS的NFS(Network File System)协议传输的延迟很严重,但那时侯不懂。后来采购了Dell和EMC合作的SAN低端存储,性能一下子提升了十几倍,这才比较稳定了。再后来数据量更大了,存储的节点一拆二、二拆四,RAC又出问题了。这才踏上了购买小型机的道路。在那段不稳定的时间里,七公曾经在机房住了5天5夜。

替换完数据库,时间到了2004年春天,数据的连接放在SQL Relay之后就“噩梦”不断,这个代理服务经常会死锁,如同之前的MySQL死锁一样。虽然多隆做了很多修改,但当时那个版本内部处理的逻辑不对,问题很多,唯一解决的办法就是“重启”它的服务。这在白天还好,连接上机房的服务器,把进程杀掉,然后开启就可以了,但是最痛苦的是它在晚上也要死掉,于是工程师们不得不24小时开着手机,一旦收到“SQL Relay进程挂起”的短信,就从梦中醒来,打开电脑,连上机房,重启服务。后来干脆每天睡觉之前先重启一下。做这事最多的据说是三丰,他现在是淘宝网的总裁。

SQL Relay的问题搞得三丰他们很难睡个囫囵觉,那一年开半年会的时候,公司特地给三丰颁了一个奖项,对他表示深切的安慰。

支付宝诞生

微博上有人说“好的架构是进化来的,不是设计来的”。的确如此,其实还可以再加上一句“好的功能也是进化来的,不是设计来的”。在架构的进化过程中,业务的进化也非常迅猛。最早的时候,买家打钱给卖家都是通过银行转账汇款,有些骗子收了钱却不发货,这是一个很严重的问题。然后这伙人研究了PayPal的支付方式,发现也不能解决问题。后来这几个聪明的脑袋又想到了“担保交易”这种第三方托管资金的办法。

于是在2003年10月,淘宝网上线了一个功能,叫做“安全交易”,卖家选择支持这种功能的话,买家会把钱交给淘宝网,等他收到货之后,淘宝网再把钱给卖家。这就是现在的支付宝。2011年支付宝公布的当年交易笔数已是PayPal的两倍。

当时开发跟银行网关对接功能的是多隆。那时,多数银行的网站已经支持在线支付了,但多隆说,它们的网关五花八门,用什么技术的都有,必须一家一家去接。而且他们不保证用户付钱了就一定扣款成功,不保证扣款成功了就一定通知淘宝,不保证通知淘宝了就一定能通知到,不保证通知到了就不重复通知。这害苦了苗人凤,他必须每天手工核对账单,对不齐的话就一定是有人的钱找不到地方了,少一分钱都睡不着觉。另外他为了测试这些功能,去杭州所有的银行都办理了一张银行卡。一堆银行卡摆在桌子上,不知道的人还以为这个家伙一定很有钱,其实里面都只是十块八块的。

有人说淘宝打败易趣(eBay中国)是靠免费,其实这只是原因之一。如果说和易趣过招第一招是免费的话,这让用户没有门槛就愿意来,那第二招就是“安全支付”,这让用户放心付款,不必担心被骗。第三招就是“旺旺”。其实淘宝旺旺也不是自己生出来的,是从阿里巴巴的“贸易通”复制过来的。从2004年3月开始,“叮咚、叮咚”这个经典的声音就回荡在所有淘宝买家和卖家的耳边,“亲,包邮不?”“亲,把零头去掉行不?”这亲切的砍价声造就了后来的“淘宝体”。

我猜eBay体会不到砍价的乐趣,他们一直不允许买卖双方在线聊天,收购了Skype之后也没有用到电子商务中去。旺旺在推出来没多久,就惹了一个法律方面的麻烦。有个做雪饼的厂家找上门来,说我们侵权了。他们家的雪饼很好吃,牛奶也做得不错,我们都很喜欢。然后我们就在旺旺的前面加了两个字,叫做“淘宝旺旺”。在那个野蛮生长的阶段,其实很多产品都是想到什么就做什么,例如我们还搭建过一个聊天室,但似乎淘宝网不是一个闲聊的地方,这个聊天室门可罗雀,一段时间后就关闭掉了。

http://i.wshang.com/?p=21209

淘宝网的技术发展史(二) ——Oracle替换MySQL相关推荐

  1. 淘宝网的技术发展史(一)——个人网站时代

    <天下网商·经理人>十月刊开始将连载系列文章<淘宝网的技术发展史>,为读者描述淘宝网在整个发展过程中,所有的主动和被动的技术变革的前因后果. 文/淘宝技术大学培训专家 子柳 前 ...

  2. 淘宝网的技术发展史(三)——分布式时代

    本文是<淘宝网的技术发展史>系列连载文的第三篇.在系统发展的过程中,架构师的眼光至关重要,作为程序员,把功能实现即可:但作为架构师,要考虑系统的扩展性.复用性,这种敏锐的感觉,有人说是一种 ...

  3. 淘宝网的技术发展史(三)――分布式时代

    本文是<淘宝网的技术发展史>系列连载文的第三篇.在系统发展的过程中,架构师的眼光至关重要,作为程序员,把功能实现即可:但作为架构师,要考虑系统的扩展性.复用性,这种敏锐的感觉,有人说是一种 ...

  4. 淘宝网发展史:揭开神秘组织的技术内幕

    一.引言:光棍节的狂欢 "时间到,开抢!"坐在电脑前早已等待多时的小美一看时间已到2011年11月11日零时,便迫不及待地投身于淘宝商城一年一度的大型网购促销活动--"淘 ...

  5. 从个人网站到淘宝网 仰观Java时代淘宝的技术发展

    从2003年的一个个人对个人(C2C)的商品交易网站到如今的淘宝网,其实在作为个人网站发展的时间里并不长.那么在这段时间里,淘宝究竟是如何发展的呢?在这篇文章里我们将找到淘宝网的发展历史以及所用到的技 ...

  6. 淘宝网林昊:行走在技术巅峰

    林昊领导的是淘宝网"秒杀"活动的技术支持团队.在此次"战役"之后,林昊对淘宝网的技术实力有了更清晰的认识,他更要学习国外顶尖的网站,帮助淘宝网更上一层楼. 他是 ...

  7. 猎头Fiona总结的加入淘宝网的十个理由

    IT生活 from: http://maxiaofei.blogbus.com/logs/85401832.html //实事求是的讲, 这里面的十条基本是真的.总结的还算到位, 原来加入淘宝还有这么 ...

  8. 淘宝网技术发展回顾(三):Oracle/支付宝/旺旺

    Oracle/支付宝/旺旺 淘宝网作为个人网站发展的时间其实并不长,由于它太引人注目了,马云在2003年7月就宣布了这个是阿里巴巴旗下的网站,随后在市场上展开了很成功的运作.最著名的就是利用中小网站来 ...

  9. 基于Android平台淘宝网手机客户端实战开发(共四季,涉及各类技术应用)

    本课程共分四季,学习本课程需要拥有Android方面一定的技术基础, http://www.ibeifeng.com/goods.php?id=176 本项目涉及技术点如下: 第一季:主要涉及的技术点 ...

最新文章

  1. 爬取过程中出现验证码_PCBA贴片的过程中为什么出现白点或白斑
  2. PHP 遇见 Serverless,帮你解决这些痛点
  3. Linux下的hostname命令详解
  4. 计算机科普小知识——Win7系统32位与64位的区别,该如何选择?
  5. java集合根据值排序_Java 8:对集合中的值进行排序
  6. java邮箱地址正则表达式_Java 中用正则表达式修改 Email 地址
  7. dz论坛发html乱码,发帖时出现乱码 - Discuz!-安装使用 - Discuz! 官方站 - Powered by Discuz!...
  8. python征程3.1(列表,迭代,函数,dic,set,的简单应用)
  9. 【生信进阶练习1000days】day14-GenomicDataCommons(GDC)
  10. 总结使用SnakeYAML解析与序列化YAML相关
  11. discuz仿163k_Discuz模板-仿163k地方门户系统整站源码带数据
  12. 金融银行软件测试超大型攻略,最受欢迎的金融银行大揭秘附面试题
  13. 在VR里弹空气吉他?开发者:手势优化有技巧
  14. 多个工作表数据汇总怎么做?
  15. 如何用服务器做虚拟主机,服务器如何搭建虚拟主机
  16. 电商维权,维权方法汇总【超全】
  17. 项目分享-限流框架的实现
  18. LeetCode79 Word Search
  19. JavaScript:将毫秒转换为年/月/日 小时/分钟
  20. php模拟登陆360网站 爬取360指数

热门文章

  1. Task.Factory.StartNewTResult 和 Task.RunTResult 到底有什么区别?
  2. Autofac实现有条件的DI
  3. 在 C# 中如何获取存储过程的返回值 ?
  4. 正确使用和理解C#中的闭包
  5. Dapr + .NET 实战(十-终篇)K8S运行Dapr
  6. 同学,解决下这个 Bug!
  7. C# 虚方法与抽象方法区别
  8. Asp.Net Core 5 REST API 使用 JWT 身份验证 - Step by Step(二)
  9. 使用 .NET Core 中的 EventCounters 衡量性能
  10. 结合 AOP 轻松处理事件发布处理日志