阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!

本文涉及的产品
对象存储 OSS,20GB 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
对象存储 OSS,恶意文件检测 1000次 1年
简介: 淘宝技术架构变迁自2003年创立以来的,淘宝业务发展非常迅速,几乎是每年以100%的速度在成长。创立之初,为了快速上线,抢占市场,选择了当时流行的LAMP架构,用PHP作为网站开发语言, Linux作为操作系统,Apache作为Web服务器,MySQL为数据库,用了三个月不到的时间淘宝就上线了。

淘宝技术架构变迁

自2003年创立以来的,淘宝业务发展非常迅速,几乎是每年以100%的速度在成长。创立之初,为了快速上线,抢占市场,选择了当时流行的LAMP架构,用PHP作为网站开发语言, Linux作为操作系统,Apache作为Web服务器,MySQL为数据库,用了三个月不到的时间淘宝就上线了。当时整个网站应用服务器大概10台左右,MySQL数据库采用了读写分离、一主两备的部署方式。

2004年在淘宝业务发展的推动下,我们参考电信运营商、银行等的一些企业解决方案,将LAMP架构改造为Oracle+IBM小型机的数据库架构和EMC存储方式(图2)。虽然方案成本昂贵,但性能非常好。同时,随着网站流量的增加,系统显得有些不堪重负。当时最担心的问题是网站流量如果持续增加,交易量持续增加,网站的系统架构怎么设计?如何选择数据库?如何选择缓存?如何构建业务系统?……后来参考eBay的互联网设计架构,设计了一个Java的技术方案,并使用了非常多的Java开源产品。例如,选择当时比较流行的JBoss,作为应用服务器;选择一个开源的IOC容器Spring,来管理业务类;封装了一个数据库访问工具IBatis,作为数据库和Java类的Object-Reletionship映射工具。另外,对于商品搜索功能,采用自己开发的ISearch搜索引擎来取代在Oracle数据库中进行搜索,降低数据库服务器的压力。做法比较简单,每天晚上全量将Oracle小型机的数据dump出来,Build成ISearch的索引,当时商品量也不大,一台普通配置的服务器,基本上可以将所有的索引都放进去,没做切分,直接做了一个对等集群。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

从2006年开始,淘宝为了改善用户体验,开始建立自己的CDN站点,由于淘宝的主要流量来源于各种商品图片、商品描述等静态数据,自建CDN可以使这些资源离用户更近,提升用户访问速度,改善用户浏览网站的体验。

2007年,淘宝全年的交易额超过400亿元,平均近1亿多一天,每天有100多万笔交易被创建。当时面对的几个主要问题是:一些系统的流量非常大,如商品详情等,如果直接访问数据库,会导致数据库压力非常大;如用户信息,访问一个页面,都需要查询买家信息、卖家信息、显示出买家的信用、卖家的服务星级等。此时,淘宝采用分布式缓存TDBM(Tair的前身)将这些热点静态数据缓存在内存中,提高访问性能。另外,将自己研发的分布式文件系统TFS部署在多台x86服务器上,取代商业的NAS存储设备来存储淘宝的各种文件信息,如商品图片、商品描述信息、交易快照信息,来达到降低成本和提高整体系统的容量和性能的目的,同时可以实现更灵活的扩展性。第一期上线大概200台TFS服务器。另外,将ISearch搜索引擎改为分布式架构,支持水平扩展,部署了48个节点。图3展示了这一架构思路。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

2008年初,为了解决Oracle数据库集中式架构的瓶颈问题(连接数限制、I/O性能),将系统进行了拆分,按照用户域、商品域、交易域、店铺域等业务领域进行拆分,建立了20多个业务中心,如商品中心、用户中心、交易中心等。所有有用户访问需求的系统,必须使用业务中心提供的远程接口来访问,不能够直接访问底层的MySQL数据库,通过HSF这种远程通信方式来调用业务中心的服务接口,业务系统之间则通过Notify消息中间件异步方式完成调用。图4是淘宝的分布式架构图。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

从2010年开始,淘宝网重点着眼于统一架构体系,从整体系统层面考虑开发效率、运维标准化、高性能、高可扩展性、高可用、低成本方面的要求,底层的基础架构统一采用了阿里云计算平台(图5),使用了SLB、ECS、RDS、OSS、ONS、CDN等阿里云计算服务,并通过阿里云服务提供的高可用特性,实现双机房容灾和异地机房单元化部署,为淘宝业务提供稳定、高效和易于维护的基础架构支撑。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

在从IOE架构最终向云计算平台技术架构转移的过程中,主要面临以下几个技术挑战。

■ 可用性:脱离小型机和高端存储的高冗余机制,采用基于PC服务器的分布式架构的云计算平台能否做到高可用。

■ 一致性:Oracle基于RAC和共享存储实现的物理级别一致性,基于RDS for MySQL能否达到同样的效果。

■ 高性能:高端存储的I/O能力很强,基于PC服务器的RDS能否提供同样甚至更高的I/O处理能力,MySQL和Oracle对SQL的处理性能是否相同。

■ 扩展性:业务逻辑如何拆分,如何服务化,数据分多少库分多少表,什么维度分,后期二次拆分如何更方便等。

基于阿里云计算平台,通过采用合适的技术策略和最佳实践,包括:应用无状态,有效使用缓存(浏览器缓存、反向代理缓存、页面缓存、局部页面缓存、对象缓存和读写分离),服务原子化,数据库分割,异步解决性能问题,最小化事物单元,适当放弃一致性。以及自动化监控/运维手段包括监控预警、配置统一管理,基础服务器监控,URL监控,网络监控,模块间调用监控,智能分析监控,综合故障管理平台,容量管理。可以很好地解决以上问题,从而达到整体系统的高可扩展性、更低的成本、更高的性能和可用性的实现效果。

迁云架构最佳实践

淘宝的技术架构是一个伴随业务逐渐发展而逐步演进的过程,中间沉淀了很多宝贵的架构最佳实践。对于大部分企业级客户来说,可以结合自己的业务场景选择合适的技术架构来实现整体IT系统的互联网化设计。不同应用场景下的迁云架构,包括文件存储、应用服务、OLTP数据库、OLAP数据库。

对于文件存储方式,可以直接用OSS取代EMC存储实现海量数据文件的存储,OSS存储最大容量可以达40PB,同时由于OSS是分布式存储方式,可以通过多个节点的并行读写显著提高数据访问性能。对于大文件,还可以通过Multipart Upload的方式,将大文件分块并行传输与存储,实现高性能。

对于应用服务,可通过SLB+多台ECS实例组合取代IBM小型机(图6),也可以根据不同应用类型,直接基于ACE、ONS、OpenSearch等阿里云中间件云服务部署。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

OLTP应用的迁移相对复杂。目前阿里云的RDS实例最高是48GB内存,14000IOPS,1TB的存储容量(SSD存储),支持MySQL和SQL Server。这个配置作为单数据库服务器来使用可以满足很多场景的数据库应用需求,可直接取代大部分场景下的IBM小型机+Oracle数据库+EMC存储。

对于性能要求更高的应用,可考虑引入开放缓存服务OCS,将部分查询数据加载至分布式缓存中,减少RDS的数据查询次数,提升系统的数据查询并发效率和降低响应时间,如图7所示。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

对于读的请求远大于写请求的场景,可以考虑用多个RDS数据库,采用分布式方式实现读写分离,写交易主要发生在主库,读请求访问备库,可以根据需求对读库进行扩展,以实现整体请求性能的提升。

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

对于数据规模较大的数据库表,可以通过水平切分的方式,将数据分布在多个RDS实例上,通过并行的分布式数据库操作来实现性能和容量的提升。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

总的来说,通过迁移到RDS、引入数据缓存、分库分表、读写分离等多种方式可以用Scale-Out方式取代原有的IOE架构,并且获得更好的性能和扩展性。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

对于OLAP应用,可采用ODPS+OTS+RDS/ADS的解决方案取代小型机+Oracle DB+OLAP+RAC+EMC存储解决方案,如图11所示。总体来看,迁云的通用架构方案如图12所示,针对具体业务系统的迁云方案还需要根据实际情况进行分析和合理选择。

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

 

阿里P8架构师谈:淘宝技术架构从1.0到4.0的架构变迁!附架构资料

 

以上就是淘宝的技术架构变迁详解,以下是最新阿里P8架构师谈架构设计系列详解

给大家推荐一个程序员学习交流群:878249276,群里有分享
的视频,面试指导,架构资料,还有思维导图
群公告有视频,都是干货的,你可以下载来看。主要分享分布
式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、
Jvm大型分布式项目实战学习架构师视频。合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没
有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
30天前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
22 0
|
2月前
|
存储 前端开发 架构师
阿里资深架构师带你深入浅出JVM!
JVM = 类加载器(classloader) + 执行引擎(execution engine) + 运行时数据区域(runtime data area)
40 1
|
30天前
|
存储 消息中间件 算法
深度思考:架构师必须掌握的五大类架构设计风格
数据流风格注重数据在组件间的流动,适合处理大量数据。调用返回风格则强调函数或方法的调用与返回,过程清晰明了。独立构件风格让每个构件独立运作,通过接口交互,提升灵活性和可重用性。虚拟机风格则模拟完整系统,实现资源的高效利用。
深度思考:架构师必须掌握的五大类架构设计风格
|
1月前
|
设计模式 架构师 前端开发
架构师进阶篇-什么是架构师
架构师进阶篇-什么是架构师
52 0
|
2月前
|
架构师 Java API
阿里P7架构师带你深入剖析synchronized的实现原理
显示锁ReentrantLock的内部同步依赖于AQS(AbstractQueuedSynchronizer),因此,分析ReentrantLock必然涉及AQS。
19 1
|
2月前
|
XML Java 数据库连接
阿里P7架构师带你修炼MyBatis
我们通过一个简单的权限控制需求(RABC,Role-Based Access Control,基于角色的访问控制),来讲解通过XML方式配置MyBatis的基本用法(即select、update、insert、delete等操作的XML配置方式)。
32 0
|
2月前
|
存储 监控 安全
阿里云云通信短信服务安全之安全架构
阿里云云通信长期致力于通过多种渠道向客户透明服务相关情况。客户一般可通过阿里云官网提出对阿里云云通信相关资质、服务使用情况、产品说明等信息,我们将7*24小时不间断处理您的建议与咨询。对于客户合理的要求,阿里云云通信服务团队均会及时响应客户的需求。同时,阿里云云通信也在探索更多增加透明度的方式,如对公邮箱、线上查询接口、钉钉服务客户群等。
|
3月前
|
消息中间件 人工智能 Java
面试了一个前阿里P7,Java八股文与架构核心知识简直背得炉火纯青
前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。 每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎么准备面试,哪怕是一些工龄比较长的“老开发”: 有的人明知道有些问题肯定会被问,面试前还不好好准备,结果要么回答得模棱两可,要么答非所问; 有的人则是不知道怎么包装自己的项目经历,结果明明还不错的项目却看上去平平无奇,过后就被面试官忘了; 更有甚者,简历写得花里胡哨,结果一问三不知,简历和经历完全对不上。
|
11天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
18 0
|
10天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。