1. 单体
单体应用架构可以理解为一个javaweb应用程序,包含表现层,业务层、数据层,即我们平常说的MVC模式。所有服务都在同一个war包中,部署在一个web容器中。
- 减少部署节点和成本
- 代码严重耦合、复杂性高
- 部署风险大,系统可用性低,部署速度逐渐变慢
- 扩展能力受限,无法按需伸缩
- 灵活性低,影响开发效率
产生的问题
随着用户的访问量持续增加,单台应用服务器已经无法满足需求。
解决办法:使用缓存改善性能、集群
高可用
保持服务的高度可用性
高性能
程序处理速度快,所占内存少,cpu低
高并发指标
响应时间:系统对请求做出响应的时间。
吞吐量:单位时间内处理的请求数量。
QPS:每秒响应请求数。
并发用户数:同时承载正常使用系统功能的用户数量。
高并发方式
提高系统并发能力的方式:垂直扩展与水平扩展。
垂直扩展:增强单机硬件性能、提升单机架构性能
水平扩展:只要增加服务器数量
2. 集群
集群模式是不同服务器部署同一套服务对外访问,实现服务的负载均衡。
区别集群的方式是根据部署多台服务器业务是否相同。
注:集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。
一般配置Nginx的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量。
应用集群
支持高并发、支持高可用。
数据库集群
读写分离:主从数据库进行数据同步,主数据库进行增删改操作,从数据库进行读操作。
搜索引擎缓解数据库的访问压力:solr elasticsearch whoosh
引入缓存机制减轻数据库的访问压力:redis
分库分表:mycat sharding-jdbc drds
用户规模越来越大,发布地域越来越广,地域网络环境差别很大,面临问题,使用
反向代理和CDN加速。既可以加快用户访问的响应速度,又能减轻后端服务器的负载压力。
3.垂直应用架构
当访问量逐渐增加,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
按照功能将单体项目拆分成多个互不相干的小应用。每个应用都是独立部署的项目。
4.分布式DSA
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
分布式结构就是将一个完整的系统,按照业务功能拆分成一个个独立子系统,业务模块分别部署到不同的机器上,各业务模块之间通过RPC方式通信。
区别分布式的方式是根据不同机器不同业务。
分布式需要做好事务管理
- 系统间耦合度降低,系统更易于扩展
- 服务复用性更高,开发效率提升
- 解决网站高并发
5. SOA
SOA (Service-Oriented Architecture)是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口,能够以定义好的顺序调用这些服务来形成业务流程。
ESB企业服务总线 是一根管道,用来连接各个服务节点。为了集 成不同系统,不同协议的服务,ESB 做了消息的转化解释和路由工作,让不同的服务互联互通.
使用ESB (企业服务总线)作为消费方和提供方的服务中介;消费方不再和提供方直接交互,通 过总线转发请求,消费方无需知道提供方发生的变化,只需要向总线发出与消费方交互的请求, 由总线找到消费方。
设计原则
- 明确定义的接口
- 自包含和模块化
- 粗粒度
- 松耦合
- 互操作性、兼容和策略声明
6. 微服务MSA
微服务顾名思义,就是很小的服务,所以它属于面向服务架构的一种。
微服务是SOA思想的一种提炼,是一种为经过良好架构设计的SOA解决方案,是面向服务的交付方案。
微服务的设计是为了不因为某个模块升级和BUG影响现有系统业务,业务系统需要彻底组件化和服务化。
微服务架构一定是分布式架构。一个大型复杂的软件应用系统应该由一个或多个微服务组成。系统中的各个微服务之间是松耦合的,各个微服务可被独立部署,都有自己独立的进程,可以有自己的数据库,而且服务可以使用不同的技术加以实现。
设计原则
- 单一职责原则
- 服务自治原则
- 轻量级通信原则
- 接口明确原则
优缺点
- 运维要求较高、复杂度高、性能监控麻烦
- 易于开发和维护、技术异构
- 按需伸缩、易于扩展
- 局部修改容易部署,启动较快
微服务与分布式细微差别是微服务应用不一定是分散在多个服务器上,也可以是同一个服务器。
SOA是重ESB,微服务是轻网关。
Dubbo是SOA时代的产物,SpringCloud是微服务时代的产物