docker技术框架
1.单机架构
简介:应用服务与数据库服务共用一台服务器
出现原因:互联网早期,访问量比较小,单机足以满足需求
架构工作原理:以电子商城为例,可以看到通过应用(划分了多个模块)和数据库在单个服务器上协作完成业务运行
技术案例如下:简单来说就是,用户通过浏览器和app访问域名,dns解析域名返回网址,
这样用户就找到了服务器的位置,随后请求也就到了服务器的应用层,应用层查询数据库后将结构返回给浏览器呈现给用户
单机架构的优点是部署简单成本低,缺点是存在严重的性能瓶颈并且数据库与应用相互竞争资源
2.应用数据分离架构
简介:应用服务和数据库服务使用不同的服务器
出现原因:单机存在严重的资源竞争,导致站点变慢
架构工作原理:以电子商城为例,可以看到应用(划分了多个模块)和数据库在各自的服务器上通过网络协作完成业务运行。
技术案例如下,和上面的单机架构很相似,只是应用不能直接查询数据库了,需要通过网络来查询数据库,其他的都是差不多的。
应用数据分离架构的优点是成本相对可控、性能相比单机有提升、数据库单独隔离不会因为应用把数据库搞坏,有一定的容灾能力。缺点是硬件成本变高,性能有瓶颈,无法应对海量并发
3.应用服务集群架构
简介:引入负载均衡,应用集群方式运作
出现原因:单个应用不足以支持海量的并发请求,高并发的时候站点响应变慢
架构工作原理:以电子商城为例,可以看到应用不再是一个,而是变成了多个,通过负载均衡来支持海量并发
技术案例如下:其实这里变化的是通过负载均衡将海量的请求分给不同的应用完成海量并发
这里的LVS/F5就是负载均衡技术,Nginx可以理解为一个前台程序可以处理静态请求并将动态请求转发给后端。
应用服务集群架构的优点:
1.应用服务高可用:应用满足高可用,不会一个服务出问题导致整个站点挂掉
2.应用服务具备一定的高性能:如果不访问数据库,应用相关处理通过扩展可以支持海量请求快速响应
3.应用服务有一定扩展能力:支持横向扩展
应用服务集群架构的缺点:
1.数据库成为性能瓶颈,无法应对数据库的海量查询
2.数据库是单点,没有高可用
3.运维工作增多,扩展后部署运维工作增多,需要开发对应的工具应对快速部署
4.硬件成本较高
4.读写分离/主从分离架构
简介:将数据库读写操作分散到不同的节点上,数据库服务器搭建主从集群,一主一从,一主多从都可以,数据库主机负责写操作,从机只负责读操作。
出现原因:数据库成为瓶颈,而互联网一般是读多写少,数据库承载压力大,主要由这些读的请求造成的,那么我们可以把读操作和写操作分开。
架构工作原理:以电子商城为例,可以看到数据库服务器不再是一个,而是变成多个,数据库主机负责写操作,从机负责读操作,数据库主机通过复制将数据同步到从机
技术案例如下:其实相对于应用服务集群架构,主从分离只是在数据库层进行了横向扩展,多余来到的请求进行分类打到不同的数据库上。
5.冷热分离架构
简介:引入缓存,实行冷热分离,将热点数据放到缓存(redis的功能)中快速响应
出现原因:海量的请求导致数据库负载过高,站点响应再度变慢
架构工作原理:以电子商城为例,可以看到多了缓存服务器,对于热点数据全部放到缓存中,不常用的数据再去查找我们的数据库。
技术案例:说白了就是二八原则,20%的热点数据可以满足80%的需求,而redis就是存放这20%数据的地方
冷热分离架构的优点:大幅降低对数据库的访问请求,性能提升非常明显
冷热分离架构的缺点:
1.带来了缓存一致性,缓存击穿,缓存失效,缓存雪崩等问题
2.服务器成本需要进一步增加
3.业务体量支持变大后,数据不断增加,数据库单库太大,单个表体量也太大,数据查询会很慢,导致数据库再次成为系统瓶颈
6.垂直分库架构
简介:数据库的数据被拆分,数据库数据分布式存储,分布式处理,分布式查询,也可以理解为分布式数据库框架
出现原因:单机的写库会逐渐达到性能瓶颈,需要拆分数据库,数据表的数据量太大,处理压力太大,需要进行分表,为降低运维难度,业界逐渐研发了分布式数据库,库天然支持分布式
架构工作原理:以电子商城为例,数据库是由多个主从库或者存储集群构成,支持分布式大规模并行处理
技术案例如下:相对于冷热分离架构其实就是在数据库层使用集群技术或者多个主从库
优点:数据库吞吐量大量提升,不再是瓶颈
缺点:
1.跨库join、分布式事务等问题,这些需要对应的去进行解决,目前的mpp都有对应的解决方案。
2.数据库和缓存结合目前能够抗住海量的请求,但是应用的代码整体耦合在一起,修改一行代码需要整体重新发布
7.微服务架构
简介:微服务架构是一种架构风格,按照业务板块来划分应用代码,使单个应用的职责更清晰,相互之间可以做到独立升级迭代
出现原因:
1.扩展性差:应用程序无法轻松扩展,因为每次需要更新应用程序时,都必须重新构建整个系统
2.持续开发困难:一个很小的代码改动,也需要重新部署整个应用,无法频繁并轻松的发布版本。
3.不可靠:即使系统的一个功能不起作用,可能导致整个系统无法工作
4.不灵活:无法使用不同的技术构建单体应用程序
5.代码维护难:所有功能耦合在一起,新人不知道从何下手
架构工作原理:以电子商城为例,一个商城应用查分成了多个微服务,如用户服务、交易服务和商品服务,相互之间协作支持整个商城的应用
技术案例:
优点:
1.灵活性高:服务独立测试、部署、升级、发布
2.独立扩展:每个服务可以各自进行扩展
3.提高容错性:一个服务问题不会让真个系统瘫痪
4.新技术的应用容易:支持多种变成语言
缺点:
1.运维复杂度高:业务不断发展,应用和服务都会不断变多,应用和服务的部署变得复杂,同一台服务器上部署多个服务还要解决运行环境冲突的问题,此外,对于如大促这类需要动态扩缩容的场景,需要水平扩展服务的性能,就需要在新增的服务上准备运行环境,部署服务等,运维将变得十分困难
2.资源使用变多:所有独立运行的微服务都需要占用内存和CPU
3.处理故障困难:一个请求跨多个服务调用,需要查看不同服务的日志完成问题定位