做自媒体搬运文章的网站,vs2010 网站开发,包头教育平台网站建设,微信 wordpress php7文章目录 前言常见概念八大架构演进过程单机架构应用数据分离架构应用服务集群架构读写/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构 前言
博主最近在学中间件#xff0c;理解互联网应用架构的演进过程#xff0c;对于理解中间件在整体结构中的定位是十分重… 文章目录 前言常见概念八大架构演进过程单机架构应用数据分离架构应用服务集群架构读写/主从分离架构冷热分离架构垂直分库架构微服务架构容器编排架构 前言
博主最近在学中间件理解互联网应用架构的演进过程对于理解中间件在整体结构中的定位是十分重要的
常见概念
应用Application/系统System 完成某种服务的一个/一组程序
模块Module/组件Component 系统中一个独立的功能称之为一个组件
分布式Distributed 系统中的模块被部署到多个服务器上这些模块协同完成一系列工作这样的系统叫分布式系统
集群Cluster 系统中的模块被部署到多个服务器上完成特定目标的一个/多个模块被称为集群
主Master/从Slave 集群中承担更多职责的程序被称为主承担附属职责的程序被称为从。主节点需要向从节点同步数据
中间件Middleware 和业务无关的服务功能更加通用。1. 数据库 2. 缓存 3. 消息队列
八大架构演进过程
单机架构
将所有服务应用服务数据服务部署在同一台服务器上
用户访问应用服务应用服务根据用户需求访问数据库服务并将得到的数据返回给用户 由于互联网早期应用/web访问量小所以单机足以满足需求
优点
部署简单成本低 缺点存在性能瓶颈用户无限增长但资源有限数据库和应用竞争资源
应用数据分离架构
由于单机架构的性能缺陷当用户量增多时网站的响应速度变慢 此时演变出了应用数据分离架构将应用服务和数据服务部署在不同服务器上 应用服务和数据服务间的交互通过网络完成
具体来说使用cpp-httplib/Spring编写应用程序应用服务接收用户请求并将其转换成数据库语句接着将语句通过数据库客户端与网络发送给数据库服务端服务端完成数据操作
对于应用服务器可以适当增加CPU、内存资源因为业务的逻辑将占用更多的CPU和内存 而对于存储服务器可以适当增加磁盘资源甚至使用SSD固态硬盘提高数据的读写速度
优点
性能相比单机架构有所提升数据库和应用分离提高了容灾能力
缺点
硬件成本变高无法应对海量并发
应用服务集群架构
当用户的请求量增加应用服务无法及时处理这些海量请求导致响应时长过长用户体验差 此时增加应用服务器数量横向扩展在应用服务和数据服务之间引入负载均衡决策层使应用服务以集群的方式运作。引入负载均衡后每台应用服务器承担相同的压力
负载均衡器对于请求的承担能力要远大于应用服务器因为负载均衡器只涉及到分配算法不需要处理请求
这一架构涉及到两个软件设计哲学
一个设备扛不住就多加几个设备没有什么问题是加一层无法解决的
当并发量越来越大时Nginx扛不住了那就多用几个Nginx Nginx一多无法实现Nginx之间的负载均衡再引入决策层使用LVS/F5实现Nginx的负载均衡 LVS/F5也扛不住了那就多个几个LVS/F5 LVS/F5一多无法实现负载均衡直接修改DNS集群添加多个IP地址使之作为我们的负载均衡 DNS也扛不住修改用户电脑的host文件直接绕过DNS解析
优点
应用服务高可用不会因为一个服务器出问题整个站点挂掉服务具备高性能应用服务可以横向扩展
缺点
数据服务成为瓶颈运维工作增多维护成本增加硬件成本高
读写/主从分离架构
y应用服务能够处理海量请求时数据服务成为性能瓶颈 将数据服务进行读写/主从分离主库负责写操作从库负责读操作。主从数据库使用数据同步技术保证数据一致
为什么要读写分离互联网应用一般读多写少部署多个从数据库负责读操作可以有效地提高响应速度
但是应用服务如何区分读写请求并将其发送给不同的数据库因此在应用服务和数据服务之间引入一层中间层该中间层能够识别读写流量被分流负载均衡给响应的数据服务。该中间层对应的软件MyCatTDDL
优点
读写分离后数据服务的读写能力都得到提升数据库拥有从库备份可用性容灾能力提升
缺点
同步服务延迟高或者挂掉时导致读库和写库数据不一致成本进一步地增加热点数据的频繁读取导致数据库的负载率很高
冷热分离架构
互联网应用中20%的数据就能应对80%的请求这些数据被称为热点数据 对于热点数据如果能做到更快的读写那么响应时长将大大减少 所以引入缓存库将热度高的数据放入缓存库中由应用服务判断数据是否为热点数据是否需要访问主从数据库 缓存库的代表为redis
优点
大幅降低数据库的访问请求性能提高明显
缺点
带来了缓存一致性缓存击穿缓存失败缓存雪崩等问题成本进一步增加数据不断增多时单个数据库的大小太大查询速度降低导致数据库再次成为性能瓶颈
垂直分库架构
冷热分离架构主要是为了应对更高的请求量但数据服务器的容量有限当数据量越来越大时存储是一个问题如何高效地查询也是一个问题
若库太大将数据库进行拆分每个数据服务器存储一个/一部分的数据库分库 若表太大将表进行水平拆分分表将不同表的列属性进行拆分根据类型属性将字段存储到不同的数据集群中每个数据集群都有一个主库与多个从库查询时不会干涉其他从库。使用MyCat/TDDL中间件能够自动分库/分表
如电商网站将用户消息订单消息产品消息分割成不同的数据库每个数据库包含特定类型的数据 典型分布式数据库Greenplum、TiDB、Postgresql XC、HAWQ 等
优点
提高了数据吞吐量数据服务不再是瓶颈 缺点处理事务的难度增加数据服务和应用服务耦合应用服务的修改将导致整体服务的重新部署
微服务架构
之前的所有架构一个应用服务器负责很多业务这将导致一台服务器的代码变得复杂同时耦合性增加。为了方便代码的维护需要将负责复杂业务的服务器进行拆分拆分成功能单一的更小的服务器微服务。同时将开发人员进行分组以更好地开发与维护服务 微服务是一种架构风格按照业务模块来划分代码使得每个模块的职责更加清晰相互之间的迭代升级能够做到独立
之前的架构存在的问题
扩展性差修改一点程序就需要重新构建代码持续开发困难重新构建代码导致无法轻松地发布版本不可靠系统中的一个功能出现bug导致整个系统出问题不灵活无法使用不同的技术构建单体应用程序代码维护难功能耦合在一起难以阅读
为解决以上问题使用了微服务架构 优点
灵活性高部署时弹性大独立扩展提高容错性容易引入新技术功能复用
缺点
运维复杂度高例如环境冲突问题系统的性能下降独立出来的每个模块需要通过网络进行通信网络的速度比磁盘还慢处理故障困难一个请求困难调用了多个微服务出错难以定位
容器编排架构
借助容器化技术(docker)将应用/服务打包为镜像通过容器编排工具(如k8s)来动态方法和部署镜像服务通过容器化方式运行 出现原因
微服务拆分太细服务的部署工作量大配置复杂容易出错微服务之间的运行环境可能冲突需要更多的资源或者修改配置来解决冲突
优点
隔离性好不会产生环境冲突部署、运维简单k8s的容器编排支持滚动更新版本间的升级与回滚通过命令即可完成 缺点技术栈多学习成本高服务器成本高