淘宝 10 年,高并发分布式架构演进之路
大家好,我是楼仔!
之前给自己定了一个学习计划,今年上半年需要完成“高并发”系列文章,这个是该系列的第一篇。
在写“高并发”系列文章之前,我觉得有必要让大家对高并发分布式架构有一个整体的认识,给大家搭建一套高并发的知识体系。
这套体系涉及的技术点非常多,不限于熔断、流控、异步、池化、背压、负载均衡、主从分离、读写分离、缓存雪崩、缓存穿透、数据一致性、注册中心、配置中心、微服务等。
后面的系列文章,会根据这套体系涉及的知识点去讲解,当整个系列全部完成后,我会出一套高并发手册。
这篇文章是转载过来的,“高并发”的第一篇本来打算自己写,后来发现这篇写的非常不错,所以就没有单独写的必要,支持原创:
- 原文作者:huashiou
- 原文链接:https://segmentfault.com/a/1190000018626163
概述
本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则,架构演进过程如下:
- 单机架构
- 第一次演进:Tomcat与数据库分开部署
- 第二次演进:引入本地缓存和分布式缓存
- 第三次演进:引入反向代理实现负载均衡
- 第四次演进:数据库读写分离
- 第五次演进:数据库按业务分库
- 第六次演进:把大表拆分为小表
- 第七次演进:使用LVS或F5来使多个Nginx负载均衡
- 第八次演进:通过DNS轮询实现机房间的负载均衡
- 第九次演进:引入NoSQL数据库和搜索引擎等技术
- 第十次演进:大应用拆分为小应用
- 第十一次演进:复用的功能抽离成微服务
- 第十二次演进:引入企业服务总线ESB屏蔽服务接口的访问差异
- 第十三次演进:引入容器化技术实现运行环境隔离与动态服务管理
- 第十四次演进:以云平台承载系统
特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径。
基本概念
在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:
- 分布式:系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署在不同的服务器上,或两个相同功能的Tomcat分别部署在不同服务器上
- 高可用:系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性
- 集群:一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Zookeeper中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能够自动的接替它继续提供服务,这时候说明集群具有高可用性
- 负载均衡:请求发送到系统时,通过某些方式把请求均匀分发到多个节点上,使系统中每个节点能够均匀的处理请求负载,则可认为系统是负载均衡的
- 正向代理和反向代理:系统内部要访问外部网络时,统一通过一个代理服务器把请求转发出去,在外部网络看来就是代理服务器发起的访问,此时代理服务器实现的是正向代理;当外部请求进入系统时,代理服务器把该请求转发到系统中的某台服务器上,对外部请求来说,与之交互的只有代理服务器,此时代理服务器实现的是反向代理。简单来说,正向代理是代理服务器代替系统内部来访问外部网络的过程,反向代理是外部请求访问系统时通过代理服务器转发到内部服务器的过程。
架构演进
单机架构
以淘宝作为例子。在网站最初时,应用数量与用户数都较少,可以把Tomcat和数据库部署在同一台服务器上。浏览器往www.taobao.com发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102...
热门评论
4 条评论
回复