您的位置:首页 > 运维架构 > 网站架构

淘宝技术这十年

2018-04-08 09:29 344 查看
最近有幸拜读了子柳先生的《淘宝技术这十年》(13年出版),这本书从工程师的角度讲述淘宝这个超大规模互联网系统的成长历程,及所有主动和被动的技术变革的前因后果。书中即包含幕后故事、产品经验、架构演进、技术启蒙,也包含大牛成长、业内八卦、失败案例、励志故事。

我主要谈谈给我印象最深的淘宝架构演变。17年双十一阿里天猫及淘宝的成交额为1682亿,同比增长39%,试想能承受这么大交易量而不垮掉该是一个怎样的系统架构?

任何网站的发展都不是一蹴而就的,淘宝也不例外。它在发展过程中也遇到各种各样的问题和压力,正是这些问题和压力推动着技术的进步和发展,而技术的发展反过来又促进业务的提升。淘宝架构其实一直都在变,主要经历了以下几个主要阶段(截止到13年)。

**第一个阶段:**LAMP(Linux+Apache+Mysql+PHP)。LAMP是淘宝03年从美国买来的,直到现在依然很常用。它的特点是无需编译,发布快速,PHP功能强大,能做从页面渲染到数据访问的所有事情,而且所用的技术都是开源的、免费的。买回来之后并不能直接用,做了一些本地化的修改。最重要的修改是对数据库进行修改,把一个数据库进行所有读写操作拆分成一个主库,两个从库,并且读写分离。淘宝第一个版本已经包含商品发布、管理、详情、搜索、评价、购买、评价投诉、我的淘宝和安全交易(支付宝雏形)。整个系统架构如图所示。



**第二阶段:**Oracle阶段。随着业务量变大,mysql已经撑不住了(不同于现在的mysql),最简单的方案就是换成oracle,而阿里也具备了换oracle的条件(业界顶尖的DBA团队)。但是,更换数据库并不是简单换个库就行,它的访问方式和sql都得变。Oracle的性能和并发能力如此强大的原因有一个关键性的设计是——连接池。任何一个请求只需要从连接池中取得连接即可,用完释放,这样不需要频繁创建和断开连接,省去了很多不必要的开销。但是PHP语言对数据库的访问很直接,每个请求都要一个连接,这样连接数多了就会把数据库拖垮。这样利用了连接池(SQL Relay)的技术解决这个问题。整个架构变成如图所示。



**第三阶段:**java+oracle阶段。在替换完数据库后,sql relay出现了问题。代理服务经常死锁,需要经常重启服务。Sql relay的问题解决不了,而数据库必须用oracle,那只能换开发语言了,当时java是最成熟的开发语言,被主流大规模企业使用,所以Java是首选。淘宝请的sun公司的人进行改造,思路是把业务分块,一个一个模块渐进式替换。(最超前的技术是写一个自动翻译器,就如同把英文翻译成中文一样把PHP翻译成java,现在也没人做到)整个结构用到的是java MVC模式。当时struts1比较流行,但是优于本身设计的缺陷(非单例),淘宝控制层使用了Webx框架,业务层用EJB(重侵入)和Spring(后来才有),持久层ibatis。这个架构引入了搜索引擎isearch(原理是把数据库倾倒成结构化的文本文件放在硬盘上,提供web应用以约定的参数和语法来查询这些数据),整个架构变成如图所示。



**第四阶段:**IOE阶段。随着业务的增加,IOE(IBM小型机、Oracle数据库、EMC存储)阶段主要思路尽可能利用钱来解决问题。

第五阶段:稳中求变。DBRoute框架统一处理了数据的排序、合并、分页等问题。Spring替换掉EJB。加入缓存、CDN(内容分发网络)。整个架构如图所示。



第六阶段:创造技术阶段。随着淘宝业务量的猛增,当时现有技术已经不能满足需求,只能创造技术。TFS文件系统的成功研发解决了淘宝的图片存储问题。Tair的开发使淘宝的图片功能得到充分的发挥。AJAX、prototype的技术大大简化前端的交互。ESI技术解决了页面端静态页面的缓存。整个架构如图所示。



第七阶段:分布式阶段。随着业务量到达一个瓶颈,原来架构已经无法满足需求,所以对系统模块进行逐步拆分和服务化改造。其实真的没有说的这么简单,整个架构变化都是问题出现、问题解决、不断探索、不断改造、不断调整的过程。整个系统拆分成UIC(用户中心) 、Forest(森林,类目属性服务)、TC(交易中心trade center)、IC(商品中心Item center)、SC(店铺中心shop center),这些系统只提供原子级的业务逻辑(单一,也就最简单的)。它们的上一层是业务系统TM(交易业务trade manage)、IM(商品业务item manage)、SM(商品业务shop manage)。拆分后的架构如图所示。



拆分之后,好处自然不必多说,但系统的交互关系变得异常复杂,越往底层的系统调用量和访问量越大,这就需要底层系统具备超大规模的容量和高可用性。拆分之后的系统如何通信?这里需要用到2种中间件,HSF(实时调用中间件)和Notify(异步消息通知中间件),用户如何只登陆一次便可访问各个系统(session框架,单点登录系统)。另外,数据库也进行了拆分(TDDL分布式数据层)。

第八阶段:大数据+云计算+服务化。(书中并未提到)

声明:以上图片均摘自原书。想要了解更多可以拜读子柳先生全书《淘宝技术这十年》。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  淘宝架构