单机架构
1、简介
应用服务和数据库服务共用一台服务器
2、出现原因
出现在互联网早期,访问量比较小,单机足以满足需求
3、架构工作原理
单机架构通过应用(划分了多个模块)和数据库在单个服务器上协作完成业务运行,具体表现为,用户在浏览器中输入 www.baidu.com,首先经过 DNS 服务将域名解析成 IP 地址并返回,随后浏览器访问(实际访问的是该 IP 对应的应用服务),所访问到的都是同一个服务器
4、架构优缺点
优点
部署简单,成本低
缺点
存在严重的性能瓶颈;数据库和应用存在相互竞争资源的现象
5、相关软件
Web 服务器软件:Tomcat、ApacheApache 、Netty、Nginx、Resin等
数据库软件:MySQL、DBeaver、Oracle、PostgreSQL、SQL Server 等
应用数据分离架构
1、简介
应用服务和数据库服务使用不同的服务器
2、出现原因
单机存在严重的资源竞争,导致站点变慢
3、架构工作原理
应用(划分为很多个模块)和数据库在各自的服务器上通过网络协作完成业务运行。具体的用户输入域名经过 dns 解析后找到对应的应用服务器(Tomcat服务),再去访问 MySQL 服务器,拿到数据后返回给应用服务,最后返回给用户
4、优缺点
优点
成本相对可控;性能相比单机架构有所提升;数据库单独隔离,不会因为应用把数据库搞坏,具有一定的容灾能力
缺点
硬件成本变高;性能有瓶颈,无法应对海量并发
应用服务集群架构
1、简介
在应用数据分离架构的基础上以集群的方式运作,引入决策层(负载均衡),应用以集群方式运作
2、出现原因
单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢
3、架构工作原理
应用不再是一个,而是变成了多个,并通过负载均衡来支持海量数据并发。
4、优缺点
优点
应用服务高可用:应用满足高可用,不会一个服务出问题整个站点挂掉;
应用服务具备一定的高性能:如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应;
应用服务有一定扩展能力:支持横向扩展
缺点
数据库成为性能瓶颈,无法应对数据库的海量查询;
数据库是单点,没有高可用;
运维工作增多,扩展后运维部署工作增多,需要开发对应的工具应对快速部署;
硬件成本较高
5、相关软件
负载均衡软件:Nginx、HAProxy、LVS、F5 等
读写分离/主从分离架构
1、简介
把读操作和写操作分开,将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从、一主多从都可以,数据库主机负责写操作,从机只负责读操作
2、出现原因
数据库成为瓶颈,而互联网应用一般读多写少,数据库承载压力大,主要是由这些都的请求造成的,因此我们可以将读操作和写操作分开
3、架构工作原理
数据库服务器不再是一个,而是变成了多个,数据库主机负责写操作,从机负责读操作,数据库主机通过复制将数据同步到从机
4、架构优缺点
优点
数据库的读取性能提升;
读取被其他服务器分担,写的性能简介提升;
数据库有从库,数据库的可用性提高了
缺点
热点数据的频繁读取导致数据库负载很高
当同步挂掉,或者同步延迟比较大时,写库和读库的数据不一致;
服务器成本需要进一步增加
5、相关软件
MyCat、TDDL、Amoeba、Cobar 等类似数据库中间件等
冷热分离架构
1、简介
引入缓存,实行冷热分离,将热点数据放到缓存中快速响应。
2、出现原因
海量的请求导致数据库负载过高,站点响应再度变慢
3、架构工作原理
多了缓存服务器,对于热点数据全部放到缓存中,不常用数据再去查询我们的数据库。
4、架构优缺点
优点
大幅降低对数据库的访问请求,性能提升非常明显
缺点
带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题;
服务器成本需要进一步增加;
业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再度成为系统瓶颈。
5、相关软件
Memcached、Redis 等缓存软件
垂直分库架构
1、简介
数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库架构
2、出现原因
在冷热分离架构上,单机的写库会逐渐会达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库表天然支持分布式
3、架构工作原理
数据库是由多个主从库或者存储集群构成,支持分布式大规模并行处理
4、优缺点
优点
数据库吞吐量大幅提升,不再是瓶颈
缺点
跨库join、分布式事务等问题,这些需要对应的去进行解决,目前的mpp都有对应的解决方案;
数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布
5、相关软件
分布式数据库:Greenplum、TiDB、Postgresql XC、HAWQ 等,商用的如南大通用的 GBase、 睿帆科技的雪球DB、华为的 LibrA 等。
微服务架构
1、简介
微服务是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代。
2、出现原因
扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统;
持续开发困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本;
不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作;
不灵活:无法使用不同的技术构建单体应用程序;
代码维护难:所有功能耦合在一起,新人不知道何从下手。
3、架构工作原理
一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,相互之间协作支持整个商城的应用。
4、优缺点
优点
灵活性高:服务独立测试、部署、升级、发布;
独立扩展:每个服务可以各自进行扩展;
提高容错性:一个服务问题并不会让整个系统瘫痪;
新技术的应用容易:支持多种编程语言
缺点
运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难;
资源使用变多:所有这些独立运行的微服务都需要需要占用内存和 CPU;
处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位。
5、相关软件
Spring Cloud、Dubbo
容器编排架构
1、简介
借助容器化技术(如docker)将应用/服务可以打包为镜像,通过容器编排工具(如k8s)来动态分发和部署镜像,服务以容器化方式运行
2、出现原因
微服务拆分细,服务多部署工作量大,而且配置复杂,容易出错;
微服务数量多扩缩容麻烦,而且容易出错,每次缩容后再扩容又需要重新配置服务对应的环境参数信息;
微服务之间运行环境可能冲突,需要更多的资源来进行部署或者通过修改配置来解决冲突
3、架构工作原理
一个商城应用拆分成了多个微服务,如用户服务、交易服务和商品服务,每一个微服务打包到容器之中,相互协作来完成系统功能,通过容器编排工具完成部署运维
4、优缺点
优点
部署、运维简单快速:一条命令就可以完成几百个服务的部署或者扩缩容;
隔离性好:容器与容器之间文件系统、网络等互相隔离,不会产生环境冲突;
轻松支持滚动更新:版本间切换都可以通过一个命令完成升级或者回滚
缺点
技术栈变多,对研发团队要求高;
机器还是需要公司自身来管理,在非大促的时候,还是需要闲置着大量的机器资源来应对大促,机器自身成本和运维成本都极高,资源利用率低,可以通过购买云厂商服务器解决。
5、相关软件
Docker、K8S