淘宝网数据库架构演变_4
- 格式:pdf
- 大小:756.37 KB
- 文档页数:31
SDCC中国软件开发者大会电商架构专题淘宝商品体系架构的历史和演进汇报人:范围淘宝资深开发工程师目录C O N T EN T1淘宝体系架构的演进2淘宝商品架构3元数据在淘宝商品体系架构中的应用01淘宝体系架构的演进PART ONEWHY为什么要升级架构l●架构升级的目的•节约成本•提高收益l●淘宝商品体系架构随着业务的发展不断变迁•降低开发成本•提升开发效率•支持更灵活、复杂的业务电商系统发展的四个阶段WHAT石器时代单一业务系统中世纪分布式业务系统工业革命业务平台化未来业务中台化02淘宝商品架构PART TWO商品的特点1l●商品形态•实物、服务、虚拟、零售、分销、批发、供应链l●灵活的结构•基于不同的场景、视角和形态,商品千差万别l●稳定性和确定性•10亿+在线商品•亿级+条码•百万级+品牌卖家买家服务实物交易金额交易额价格交易量线上资质线下信用标签性别年龄地址商品淘宝商品结构2SPU标准产品单元Product商品SKU库存量单元营销价格库存时间地点物流市场规则规范效率个性描述描述信息特征标题多媒体图片地址库品牌库类目属性库行业属性产品要素卖家要素销售要素商品发布产品中心市场3商品生命周期前后台商品体系4商品数据流转5后台商品库后台类目标准属性……商品算法平台前台类目体系前台商品库前台类目集导购PV集……导购算法平台运营干预搜索导航用户行为配置类目属性商品发布平台治理后台类目体系运营平台数据推送服务版本化数据包前台类目属性服务数据治理服务03元数据在淘宝商品体系架构中的应用PART THREE1元数据驱动元数据•描述数据的数据元数据驱动架构•利用元数据来控制和实现应用的逻辑元数据一直都存在,并常被我们所使用•Java POJO•数据库Schema•配置信息理念-应用基础架构2•绝大多数应用采用经典Web结构•部分配置从代码中抽离出来单独管理•抽象比较好的业务提供运营平台,让运营、产品人员直接配置规则•新业务需求需要编码实现,周期以周记•通过接口接收请求、返回结果•调用初始化配置和逻辑•调用依赖应用获取数据•调用多种存储获取数据•应用根据请求执行计算逻辑,获得结果应用逻辑配置中心依赖应用依赖应用依赖应用MySql搜索KV 缓存理念-元数据驱动架构3——元数据驱动架构核心思想就是提高元数据使用比例应用逻辑配置中心依赖应用依赖应用依赖应用数据库搜索KV 缓存模型规则流程界面l 元数据包含:•模型:接口(API)、数据(DO对象)、存储(DB)•逻辑(基本能力):组件化代码片段、脚本片段、规则、规则集•流程:组件选取、执行编排•界面:UI组件管理、可视化编辑•配置:开关、业务配置4元数据驱动的思路l●未来全局架构•不同角色的运营平台•控制逻辑配置和规则抽离•业务执行系统•三类数据:控制数据,基础数据,过程数据l●好处•通过动态配置改变应用执行逻辑,提高效率•业务和技术分离,PD、运营等非技术人员可以直接参与开发•逻辑和能力可视化好元数据驱动架构平台512 3 41 2 3 4/元数据引擎6l●元数据等同于代码,元数据修改等同于开发l●特性:–需要多版本、快照–需要继承、引用–事务、数据一致性–环境隔离(沙箱)–发布、回滚Trunk项目环境预发环境生产环境项目2日常1deploydeploydeploy日常2日常3S优点T挑战通过增加动态配置的比例,提高开发效率业务和技术分离,非技术人员可以参与开发逻辑和能力可视化好学习曲线、理念上的转变对于稳定性和性能方面有较高要求需要丰富的配套工具支撑此处添加副标题汇报人:某某此处添加主标题谢谢聆听。
淘宝的架构淘宝用的是JBoss,框架是iBATIS,缓存服务器是自己开发的,基本遵循SNA架构,水平扩展,数据库是Oracle,阿里集团的DBA几乎是国内最强悍的。
目前淘宝的系统架构正在重构,计划用两到三年时间重写,目标有两个:1、水平扩展已经不满足需求了,还需要水平加垂直扩展2、开放API,让店家可以把外部网站资源集成到淘宝,不必直接在淘宝开店淘宝首席架构师是原来JBoss的Ben Wang,现在正在招募技术高手加盟,从事这项很有挑战性的工作:设计下一代开放性、支撑数十亿访问量的在线电子商务网站淘宝架构更详细的情况就不方便透露了。
淘宝网,是一个在线商品数量突破一亿,日均成交额超过两亿元人民币,注册用户接近八千万的大型电子商务网站,是亚洲最大的购物网站。
那么对于淘宝网这样大规模的一个网站,我猜想大家一定会非常关心整个网站都采用了什么样的技术、产品和架构,也会很想了解在淘宝网中是否采用了开源的软件或者是完全采用的商业软件。
那么下面我就简单的介绍一下淘宝网中应用的开源软件。
对于规模稍大的网站来说,其IT必然是一个服务器集群来提供网站服务,数据库也必然要和应用服务分开,有单独的数据库服务器。
对于像淘宝网这样规模的网站而言,就是应用也分成很多组。
那么下面,我就从应用服务器操作系统、应用服务器软件、Web Server、数据库、开发框架等几个方面来介绍一下淘宝网中开源软件的应用。
操作系统我们首先就从应用服务器的操作系统说起。
一个应用服务器,从软件的角度来说他的最底层首先是操作系统。
要先选择操作系统,然后才是操作系统基础上的应用软件。
在淘宝网,我们的应用服务器上采用的是Linux操作系统。
Linux操作系统从1991年第一次正式被公布到现在已? ? 走过了十七个年头,在PC Server 上有广泛的应用。
硬件上我们选择PC Server而不是小型机,那么Server的操作系统供我们选择的一般也就是Linux,FreeBSD, windows 2000 Server或者Windows Server 2003。
淘宝的核心技术(国内乃至国际的Top,这还是2011年的数据):拥有全国最大的分布式Hadoop 集群(云梯,2000左右节点,24000核CPU,48000GB 内存,40PB 存储容量)全国分布80+CDN 节点,能够自动找寻最近的节点提供服务,支持流量超过800Gbps 不逊于百度的搜索引擎,对数十亿商品进行搜索,全球最大的电商平台顶尖的负载均衡系统,顶尖的分布式系统,顶尖的互联网思想,功能多样运行极其稳定丰富的生态产业以及先进的数据挖掘技术……很多很多下面来看看淘宝技术演变过程。
马总在2003年4月7日秘密叫来阿里巴巴的十位员工,来到杭州一个隐秘的毛坯房,要求他们在一个月左右的时间内做出一个C2C 网站。
结果当然还是直接买的快,一个基于LAMP 架构的网站,原名是PHPAuction,老美开发的一个拍卖网站。
当然必须要做修改才能用。
2003年底,淘宝注册用户23万,PV 31万/day,半年成交额3371万。
很显然MySQL 无法撑得起如此大的访问量,数据库瓶颈出现了。
幸好阿里的DBA 队伍足够强大,他们使用Oracle 替代了MySQL。
Oracle 那时就已经有了强大的并发性访问设计——连接池,从连接池取连接的耗费比单独建立连接少很多。
但是PHP 当时并没有官方提供支持语言连接池特性,于是多隆前辈用Google(不会是Baidu)搜到了一个开源的SQL Relay,于是数据库软件方面的瓶颈暂时解决了。
随之而来的是面临硬件性能瓶颈,阿里买了EMC 的SAN 存储设备,加上Oracle 高性能RAC,硬件容量也暂时没问题了。
因为SQL Relay 的问题实在过于严重,2004年于是淘宝终于做出了跨时代的决策——使用Java重写网站。
淘宝请了Sun 的高级工程师来帮忙做Java 架构。
那么他们是如何做到修改编程语言而不改变网站使用呢——模块化替换,今天写好了A 模块,另开一个新域名,将连接指向该模块,同时别的模块不变,等到全部模块完成的时候,原域名放弃。
电子商务网站(淘宝网)的系统架构解析淘宝网,是一个在线商品数量突破一亿,日均成交额超过两亿元人民币,注册用户接近八千万的大型电子商务网站,是亚洲最大的购物网站。
那么对于淘宝网这样大规模的一个网站,我猜想大家一定会非常关心整个网站都采用了什么样的技术、产品和架构,也会很想了解在淘宝网中是否采用了开源的软件或者是完全采用的商业软件。
那么下面我就简单的介绍一下淘宝网中应用的开源软件。
对于规模稍大的网站来说,其IT必然是一个服务器集群来提供网站服务,数据库也必然要和应用服务分开,有单独的数据库服务器。
对于像淘宝网这样规模的网站而言,就是应用也分成很多组。
那么下面,我就从应用服务器操作系统、应用服务器软件、Web Server、数据库、开发框架等几个方面来介绍一下淘宝网中开源软件的应用。
操作系统我们首先就从应用服务器的操作系统说起。
一个应用服务器,从软件的角度来说他的最底层首先是操作系统。
要先选择操作系统,然后才是操作系统基础上的应用软件。
在淘宝网,我们的应用服务器上采用的是Linux操作系统。
Linux操作系统从1991年第一次正式被公布到现在已¾¬走过了十七个年头,在PC Server上有广泛的应用。
硬件上我们选择PC Server而不是小型机,那么Server的操作系统供我们选择的一般也就是Linux,FreeBSD,windows2000 Server或者Windows Server2003。
如果不准备采用微软的一系列产品构建应用,并且有能力维护Linux或者FreeBSD,再加上成本的考虑,那么还是应该在Linux和FreeBSD之间进行选择。
可以说,现在Linux和FreeBSD这两个系统难分伯仲,很难说哪个一定比另外一个要优秀很多、能够全面的超越对手,应该是各有所长。
那么在选择的时候有一个因素就是企业的技术人员对于哪种系统更加的熟悉,这个熟悉一方面是系统管理方面,另外一方面是对于内核的熟悉,对内核的熟悉对于性能调优和对操作系统进行定制剪裁会有很大的帮助。
淘宝技术架构演进之路1.概述 本⽂以淘宝为例,介绍从⼀百到千万级并发情况下服务端架构的演进过程,同时列举出每个演进阶段遇到的相关技术,让⼤家对架构的演进有⼀个整体的认知,最后汇总⼀些架构的设计原则。
2.基本概念 在介绍架构之前,为了避免读者对架构设计中的⼀些概念不了解,下⾯对接个最基础的概念进⾏介绍:分布式系统中的对个模块在不同服务器上部署,即可成为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或者两个相同的Tomcat分别部署在不同的服务器上。
⾼可⽤系统中部分节点失效时,其他节点可以接替他继续提供服务,则可认为系统具有⾼可⽤性。
集群:⼀个特定领域的软件部署在多台服务器上并作为⼀个整体提供⼀类服务,这个整体成为集群;如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成⼀个整体提供⼏种配置服务。
在常见的集群中,客户端往往能链接任意⼀个节点获得服务,并且当集群中⼀个节点掉线时,其他节点往往能够接替他继续提供服务,这时候说明集群具有⾼可⽤性。
负载均衡:请求发送到系统时通过某些⽅式吧请求均匀的分发到多个节点上,使系统中每个节点能够均匀的出来请求负载,则认为系统是负载均衡的。
正向代理和反向代理:系统内部要访问外部⽹络时,统⼀通话⼀个代理服务器吧请求转发出去,在外部⽹络来看就是代理服务器发起的访问,此时代理服务器实现的是正向代理;当外部请求进⼊系统时,代理服务器吧该请求转发到系统中某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。
简单来说,正向代理就是代理服务器代替系统内部来访问外部⽹络的过程,反向代理就是外部系统请求访问系统时通过代理服务器转发到内部服务器的过程。
3.架构演进3.1.单机架构 以淘宝为例,在⽹站最初期,应⽤数量与⽤户数量都较少,可以吧Tomcat和数据库部署在同⼀台服务器上。
浏览器往 发起请求时,⾸先经过DNS服务器(域名系统)吧域名解析转换为实际IP地址10.102.1.4,浏览器转⽽访问该IP对应的Tomcat。
高性能电子商务网站-淘宝网技术架构研究2008年淘宝的交易额是1000亿规模,2009年的时候是2000亿规模,2010年淘宝网的交易额4000亿规模,如何构建一个支撑这么大交易规模的高性能、并发的电子商务平台网站呢?以下结合网络资料,研究一下淘宝网的技术架构变迁。
淘宝网从2003年开始建立的,从1.0到1.5的版本.2005年开始2.0的版本,2012年4.0的版本上线。
马云的创业团队共10个人,马云以及他的秘书,8个里面有3个开发人员,三丰、多龙(音)、虚竹,还有UED的二当家,三位运营人员,小宝、阿柯和破天,总经理是财神。
团队开始研发是2003年4月7日,一个月后的5月10日淘宝第一个版本上线。
这段时间,创业团队关在小区里面写代码,每天早上9点到晚上1、2点。
淘宝网第一个版本MALT架构,采用PHP+MySQL首先花2000美金买了一个MALT架构网站,很精典的LAMP技术架构,刚开始的编程语言和数据库是PHP+MySQL,然后配套开发后台管理系统。
一开始部署在一台单机服务器上,流量增长后,把发邮件功能部署在一台机器上,后来再增加机器出来。
2004年MySQL撑不住了,数据存储的引擎很大缺点会锁表,一读的话把表锁住了,读的量一上来经常会锁掉,然后重启。
MySQL撑不住了,开始考虑换Oracle,除了Oracle强大之外还有一个原因是阿里巴巴那些年03、04年Oracle 人才积累达到非常强大的水平。
那时Oracle给全球的研发人员发一个称号“ACE”,那时全球三百多位,那时中国十来位,而阿里巴巴有三位。
阿里巴巴在Oracle方面能力非常强大。
换了Oracle有一个问题,PHP跟Oracle很不搭的东西,PHP一个用户访问过来建立一个连接切掉一个连接,而Oracle提供的连接数量非常有限的,因为有连接池的功能。
怎么用PHP来连接Oracle?我们就抄袭别人看,eBay用的太贵,没有用。
找了一个日本的,但是上了一个当,总重启。
淘宝海量数据产品技术架构回顾关系型数据库仍然是王道分库分表、冷热分离NoSQL是SQL的有益补充用冗余避免网络传输和随机读用中间层隔离前后端异构数据源的整合缓存是系统化的工程数据一致性、穿透与雪崩矛盾之美SQLNoSQL计算时机“预算”Hadoop/实时计算引擎“现算”MySQL+中间层Hbase+中间层计算场所本地MySQL单机HbaseRegionServer集中MyFOX中间层Prom中间层数据存储冷7200SATA盘HDFS热15000SAS盘+缓存HDFS+缓存谢谢淘宝海量数据产品技术架构张轩丞(朋春)淘宝网-数据平台与产品部关于张轩丞(朋春)淘宝数据平台与产品部(杭州)vi党,脚本语言爱好者关注NodeJS,cnode社区组织者之一*******************:我是aleafs数据平台与产品淘宝网淘宝卖家供应商消费者搜索、浏览、收藏、交易、评价...一些数字淘宝主站:30亿店铺、宝贝浏览10亿计的在线宝贝数千万量级交易笔数数据产品:50G统计汇总结果千万量级数据查询请求平均20.8ms的响应时间(6月1日)海量数据带来的挑战计算计算的速度处理吞吐量存储存储是为了更方便地查询硬盘、内存的成本查询“大海捞针”全“表”扫描架构总览主站备库RAC主站日志数据源MyFOXProm存储层数据中间层/glider查询层数据魔方淘宝指数开放API产品Hadoop 集群/云梯计算层实时流数据DataX/DbSync/TimeTunnel1500节点,每日40000JOB,处理数据1.5PB,凌晨2点结束,结果20T今天的话题关系型数据库仍然是王道NoSQL是SQL的有益补充用中间层隔离前后端缓存是系统化的工程关系型数据库仍然是王道关系型数据库有成熟稳定的开源产品SQL有较强的表达能力只存储中间状态的数据查询时过滤、计算、排序数据产品的本质拉关系做计算SELECTIF(INSTR(f.keyword,'''')>0,UPPER(TRIM(f.keyword)), CONCAT(b.brand_name,'''',UPPER(TRIM(f.keyword))))ASf0, SUM(f.search_num)ASf1,ROUND(SUM(f.search_num)/AVG(f.uv),2)ASf3FROMdm_fact_keyword_brand_dfINNERJOINdim_brandbO Nf.keyword_brand_id=b.brand_idWHEREkeyword_cat_idIN(''500025 35'')ANDthedate<=''2011-07-09'' ANDthedate>=''2011-07-07''GROUPBYf0ORDERBYSUM(f.search_num)DESCLIMIT0,100存储在DB中的数据分布式MySQL集群字段+条目数分片MyISAM引擎离线批量装载跨机房互备云梯APPMySQL集群数据装载数据查询MyFOX透明的集群中间层—MyFOX透明查询基于NodeJS,1200QPS数据装载路由计算数据装入一致性校验集群管理配置信息维护监控报警MyFOX-数据查询取分片数据(异步并发)取分片结果合并(表达式求值)合并计算缓存路由SQL解析语义理解查询路由字段改写分片SQL计算规则APC 缓存XMyFOX-节点结构MyFOX热节点(MySQL)15kSAS盘,300G12,raid10内存:24G成本:4.5W/T 冷节点(MySQL)7.2kSATA盘,1T12,raid10内存:24G成本:1.6W/T路由表30天无访问的冷数据新增热数据小结根据业务特点分库分表冷热数据分离降低成本,好钢用在刀刃上更有效地使用内存SQL虽牛,但是…如果继续用MySQL来存储数据,你怎么建索引?NoSQL是SQL的有益补充全属性交叉运算不同类目的商品有不同的属性同一商品的属性对有很多用户查询所选择的属性对不确定Prometheus定制化的存储实时计算Prom—数据装载Pro mHbaseHbaseHbase……索引:交易id列表属性对交易1(二进制,定长)交易2Prom—数据查询查索引求交集汇总计算写入缓存Prom—数据冗余明细数据大量冗余牺牲磁盘容量,以得到:避免明细数据网络传输变大量随机读为顺序读小结NoSQL是SQL的有益补充“预算”与“现算”的权衡“本地”与“集中”的协同其他的数据来源Prom的其他应用(淘词、指数等)从isearch获取实时的店铺、商品描述从主站搜索获取实时的商品数…异构数据源如何整合统一?用中间层隔离前后端[pengchun]$tail~/logs/glider-rt2.log127.0.0.1[14/Jun/2011:14:54:29+0800]"GET/glider/db/brand/brandinfo_d/get_hot _brand_top/where…HTTP/1.1"200170.065数据中间层—Glider多数据源整合UNIONJOIN输出格式化PERCENT/RANKOVER…JSON输出Glider架构DispatcherController配置解析请求解析一级缓存actionMyFOXProm二级缓存datasourceJOINUNIONfilter缓存是系统化的工程glider缓存系统前端产品一级缓存data二级缓存URL请求,nocache?nocache?nocache?Min(ttl)ttl,httpheaderetag,httpheader小结用中间层隔离前后端底层架构对前端透明水平可扩展性缓存是把双刃剑降低后端存储压力数据一致性问题缓存穿透与失效。