百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

「优知学院」淘宝技术架构的前世今生(上)

mhr18 2024-09-27 11:54 19 浏览 0 评论

淘宝技术架构经历从最初的LAMP架构,到IOE架构,再到分布式架构,再到去IOE,最后到现在的云计算平台架构这一变化过程在不断解决上面的技术问题,可以说淘宝技术架构的演变就是活生生的一本架构教科书。

这次为大家带来淘宝架构从1.0到3.0的整个演变过程,淘宝架构前世今生下部将为大家带来4.0-5.0架构的演变过程以及重点解读到淘宝架构走过哪些弯路,哪些是现在公司的技术架构可以避免和参考的。

淘宝1.0架构

第一个阶段:LAMP+数据库读写分离

技术架构比较简单, 采用经典的LAMP结构,mySQL采用M-S模式,实现了读写分离。

这种架构的优点是:无需编译,发布快速,PHP功能强大,能做从页面渲染到数据访问所有的事情,而且用到的技术都是开源的,免费。

直到如今,大部分公司仍然沿用经典的LAMP,特别是适合早期创业公司在产品和商业模式的验证阶段,可以快速实现产品原型,快速部署,比较高效。

数据库端采用读写分离,缓解了数据库在大量读访问的压力。其实,在这个阶段,大部分创业公司还不用采用读写分离,大量的访问压力,应用端的压力比如:大量的图片、数据访问的可以先转移到多态服务器,或者转移到CDN以及缓存上面,这样来降低数据库端的压力,过了这个阶段,后面才来考虑读写分离会好很多。

最后部署也比较简单,这一步架构演变对技术上的知识体系基本没有要求。

这个阶段,基本都是硬件水平扩展阶段。

淘宝2.0架构

随着访问量和数据量的飞速上涨,问题很快就出来了,主要还是数据库阶段,当时对于 PHP 语言来说它是放在 Apache 上的,每一个请求都会对数据库产生一个连接,它没有连接池这种功能(Java 语言有 Servlet 容器,可以存放连接池),造成的数据库端的瓶颈就特别明显。

Oracle容量大、稳定、安全、性能高,Oracle的性能和并发访问能力之所以如此强大,有一个关键性设计——连接池,连接池中放的是长连接,任何一个请求只需要从连接池中取得一个链接即可,用完后释放,不需要频繁的创建和断开连接。

于是2003年底,把MySQL换成Oracle的同时 ,语言还是php,但是数据库连接端使用一个开源的连接池代理服务SQL Relay

调整后的2.0架构如下:

调整后的问题也比较多,特别是sqlreplay,这个个代理服务经常会死锁。

这个阶段比较明显的压力还是来自于数据库端,除了加入了代理连接池使用oracle的数据库连接池外,应用端的压力还是非常大,急需要缓存以及对大量商品库的搜索的压力解决方案。

淘宝3.0架构

2004年在淘宝业务发展的推动下,参考电信运营商、银行等的一些企业解决方案,将LAMP架构改造为Oracle+IBM小型机的数据库架构和EMC存储方式。虽然方案成本昂贵,但性能非常好。同时,随着网站流量的增加,系统显得有些不堪重负。当时最担心的问题是网站流量如果持续增加,交易量持续增加,网站的系统架构怎么设计?如何选择数据库?如何选择缓存?如何构建业务系统?……后来参考eBay的互联网设计架构,设计了一个Java的技术方案,并使用了非常多的Java开源产品。

为了解决上文提到的大量商品库的查询,采用自己开发的ISearch搜索引擎来取代在Oracle数据库中进行搜索,降低数据库服务器的压力。做法比较简单,每天晚上全量将Oracle小型机的数据dump出来,Build成ISearch的索引,当时商品量也不大,一台普通配置的服务器,基本上可以将所有的索引都放进去,没做切分,直接做了一个对等集群。

调整后的3.1最后调整架构如下为 :

这个阶段语言完全换成了java时代,以及对应的多层架构体系。

2004-2005(大概是这个时间段),引入IBM小型机、使用EMC存储。

1、Oracle数据库分库,商品信息和用户信息分库存放,由数据库路由的框架DBRoute统一处理数据的合并、排序、分页等操作;

2、控制层用Spring框架替换EJB;

3、研发基于Berkeley DB的缓存系统,把很多不太变动的只读信息放了进去;

4、加入CDN内容分发网络。

最后在3.1这个基础上在2007年左右改进为3.2这个版本:

2008年初,为了解决Oracle数据库集中式架构的瓶颈问题(连接数限制、I/O性能),将系统进行了拆分,按照用户域、商品域、交易域、店铺域等业务领域进行拆分,建立了20多个业务中心,如商品中心、用户中心、交易中心等。

所有有用户访问需求的系统,必须使用业务中心提供的远程接口来访问,不能够直接访问底层的MySQL数据库,通过HSF这种远程通信方式来调用业务中心的服务接口,业务系统之间则通过Notify消息中间件异步方式完成调用。

从2008年开始后的的服务化淘宝4.0技术架构以及后续的后续的智能化架构5.0的将是淘宝最重要的一次技术升级,4.0和5.0的演变将在淘宝技术架构的前世今生(下)详细讲解。

优知学院(youzhixueyuan.com)是IT人的升职加薪进阶站,BAT产品技术总监经验分享平台,免费提供系统的互联网产品技术最牛进阶干货。


没钱没人脉也能轻松入门,让你每年多赚10万!

相关推荐

甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入

IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...

甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云

IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...

Spring Boot 自定义数据源设置,这些坑你踩过吗?

你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...

一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)

今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...

低代码建模平台-数据挖掘平台(低代码平台的实现方式)

现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...

navicat 17.2.7连接oracle数据库提示加载oracle库失败

系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...

开源“Windows”ReactOS更新:支持全屏应用

IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...

SSL 推出采用全模拟内置混音技术的模拟调音台Oracle

英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...

47道网络工程师常见面试题,看看有没有你不会的!

你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...

汉得信息:发布EBS系统安装启用JWS的高效解决方案

e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...

36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!

前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

手把手教你在嵌入式设备中使用SQLite3

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...

JAVA语言基础(java语言基础知识)

一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...

再见 Navicat!一款开源的 Web 数据库管理工具!

大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...

取消回复欢迎 发表评论: