《淘宝技术这十年》从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及其所有主动和被动的技术变革的前因后果。书中有幕后故事、产品经验、架构演进、技术启蒙,也有大牛成长、业内八卦、失败案例、励志故事。
这本书是电子商务老师推荐阅读的,对程序员来说是很棒的一本书,我也推荐大家阅读。
1.双11巨大访问量背后的技术
《你刚才在淘宝上买了一件东西》
(1)访问入口的负载均衡
通过DNS解析域名,将访问分配到不同的入口,尽可能保证较快的一个。
(2)首页负载均衡生成
LVS(Linux Virtual Server)负载均衡系统生成HTML;
(3)CDN(Content Delivery Network)
访问 JS、CSS、图片等站点是离你最近的CDN节点;
(浏览器在同一个域名下并发加载的资源数量是有限的,例如IE 6和IE 7是两个,IE 8是6个,chrome各版本不 大一样,一般是4~6个。)
(4)分布式文件系统
TFS(TaoBao File System), 针对总容量达到PB级别的静态文件;
(5)搜索意图分类PV(Page View)
- 浏览型:没有明确的购物对象和意图;
“2010年10大香水排行” - 查询型:有一定的购物意图;
“适合老人用的手机” - 对比型:已经缩小了购物意图;
“诺基亚E71 E63” - 确定型:已经做了基本决定;
“诺基亚N97”
(6)商品详情分布式存储
Tair, 针对每年上百亿笔交易的商品详情快照的调用;
(7)交易记录分布式存储
TimeTunnel:淘宝实时数据传输平台, 用于日志数据实时的数据传输,后端系统进行后续的业务 逻辑和数据分析;
(8)超大规模云梯数据系统
具有数据压缩比1:120极限存储技术的数据仓库, 通过云梯和ODPS数据分析系统进行分析和挖掘。
2.淘宝网是如何诞生的?
2003年4月7日,成立了10人的创业团队,成员包括:三个开发工程师(虚竹、三丰、多隆)、一个UED工程师 (二当家)、三个运营工程师(小宝、阿珂、破天)、一个经 理(财神),以及马云和他的秘书。
时机:当时eBay和易趣在资本方面打得不可开交,要保密,趁机快速上线,抢占市场。
2003年5月10日上线,一个月的开发时间。买了一个网站系统PHPAuction,在此之上修改、本地化。
购买网站是怎么选择的---维护成本低、方便扩展和二次开发。
---轻量一点的,简单一点的。
网站架构:
初期:LAMP(Linux+Apache+MySQL+PHP)
优点:无须编译,发布快速,PHP(Hypertext Preprocessor)语言功能强大,能做从页面渲染到数据访问所有的事情,技术都是开源、免费的。
(将程序嵌入到HTML中执行效率高,编译后的代码可加密)
修改:数据类型; 增加后台管理的功能; 页面模板改得漂亮一点; 页眉和页脚加上自己的站点简介; 拆分数据库:原来是从一个数据库进行所有的读写操作,现在把它拆分成一个主库、两个从库,并且读写分离。
存储容量增加了,有了备份,使得安全性增加了,读写分离使得读写效率得以提升。
3.为什么要将mysql换成oracle
mysql默 认的存储引擎MyISAM,这种存储引擎在写数据的时候会把表锁住。
当Master同步数据到Slave的时候,会引起Slave写,这样在Slave 的读操作都要等待。
还有一点是会发生Slave上的主键冲突,经常会 导致同步停止。
当年的MySQL不比如今的MySQL,在数据的容 量和安全性方面也有很多先天的不足(和Oracle相比)。
4.更换为Oracle数据库出现了什么问题?如何解决的?
oracle的强大的性能和并发访问能力源于连接池的设计,连接池中放的是进程级的长连接 。
连接创建和断开的开销很大,而php语言访问数据库时,每一个请求都是一个连接。
如果是长连接,应用服务器增多时,连接数就多了,就会把数据库拖挂,如 果是短连接,频繁地连接后再断开,性能会非常差。
在网上找到一个开源的连接池代理服务SQL Relay,这个东西能够提供连接池的功能。
5.支付宝产生的背景是什么?
买家打钱给卖家都是通过银行转账汇款,有些骗子收 了钱却不发货,干脆逃之夭夭。为了保证支付的安全,想到了“担保交易”这种第三方托管资金的办法。
6.淘宝打败易趣的三招
免费、安全支付、淘宝旺旺。支持同城线下交易,用户操作简单,用户需求反馈快。
7.为什么要换JAVA?
第二个架构不是一个稳定的版本,SQL Relay的问题解决不了,数据库必须要用Oracle,php和oracle不搭,只能换开发语言。
Java是当时 最成熟的网站开发语言,它有比较良好的企业开发框架,被世界 上主流的大规模网站普遍采用。另外,有Java开发经验的人才也比 较多,后续维护成本会比较低。
请Sun公司的人,他们的大致方案是 给业务分模块,一个模块一个模块地渐进式替换。
8.提升系统性能的方法?
数据分库、放弃EJB、引入Spring、加入缓存、加入 CDN等工作,看起来没有章法可循,其实都是围绕着提高容量、 提高性能、节约成本来做的。
个人感悟-未完待续
最近要准备课程考试和实验,这本书还没有读完。目前有几点感悟:
- 好的架构是进化来的,而不是设计来的。固然可以借鉴其他优秀网站架构,但网站自身的情况不同,是需要结合实际、与时渐进的。
- 看清市场、看清竞争环境、看清用户需求,在机遇到来之前累积资本,眼界、人才、机遇总是一个团队成功的基本要素。
- 大牛成功后的风光也是天赋、勤奋、执着的累积,不经一番彻骨寒,怎得梅花扑鼻香,诸君共勉。