目录
一、单机架构
简介
工作原理
架构优缺点
相关软件
二、应用数据分离架构
简介
工作原理
架构优缺点
三、应用服务集群架构
简介
出现原因
工作原理
架构优缺点
相关软件
四、读写分离/主从分离架构
简介
工作原理
架构优缺点
相关软件
五、冷热分离架构
简介
架构工作原理
架构优缺点
相关软件
六、垂直分库架构
简介
架构工作原理
架构优缺点
相关软件
七、微服务架构
微服务出现的原因?
简介
架构工作原理
架构优缺点
相关软件
八、容器编排架构
容器编排架构出现原因
简介
架构工作原理
架构优缺点
相关软件
单机架构是指应用服务和数据库服务公用一台服务器,出现在互联网早期,访问量比较少,单机足以满足需求
以电子商城为例,可以看到通过应用(划分了多个模块)和数据库在单个服务器上协作完成业务运行,具体的,用户在浏览器中输入 www.123.com,首先经过 DNS 服务将域名解析成 IP 地址,随后浏览器访问该 IP 对应的应用服务,所访问到的都是同一个服务器
优点:部署简单,成本低。
缺点:存在严重的性能瓶颈,数据库和应用存在相互竞争资源。
Web 服务器软件:Tomcat、Netty、Nginx、Apache 等
数据库软件:MySQL、Oracle、PostgreSQL、SQL Server 等
应用服务和数据库服务使用不同的服务器,这是由于单机存在严重的资源竞争,导致站点变慢而出现的。
以电子商城为例,可以看到应用(划分为很多个模块)和数据库在各自的服务器上通过网络协作完成业务运行。具体的用户输入域名经过 dns 解析后找到对应的应用服务器(Tomcat服务),再去访问 MySQL 服务器,拿到数据后返回给应用服务,最后返回给你用户。
优点:成本相对可控、性能比单机有提升、数据库单独隔离,不会因为应用把数据库搞坏,有一定的容灾能力。
缺点:硬件成本变高、性能有瓶颈,无法应对海量并发。
在应用数据分离架构的基础上以集群的方式运作,并引入负载均衡(所有的用户请求会先经过负载均衡,再到服务器,当一个服务器接受请求过大时,负载均衡就会将请求分配到其他服务器上),控制集群平衡。
单个应用不足支持海量的并发请求,高并发的时候站点响应变慢。
以电子商城为例,可以看到应用不再是一个,而是变成了多个,并通过负载均衡来支持海量数据并发。
那么他是如何进行流量调度的呢?常见的有一下几种方式:
Round-Robin 轮询算法:即非常公平地将请求依次分给不同的应用服务器。
Weight-Round-Robin 轮询算法:为不同的服务器(比如性能不同)赋予不同的权
重(weight),能者多劳。
一致哈希散列算法:通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈 希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我 们平时遇到的专项客户经理服务。
优点:
缺点:
负载均衡软件:Nginx、HAProxy、LVS、F5 等。
在上一层架构上,数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些读的请求造成的,那么我们可以把读操作和写操作分开,具体的,将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以,数据库主机负责写操作,从机只负责读操作
以电子商城为例,可以看到数据库服务器不再是一个,而是变成了多个,数据库主机负责写操作,从机负责读操作,数据库主机通过复制将数据同步到从机
优点
缺点
MyCat、TDDL、Amoeba、Cobar 等类似数据库中间件等
在上一层架构,海量的请求导致数据库负载过高,站点响应再度变慢,那么就引入缓存,实行冷热分离,将热点数据放到缓存中快速响应。
以电子商城为例,可以看到多了缓存服务器,对于热点数据全部放到缓存中,不常用数据再去查询我们的数据库。
优点
缺点
Memcached、Redis 等缓存软件。
在冷热分离架构上,单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式,因此出现了垂直分库架构:数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构。
以电子商城为例,数据库是由多个主从库或者存储集群构成,支持分布式大规模并行处理。
优点
缺点
Greenplum、TiDB、Postgresql XC、HAWQ 等,商用的如南大通用的 GBase、 睿帆科技的雪球DB、华为的 LibrA 等。
微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。
以电子商城为例,一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,相互之间协作支持整个商城的应用。
优点
缺点
Spring Cloud、Dubbo
借助容器化技术(如docker)将应用/服务可以打包为镜像,通过容器编排工具(如k8s)来动态分发和部署镜像,服务以容器化方式运行
以电子商城为例,一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,每一个微服务打包到容器之中,相互协作来完成系统功能,通过容器编排工具完成部署运维。
优点
缺点
Docker、K8S