淘宝网采用什么技术架构来实现网站高负载的
淘宝技术架构分享

,HSF 使用的时候需要单独的下载一个hsf.sar 文件放置到jboss 的
;弊端也很明显:增加了环境的复杂度,需要往jboss 下扔sar
设计的主要原因。HSF 工作原理如下图:
HSF SAR 文件到Jboss 的Deploy 目录。
大型分布式的基础支撑。使开发人员无需过多的关注应用是集中式的,还是分布式的,可以更加专注于应用的业务需求的实现,这些纯技术
的需求都由HSF 来解决。
(2)HSF 的系统架构
I. HSF 交互场景图
客户端(消费端)从配置中心获取服务端地址列表—>和服务端建立连接开始远程调用—>服务端更新通过notify(类似B2B 的naplio)
系统通知客户端。服务端和客户端都有对应的监控中心,实时监控服务状态。客户端,配置中心,服务端,notify,之间的通信都是通过TB Remotion
API 去搞定的。
II. TB Remoting 架构图
底层基于分布式框架Mina,主要的代码都是通过
B2B 的Dubbo 也是基于这个NIO 框架的。Mina
商品,付款,确认,退款,评价,社区互动等。
产品:淘宝对产品定义和B2B 有差别,淘宝的业务拆分较细,服务化做的较成熟,所以前台应用对应的业务非常纯粹,如Detail 系统可
能就一个detail 页面,无数据库连接,所有数据来自底层的各种服务化中心,功能专一逻辑清晰纯粹,不过也正因为这样,淘宝的一个产品
淘宝前端应用
HSF接口
UIC IC SC TC
PC
Forest 推送给“淘宝前端应用”
淘宝共享服务
大型网站架构系列:电商网站架构案例分析

⼤型⽹站架构系列:电商⽹站架构案例分析上节课我们⼩组对淘宝⽹进⾏了简要的架构分析,这周我在课余时间对这类⼤型电商⽹站的某些具体架构技术进⾏了梳理和概括,并对⼀些架构⽅法进⾏更深层次的介绍,并且结合软件⼯程进⾏典型电商的需求分析。
⼀、典型电商案例电商⽹站:⽐如阿⾥巴巴,京东商城,国美在线,汽车之家等。
⼤型门户⼀般是新闻类信息,可以使⽤CDN,静态化等⽅式优化,⼀些交互性⽐较多的⽹站,可能会引⼊更多的NOSQL,分布式缓存,使⽤⾼性能的通信框架等。
电商⽹站具备以上两类的特点,⽐如产品详情可以采⽤CDN,静态化,交互性⾼的需要采⽤NOSQL等技术。
因此,我们采⽤电商⽹站作为案例,进⾏分析。
⼆、电商⽹站需求客户需求:建⽴⼀个全品类的电⼦商务⽹站(B2C),⽤户可以在线购买商品,可以在线⽀付,也可以货到付款;⽤户购买时可以在线与客服沟通;⽤户收到商品后,可以给商品打分,评价;⽬前有成熟的进销存系统;需要与⽹站对接;希望能够⽀持3~5年,业务的发展;预计3~5年⽤户数达到1000万;定期举办双11,双12,三⼋男⼈节等活动;其他的功能参考京东或国美在线等⽹站。
这⾥介绍⼀下需求功能矩阵需求功能矩阵是⼀种⼗分全⾯的需求分析⽅法,它不会漏掉⼀些⽤传统需求管理⽅法容易漏掉的肺功能需求,因此推荐⼤家使⽤需求功能矩阵,进⾏需求描述。
⼀个典型电商⽹站的需求矩阵如下:⽹站需求功能需求⾮功能需求全品类的电⼦商务⽹站分类管理,商品管理⽅便进⾏多品类管理(灵活性)⽹站访问速度要快(⾼性能)图⽚存储的要求(海量⼩图⽚)⽤户可以在线购买商品会员管理,购物车,结算功能良好购物体验(可⽤性,性能)在线⽀付或货到付款多种在线⽀付⽅式⽀付过程要安全,数据加密(安全性)多种⽀付接⼝灵活切换(灵活性,扩展性)可以在线与客服沟通在线客服功能可靠性:即时通讯商品打分评价商品评论⽬前有成熟的进销存系统对接进销存属于约束条件对接时要考虑数据⼀致性,鲁棒性⽀持3~5年,业务的发展属于约束条件伸缩性,可扩展性3~5年⽤户数达到1000万约束条件举办双11,双12,三⼋男⼈节等活动活动管理,秒杀突增访问流量(可伸缩)实时性要求(⾼性能)参考京东或国美在线参考条件以上是对电商⽹站需求的简单举例,⽬的是说明(1)需求分析的时候,要全⾯,⼤型分布式系统重点考虑⾮功能需求;(2)描述⼀个简单的电商需求场景,使⼤家对下⼀步的分析设计有个依据。
淘宝网技术架构一些简单介绍

淘宝网技术架构一些简单介绍1、操作系统我们首先就从应用服务器的操作系统说起。
一个应用服务器,从软件的角度来说他的最底层首先是操作系统。
要先选择操作系统,然后才是操作系统基础上的应用软件。
在淘宝网,我们的应用服务器上采用的是Linux操作系统。
Linux操作系统从1991年第一次正式被公布到现在已经走过了十七个年头,在PC Server上有广泛的应用。
硬件上我们选择PC Server而不是小型机,那么Server的操作系统供我们选择的一般也就是Linux,FreeBSD, windows 2000 Server或者Windows Server 2003。
如果不准备采用微软的一系列产品构建应用,并且有能力维护Linux或者FreeBSD,再加上成本的考虑,那么还是应该在Linux和FreeBSD之间进行选择。
可以说,现在Linux和FreeBSD这两个系统难分伯仲,很难说哪个一定比另外一个要优秀很多、能够全面的超越对手,应该是各有所长。
那么在选择的时候有一个因素就是企业的技术人员对于哪种系统更加的熟悉,这个熟悉一方面是系统管理方面,另外一方面是对于内核的熟悉,对内核的熟悉对于性能调优和对操作系统进行定制剪裁会有很大的帮助。
而应用全面的优化、提升性能也是从操作系统的优化开始的。
2、应用服务器在确定了服务器的硬件、服务器的操作系统之后,下面我们来说说业务系统的构建。
淘宝网有很多业务系统应用是基于JEE规范的系统。
还有一些是C C 构建的应用或者是Java构建的Standalone的应用。
那么我们要选择一款实现了JEE规范的应用服务器。
我们的选择是JBoss Applcation Server。
JBoss AS是RedHat的一个开源的支持JEE规范的应用服务器。
在几年前,如果采用Java技术构建互联网应用或者企业级应用,在开源软件中的选择一般也就是Apache组织的Tomcat、JBoss的 JBoss AS和Resin。
【2021年整理】淘宝系统架构概述

精品课件,可编辑,欢迎下载,2021最 新整理
12
2005-工业革命
• 表现层使用WebX和Service 框架
– Velocity模板技术
– 自有服务框架及多种公共服务:Form Service,Template Service, Mail Service,Rundata Service,Upload Service等
27
架构考虑的方向
业务 划分
系统 细分
应用 优化
6/26/2021
精品课件,可编辑,欢迎下载,2021最 新整理
28
业务划分(总体架构)
总体架构
– 分解:按不同的业务领域、用户群来分解业务复杂性 – 分配:将业务需求分配到各个公司、部门、系统、服务 – 系统/服务可独立部署和维护,它们之间多采用分布式交互
水平分割 垂直分割
精品课件,可编辑,欢迎下载,2021最 新整理
内容静态化 数据库缓存
对象缓存 客户端缓存
33
应用优化
– 通过command模式和biz层交互
– 无状态Web应用,基于cookie实现session,获取线性扩展性
• 业务逻辑层使用Alibaba Service框架,并且引入 spring 框架
– Spring容器和Alibaba Service框架无缝集成
– AO,BO
– 使用分布式cache缓存对象
support
专业化细分之后
• Clothing offer • Retail
• Loan
member
• Trust Pass
• Special Market
• alipay
transaction
• paypal
淘宝网架介绍

Slave
Linux Apache
PHP MySQL
V1.0架构-问题
•数据库容量限制 •数据稳定性 •数据库性能问题
V1.1架构2004.01-2004.05
Apache mod_php4
pear db SQL Relay
Oracle
Linux Apache
PHP SQL Relay
Oracle
V2.1架构-2004.10-2007.01
•Weblogic->Jboss •JDK4->JDK5 •支持数据库分库 •抛弃EJB •引入Spring •Session框架重构 •缓存框架TBStroe(Tair前身) •淘宝自己的CDN
Linux Apache JBoss WebX Spring TaobaoIbatis Oracle
服务化/中心化的业务系统架构
客户(买家/卖家)
前台类系统 店铺 商城 社区 无名良品
商品 交易 无线
…
核心业务服务
UIC(用户中心) DC(装修中心)
IC(商品中心) RC(评价中心)
TC(交易中心) SC(店铺中心)
PC(促销中心) forest(类目中心)
基础服务
Tair(分布式缓存)
数据库管理
V2.1架构-session框架
•集中存储 •对代码透明
V2.2架构-需求2006.6-2007.12
•提高系统性能 •降低存储成本 •支持海量数据搜索
V2.2架构2006.6-2007.12
•分布式存储TFS •分布式缓存Tair •页面缓存ESI •搜索引擎升级
Linux Apache JBoss WebX Spring TaobaoIbatis Oracle TFS
淘宝服务端技术架构详解

淘宝服务端技术架构详解目录一、前言 (3)二、单机架构 (4)三、多机部署 (4)四、分布式缓存 (5)五、Session 共享解决方案 (7)六、数据库读写分离 (9)七、CDN 加速与反向代理 (10)八、分布式文件服务器 (11)九、数据库分库分表 (11)十、搜索引擎与NoSQL (13)十一、后序 (13)一、前言以淘宝网为例,简单了解一下大型电商的服务端架构是怎样的。
如图所示最上面的就是安全体系系统,中间的就是业务运营系统,包含各个不同的业务服务,下面是一些共享服务,然后还有一些中间件,其中ECS 就是云服务器,MQS 是队列服务,OCS 是缓存等等,右侧是一些支撑体系服务。
除图中所示之外还包含一些我们看不到的,比如高可用的体现。
淘宝目前已经实现多机房容灾和异地机房单元化部署,为淘宝的业务也提供了稳定、高效和易于维护的基础架构支撑。
这是一个含金量非常高的架构,也是一个非常复杂而庞大的架构,当然这个架构不是一天两天演进成这样的,也不是一开始就设计并开发成这样的,对于初创公司而言,很难在初期就预估到未来流量千倍、万倍的网站架构会是怎样的状况,同时如果初期就设计成千万级并发的流量架构,也很难去支撑这个成本。
因此一个大型服务系统,都是从小一步一步走过来的,在每个阶段找到对应该阶段网站架构所面临的问题,然后不断解决这些问题,在这个过程中,整个架构会一直演进,同时内含的代码也就会演进,大到架构、小到代码都是在不断演进和优化的。
所以说高大上的项目技术架构和开发设计实现不是一蹴而就的,这是所谓的万丈高楼平地起。
二、单机架构从一个小网站说起,一般来说初始一台服务器就够了,文件服务器、数据库以及应用都部署在一台机器上。
也就是俗称的 allinone 架构。
这篇推荐看下:厉害了,淘宝千万并发,14 次架构演进…三、多机部署随着网站用户逐渐增多,访问量越来越大,硬盘、cpu、内存等开始吃紧,一台服务器难以支撑。
淘宝取得成功的原因:优秀的网站技术

淘宝取得成功的原因:优秀的网站技术淘宝是中国最大的电子商务平台之一,其取得成功的原因有很多方面,其中之一便是优秀的网站技术。
淘宝作为一个大型的电商平台,其网站技术不仅涉及到网站的架构设计和系统运维,还包括用户体验、安全保障、可用性等多个方面。
下面就从这几个方面来谈谈淘宝的优秀网站技术。
一、架构设计和系统运维淘宝的网站架构设计和系统运维非常优秀,其采用的是分布式架构,即将整个系统拆分为许多小模块,每个模块都可以独立运行,这样做的好处在于它可以灵活地增加或减少服务器的数量,从而使系统更加稳定和高效。
此外,淘宝的系统运维也十分专业,不仅拥有一支专业的IT团队,而且还有体系完善的应急预案和灾备方案,一旦系统发生故障,可以迅速地将问题解决,并确保平台在最短时间内恢复正常运营。
二、用户体验淘宝非常注重用户体验,其网站界面设计简洁美观,同时也十分易用。
淘宝的搜索功能非常强大,用户可以根据关键词、价格、销量、评价等多个条件进行筛选,使用户找到自己想要的商品更加容易。
此外,淘宝也会根据用户的搜索记录和购买历史为用户推荐相关的商品,提高用户购物的效率。
在支付方面,淘宝也提供了多种支付方式,包括支付宝、信用卡、网银等,让消费者可以选择最方便、最安全的支付方式进行交易。
三、安全保障淘宝的安全保障措施是相当专业且周到的。
首先,淘宝会对商家进行资质审核,只有通过审核的商家才能在淘宝上销售商品。
其次,淘宝会对商品进行质量检查,确保其真实性和合法性,从而提高了消费者的信任度。
另外,淘宝也会加密用户的个人信息和交易数据,确保其隐私的安全,以避免个人信息泄露或交易纠纷。
对于发生的纠纷,淘宝也会提供专业的客服团队协助解决,确保消费者权益得到保障。
四、可用性淘宝的可用性也非常高,其网站不仅可以在电脑上访问,还可以在手机上进行访问和购物。
同时,淘宝也推出了淘宝APP,手机用户可以通过APP进行淘宝的所有操作,这样大大提高了用户的体验。
此外,淘宝的服务器集群和备份机制也可以保证网站的24小时稳定运行。
淘宝技术架构介绍

OR-Mapping OR-Mapping OR-Mapping
Read/Write h cache
Oracle Oracle
…… Node 2 Node n
Node 1
V2.2 2006.10 – 2007.12
· 分布式存储TFS · 分布式缓存Tair · 搜索引擎升级
……
Function 3 Function 2 JBoss Function 1 JBoss JBoss 淘宝MVC JBoss 淘宝MVC 淘宝MVC Spring 淘宝MVC Spring Spring Ibatis Spring Ibatis Ibatis OR-Mapping
一致性
V3.0 2007.12 -·应用透明伸缩
· Session框架 ·高性能服务框架HSF · 消息系统Notify ·业务中心建立
·数据透明伸缩
·分布式数据层TDDL
服务/消息
·稳定性
·容灾
·成本
·自动化 · 数据迁移到MySQL
V3.0 应用透明伸缩
· 展现层-会话处理很重要
· 粘性session · session复制 · 集中式session · 不用session
cache
Search 分布式存储
Oracle Oracle Oracle Oracle
Node 1Βιβλιοθήκη Node 1Node 2
Node n
Node 2 Read/Write …… Node Node 1 2
Node n
Node n
需求
·高稳定性
·高数据安全 ·高可用性
·高容量,高性能
·高并发处理能力 ·高存储容量 ·低响应时间
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
淘宝网采用什么技术架构来实现网站高负载的时间:2010-09-15时间过得很快,来淘宝已经两个月了,在这两个月的时间里,自己也感受颇深。
下面就结合淘宝目前的一些底层技术框架以及自己的一些感触来说说如何构建一个可伸缩,高性能,高可用性的分布式互联网应用。
一应用无状态(淘宝session框架)俗话说,一个系统的伸缩性的好坏取决于应用的状态如何管理。
为什么这么说呢?咱们试想一下,假如我们在session中保存了大量与客户端的状态信息的话,那么当保存状态信息的server宕机的时候,我们怎么办?通常来说,我们都是通过集群来解决这个问题,而通常所说的集群,不仅有负载均衡,更重要的是要有失效恢复failover,比如tomcat采用的集群节点广播复制,jboss采用的配对复制等session状态复制策略,但是集群中的状态恢复也有其缺点,那就是严重影响了系统的伸缩性,系统不能通过增加更多的机器来达到良好的水平伸缩,因为集群节点间session的通信会随着节点的增多而开销增大,因此要想做到应用本身的伸缩性,我们需要保证应用的无状态性,这样集群中的各个节点来说都是相同的,从而是的系统更好的水平伸缩。
OK,上面说了无状态的重要性,那么具体如何实现无状态呢?此时一个session框架就会发挥作用了。
幸运的是淘宝已经具有了此类框架。
淘宝的session框架采用的是client cookie实现,主要将状态保存到了cookie里面,这样就使得应用节点本身不需要保存任何状态信息,这样在系统用户变多的时候,就可以通过增加更多的应用节点来达到水平扩展的目的.但是采用客户端cookie的方式来保存状态也会遇到限制,比如每个cookie一般不能超过4K的大小,同时很多浏览器都限制一个站点最多保存20个cookie.淘宝cookie框架采用的是“多值cookie”,就是一个组合键对应多个cookie的值,这样不仅可以防止cookie数量超过20,同时还节省了cookie存储有效信息的空间,因为默认每个cookie都会有大约50个字节的元信息来描述cookie。
除了淘宝目前的session框架的实现方式以外,其实集中式session管理来完成,说具体点就是多个无状态的应用节点连接一个session服务器,session服务器将session保存到缓存中,session服务器后端再配有底层持久性数据源,比如数据库,文件系统等等。
二有效使用缓存(Tair)做互联网应用的兄弟应该都清楚,缓存对于一个互联网应用是多么的重要,从浏览器缓存,反向代理缓存,页面缓存,局部页面缓存,对象缓存等等都是缓存应用的场景。
一般来说缓存根据与应用程序的远近程度不同可以分为:localcache和remote cache。
一般系统中要么采用local cache,要么采用remote cache,两者混合使用的话对于local cache和remote cache的数据一致性处理会变大比较麻烦.在大部分情况下,我们所说到的缓存都是读缓存,缓存还有另外一个类型:写缓存.对于一些读写比不高,同时对数据安全性需求不高的数据,我们可以将其缓存起来从而减少对底层数据库的访问,比如统计商品的访问次数,统计API的调用量等等,可以采用先写内存缓存然后延迟持久化到数据库,这样可以大大减少对数据库的写压力。
OK,我以店铺线的系统为例,在用户浏览店铺的时候,比如店铺介绍,店铺交流区页面,店铺服务条款页面,店铺试衣间页面,以及店铺内搜索界面这些界面更新不是非常频繁,因此适合放到缓存中,这样可以大大减低DB的负载。
另外宝贝详情页面相对也更新比较少,因此也适合放到缓存中来减低DB负载。
三应用拆分(HSF)首先,在说明应用拆分之前,我们先来回顾一下一个系统从小变大的过程中遇到的一些问题,通过这些问题我们会发现拆分对于构建一个大型系统是如何的重要。
系统刚上线初期,用户数并不多,所有的逻辑也许都是放在一个系统中的,所有逻辑跑到一个进程或者一个应用当中,这个时候因为比较用户少,系统访问量低,因此将全部的逻辑都放在一个应用未尝不可。
但是,兄弟们都清楚,好景不长,随着系统用户的不断增加,系统的访问压力越来越多,同时随着系统发展,为了满足用户的需求,原有的系统需要增加新的功能进来,系统变得越来越复杂的时候,我们会发现系统变得越来越难维护,难扩展,同时系统伸缩性和可用性也会受到影响。
那么这个时候我们如何解决这些问题呢?明智的办法就是拆分(这也算是一种解耦),我们需要将原来的系统根据一定的标准,比如业务相关性等分为不同的子系统,不同的系统负责不同的功能,这样切分以后,我们可以对单独的子系统进行扩展和维护,从而提高系统的扩展性和可维护性,同时我们系统的水平伸缩性scale out大大的提升了,因为我们可以有针对性的对压力大的子系统进行水平扩展而不会影响到其它的子系统,而不会像拆分以前,每次系统压力变大的时候,我们都需要对整个大系统进行伸缩,而这样的成本是比较大的,另外经过切分,子系统与子系统之间的耦合减低了,当某个子系统暂时不可用的时候,整体系统还是可用的,从而整体系统的可用性也大大增强了。
因此一个大型的互联网应用,肯定是要经过拆分,因为只有拆分了,系统的扩展性,维护性,伸缩性,可用性才会变的更好。
但是拆分也给系统带来了问题,就是子系统之间如何通信的问题,而具体的通信方式有哪些呢?一般有同步通信和异步通信,这里我们首先来说下同步通信,下面的主题“消息系统”会说到异步通信。
既然需要通信,这个时候一个高性能的远程调用框架就显得非常总要啦,因此咱们淘宝也有了自己的HSF框架。
上面所说的都是拆分的好处,但是拆分以后必然的也会带来新的问题,除了刚才说的子系统通信问题外,最值得关注的问题就是系统之间的依赖关系,因为系统多了,系统的依赖关系就会变得复杂,此时就需要更好的去关注拆分标准,比如能否将一些有依赖的系统进行垂直化,使得这些系统的功能尽量的垂直,这也是目前淘宝正在做的系统垂直化,同时一定要注意系统之间的循环依赖,如果出现循环依赖一定要小心,因为这可能导致系统连锁启动失败。
OK,既然明白了拆分的重要性,我们看看随着淘宝的发展,淘宝本身是如何拆分系统的。
首先我们来看以下这个图:从上面的图可以看出淘宝系统的一个演变过程,在这个演变的过程中,我们所说的拆分就出现V2.2和V3.0之间。
在V2.2版本中,淘宝几乎所有的逻辑都放在(Denali)系统中,这样导致的问题就是系统扩展和修改非常麻烦,并且更加致命的是随着淘宝业务量的增加,如果按照V2.2的架构已经没有办法支撑以后淘宝的快速发展,因此大家决定对整个系统进行拆分,最终V3.0版本的淘宝系统架构图如下:从上图可以看出V3.0版本的系统对整个系统进行了水平和垂直两个方向的拆分,水平方向上,按照功能分为交易,评价,用户,商品等系统,同样垂直方向上,划分为业务系统,核心业务系统以及以及基础服务,这样以来,各个系统都可以独立维护和独立的进行水平伸缩,比如交易系统可以在不影响其它系统的情况下独立的进行水平伸缩以及功能扩展。
从上面可以看出,一个大型系统要想变得可维护,可扩展,可伸缩,我们必须的对它进行拆分,拆分必然也带来系统之间如何通信以及系统之间依赖管理等问题,关于通信方面,淘宝目前独立开发了自己的高性能服务框架HSF,此框架主要解决了淘宝目前所有子系统之间的同步和异步通信(目前HSF主要用于同步场合,FutureTask方式的调用场景还比较少)。
至于系统间的依赖管理,目前淘宝还做的不够好,这应该也是我们以后努力解决的问题。
四数据库拆分(TDDL)在前面“应用拆分”主题中,我们提到了一个大型互联网应用需要进行良好的拆分,而那里我们仅仅说了”应用级别”的拆分,其实我们的互联网应用除了应用级别的拆分以外,还有另外一个很重要的层面就是存储如何拆分的。
因此这个主题主要涉及到如何对存储系统,通常就是所说的RDBMS进行拆分。
好了,确定了这个小节的主题之后,我们回顾一下,一个互联网应用从小变大的过程中遇到的一些问题,通过遇到的问题来引出我们拆分RDBMS的重要性。
系统刚开始的时候,因为系统刚上线,用户不多,那个时候,所有的数据都放在了同一个数据库中,这个时候因为用户少压力小,一个数据库完全可以应付的了,但是随着运营那些哥们辛苦的呐喊和拼命的推广以后,突然有一天发现,oh,god,用户数量突然变多了起来,随之而来的就是数据库这哥们受不了,它终于在某一天大家都和惬意的时候挂掉啦。
此时,咱们搞技术的哥们,就去看看究竟是啥原因,我们查了查以后,发现原来是数据库读取压力太大了,此时咱们都清楚是到了读写分离的时候,这个时候我们会配置一个server 为master节点,然后配几个salve节点,这样以来通过读写分离,使得读取数据的压力分摊到了不同的salve节点上面,系统终于又恢复了正常,开始正常运行了。
但是好景还是不长,有一天我们发现master这哥们撑不住了,它负载老高了,汗流浃背,随时都有翘掉的风险,这个时候就需要咱们垂直分区啦(也就是所谓的分库),比如将商品信息,用户信息,交易信息分别存储到不同的数据库中,同时还可以针对商品信息的库采用master,salve模式,OK,通过分库以后,各个按照功能拆分的数据库写压力被分担到了不同的server上面,这样数据库的压力终于有恢复到正常状态。
但是是不是这样,我们就可以高枕无忧了呢?NO,这个NO,不是我说的,是前辈们通过经验总结出来的,随着用户量的不断增加,你会发现系统中的某些表会变的异常庞大,比如好友关系表,店铺的参数配置表等,这个时候无论是写入还是读取这些表的数据,对数据库来说都是一个很耗费精力的事情,因此此时就需要我们进行“水平分区”了(这就是俗话说的分表,或者说sharding).OK,上面说了一大堆,无非就是告诉大家一个事实“数据库是系统中最不容易scale out的一层”,一个大型的互联网应用必然会经过一个从单一DBserver,到Master/salve,再到垂直分区(分库),然后再到水平分区(分表,sharding)的过程,而在这个过程中,Master/salve以及垂直分区相对比较容易,对应用的影响也不是很大,但是分表会引起一些棘手的问题,比如不能跨越多个分区join 查询数据,如何平衡各个shards的负载等等,这个时候就需要一个通用的DAL 框架来屏蔽底层数据存储对应用逻辑的影响,使得底层数据的访问对应用透明化。
拿淘宝目前的情况来说,淘宝目前也正在从昂贵的高端存储(小型机+ORACLE)切换到MYSQL,切换到MYSQL以后,势必会遇到垂直分区(分库)以及水平分区(Sharding)的问题,因此目前淘宝根据自己的业务特点也开发了自己的TDDL框架,此框架主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制五异步通信(Notify)在”远程调用框架”的介绍中,我们说了一个大型的系统为了扩展性和伸缩性方面的需求,肯定是要进行拆分,但是拆分了以后,子系统之间如何通信就成了我们首要的问题,在”远程调用框架”小节中,我们说了同步通信在一个大型分布式系统中的应用,那么这一小节我们就来说说异步通信.好了,既然说到了异步通信,那么”消息中间件”就要登场了,采用异步通信这其实也是关系到系统的伸缩性,以及最大化的对各个子系统进行解耦.说到异步通信,我们需要关注的一点是这里的异步一定是根据业务特点来的,一定是针对业务的异步,通常适合异步的场合是一些松耦合的通信场合,而对于本身业务上关联度比较大的业务系统之间,我们还是要采用同步通信比较靠谱。