若有收获,请记得分享和转发哦
说起高并发、高可用和高可扩展性,在一线互联大厂中的使用的是非常多的,也是很多小伙伴想进入一线互联网公司需要掌握的核心技术体系。今天就以淘宝为例向大家简单介绍下服务端的高并发分布式架构是如何一步步演进的。好了,我们开始今天的主题吧。
特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径
1. 概述
本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。
特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径
2. 基本概念
在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:
以淘宝作为例子。在网站最初时,应用数量与用户数都较少,可以把Tomcat和数据库部署在同一台服务器上。浏览器往www.taobao.com发起请求时,首先经过DNS服务器(域名系统)把域名转换为实际IP地址10.102.4.1,浏览器转而访问该IP对应的Tomcat。
随着用户数的增长,Tomcat和数据库之间竞争资源,单机性能不足以支撑业务
3.2 第一次演进:Tomcat与数据库分开部署
数据库和Tomcat都能够水平扩展,可支撑的并发大幅提高,随着用户数的增长,最终单机的Nginx会成为瓶颈
3.8 第七次演进:使用LVS或F5来使多个Nginx负载均衡
由于瓶颈在Nginx,因此无法通过两层的Nginx来实现多个Nginx的负载均衡。图中的
-
监控设计。在设计阶段就要考虑监控的手段;
-
多活数据中心设计。若系统需要极高的高可用,应考虑在多地实施数据中心进行多活,至少在一个机房断电的情况下系统依然可用;
-
采用成熟的技术。刚开发的或开源的技术往往存在很多隐藏的bug,出了问题没有商业支持可能会是一个灾难;
-
资源隔离设计。应避免单一业务占用全部资源;
-
架构应能水平扩展。系统只有做到能水平扩展,才能有效避免瓶颈问题;
-
非核心则购买。非核心功能若需要占用大量的研发资源才能解决,则考虑购买成熟的产品;
-
使用商用硬件。商用硬件能有效降低硬件故障的机率;
-
快速迭代。系统应该快速开发小功能模块,尽快上线进行验证,早日发现问题大大降低系统交付的风险;
-
无状态设计。服务接口应该做成无状态的,当前接口的访问不依赖于接口上次访问的状态。