文章目录
一、应用架构的发展
应用是可独立运行的程序代码,并对外提供相应的业务功能。软件架构类型一般分为三种:业务架构
、应用架构
、技术架构
。业务架构决定应用架构,技术架构支持应用架构。
架构的发展历程是从单体架构、分布式架构、SOA架构再到微服务架构。
二、单体应用架构
单体架构在JAVA领域可以理解为平时发布的Java Web应用程序,包含表现层、业务层、数据访问层。从Controller到Service再到Dao层,所有的业务功能都在同一个应用中。开发完毕之后就会出现一个超大型的jar或是war包。
单体应用简单架构图
单体架构优点
- 易于开发:使用开发工具可以在短时间内开发出单体应用。
- 易于调试:不需要依赖外部接口,测试可以节约很多时间。
- 易于部署:只要将应用部署到运行环境即可。
单体架构缺点
- 灵活度不够:因为软件存在相互依赖,修改一处可能需要其他人员配合,只有大家都完成了才能完成程序部署,降低了团队的灵活性。
- 系统启动慢:一个应用程序包含所有功能,设计需要启动的模块过多,导致程序启动时间延迟。
- 系统扩展性能比较差:软件功能越多,修改其中一个功能可能影响到其他功能的可能性越大,在修改的时候就需要从全局考虑。从全局去添加,而牵一发而动全身。
三、分布式架构
分布式架构特点:
- 对等性:分布式系统中计算机没有主从之分,即没有控制整个系统的主机也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的。
副本
是分布式系统常用概念之一,指的是系统对数据和服务提供的一种冗余方式,副本是指在不同的节点提供一样的服务。 - 分布性:服务在空间中随意分布,同时,机器的分布情况也会随时变动。
- 并发性:网络服务过程中,并发性操作是非常常见的行为。在并发的时候访问共享资源是分布式设计中很大的挑战。
- 缺乏全局时钟:服务分布在随机的空间上,这些服务间进行相互通信,很难定义两个时间究竟是谁先谁后的,原因是分布式系统缺乏一个全局的时钟序列控住。
- 故障总会发生:组成分布式系统的所有服务,都可能发生任何形式的故障。增大了故障的概率:如网络、CPU、硬盘等异常。
面向服务SOA架构
面向服务的架构是一种软件体系结构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或消费服务,所以也是一种分布式架构。
SOA是不同业务建立不同的服务,服务之间的数据交换粗粒度可以通过服务接口接口分级,这样松散磨合提供软件的可重用性,也可让业务逻辑变得可组合,并且每个服务可以根据使用情况做出合理的分布式部署,从而让服务变得规范、高性能、高可用。
SOA架构的优点
- 模块化: 应用拆分成不同的模块,使用接口通信,降低模块之间的耦合度。
- 拆分成若干个子项目,不同的团队负责不同的子项目。
- 新增功能:只需要添加一个子项目,调用其他系统接口即可。
- 不同的应用可以部署在自己想要部署的环境。
SOA架构的缺点
- 系统之间远程调用,接口开发增加工作量。
技术难点
- 系统间调用接口的编写,需要自己完成全套调用(服务定位,接口协议,网络服务、负载均衡、熔断机制)
- 服务的管理:服务的上下线导致其他应用调用的时候服务不可用。
- 服务配置管理:服务分布在不同的机器上、且服务众多。需要统一管理配置文件。
- 链路监控:一个请求经过哪些服务的监控。
- 网关:统一服务路口和服务转发。
微服务架构
微服务架构在某种程度上是SOA架构的继续发展的下一步,提供各种基础组件服务,从而使开发人只需要关注业务开发。
对于一个大型复杂的业务系统,它的业务功能可以查分为多个相互独立的微服务,各个微服务之间是松耦合的,通过各种远程协议进行同步、异步通信,各个微服务均可独立不是、扩/缩容以及升/降级。
微服务架构技术选型如下
Spring Cloud | Dubbo | Motan | MSEC | 其他 | |
---|---|---|---|---|---|
功能 | 微服务完整方案 | 服务治理框架 | 服务治理框架 | 服务开发运维框架 | 略 |
通信方式 | REST/Http | RPC协议 | RPC/Hessian2 | Protocol buffer | grpc, thrift |
服务发现/注册 | Eureka(AP) | ZK, Nacos | ZK,Consul | 服务发现 | Etcd |
负载均衡 | Ribbion | 客户端负载 | 客户端负载 | 客户端负载 | Nginx+Lua |
容错机制 | 6种容错策略 | 6种容错策略 | 2种容错策略 | 自动容错 | Keepalived、HeartBeat |
熔断机制 | Hystrix | 无 | 无 | 提供过载保护 | 无 |
配置中心 | Spring Cloud Config | Nacos | 无 | 无 | Apollo,Nacos |
网关 | Gateway, Zull | 无 | 无 | 无 | 自研、Kong |
服务监控 | Hystrix + Turbine | Dubbo+Monitor | 无 | Monitor | ELK |
链路监控 | Sleuth + Zipkin | 无 | 无 | 无 | Pinpoint |
多语言 | Rest支持多语言 | Java | Java | Java, C++, PHP | Java, PHP, Node.js |
社区活跃 | 高 | 高(阿里) | 一般 | 未知 | 略 |
微服务解决方案
现有的微服务架构技术,都为我们提供了完整的技术解决方案。
1. 基于Spring Cloud 的微服务解决方案
Spring Cloud的技术选型可以继承Spring Boot和Spring中的技术和原理,且Spring Cloud融合了很多优秀的组件。
组件 | 方案1 | 方案2 | 方案3 |
服务发现 | Eureka | Consul | etcd、Nacos(阿里) |
共有组件 | 服务间调用组件Feign、负责均衡组件Ribbon、熔断器Hystrix | ||
网关 | Gateway:高性能,Zull:性能低 | 自研网关中间件 | |
配置中心 | Spring Cloud Config、Apollo(携程)、Nacos(阿里) | ||
全链路监控 | Zikpin、Pinpoint、Skywalking | ||
搭配使用 | 分布式事物、Spring Cloud与DDD、gRPC |
2. 基于Dubbo实现微服务解决方案
Dubbo是阿里开源基于JAVA实现的分布式服务治理框架,专注于RPC领域。并积极适配其他开源解决方案。
Nacos:定位是一个更易于帮助构建云原生应用的动态发现、配置和服务管理平台。
基于Dubbo的解决方案是:Dubbo+Nacos+其他。