文章目录

  • 一、应用架构的发展
  • 二、单体应用架构
  • 单体架构优点
  • 单体架构缺点
  • 三、分布式架构
  • 面向服务SOA架构
  • SOA架构的优点
  • SOA架构的缺点
  • 技术难点
  • 微服务架构
  • 微服务解决方案
  • 1. 基于Spring Cloud 的微服务解决方案
  • 2. 基于Dubbo实现微服务解决方案



一、应用架构的发展

应用是可独立运行的程序代码,并对外提供相应的业务功能。软件架构类型一般分为三种:业务架构应用架构技术架构。业务架构决定应用架构,技术架构支持应用架构。
架构的发展历程是从单体架构、分布式架构、SOA架构再到微服务架构。

二、单体应用架构

单体架构在JAVA领域可以理解为平时发布的Java Web应用程序,包含表现层、业务层、数据访问层。从Controller到Service再到Dao层,所有的业务功能都在同一个应用中。开发完毕之后就会出现一个超大型的jar或是war包。

单体应用简单架构图

应用架构规划设计 应用架构 功能架构_java

单体架构优点

  1. 易于开发:使用开发工具可以在短时间内开发出单体应用。
  2. 易于调试:不需要依赖外部接口,测试可以节约很多时间。
  3. 易于部署:只要将应用部署到运行环境即可。

单体架构缺点

  1. 灵活度不够:因为软件存在相互依赖,修改一处可能需要其他人员配合,只有大家都完成了才能完成程序部署,降低了团队的灵活性。
  2. 系统启动慢:一个应用程序包含所有功能,设计需要启动的模块过多,导致程序启动时间延迟。
  3. 系统扩展性能比较差:软件功能越多,修改其中一个功能可能影响到其他功能的可能性越大,在修改的时候就需要从全局考虑。从全局去添加,而牵一发而动全身。

三、分布式架构

分布式架构特点:

  1. 对等性:分布式系统中计算机没有主从之分,即没有控制整个系统的主机也没有被控制的从机,组成分布式系统的所有计算机节点都是对等的。副本是分布式系统常用概念之一,指的是系统对数据和服务提供的一种冗余方式,副本是指在不同的节点提供一样的服务。
  2. 分布性:服务在空间中随意分布,同时,机器的分布情况也会随时变动。
  3. 并发性:网络服务过程中,并发性操作是非常常见的行为。在并发的时候访问共享资源是分布式设计中很大的挑战。
  4. 缺乏全局时钟:服务分布在随机的空间上,这些服务间进行相互通信,很难定义两个时间究竟是谁先谁后的,原因是分布式系统缺乏一个全局的时钟序列控住。
  5. 故障总会发生:组成分布式系统的所有服务,都可能发生任何形式的故障。增大了故障的概率:如网络、CPU、硬盘等异常。

面向服务SOA架构

面向服务的架构是一种软件体系结构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或消费服务,所以也是一种分布式架构。
SOA是不同业务建立不同的服务,服务之间的数据交换粗粒度可以通过服务接口接口分级,这样松散磨合提供软件的可重用性,也可让业务逻辑变得可组合,并且每个服务可以根据使用情况做出合理的分布式部署,从而让服务变得规范、高性能、高可用。

SOA架构的优点

  1. 模块化: 应用拆分成不同的模块,使用接口通信,降低模块之间的耦合度。
  2. 拆分成若干个子项目,不同的团队负责不同的子项目。
  3. 新增功能:只需要添加一个子项目,调用其他系统接口即可。
  4. 不同的应用可以部署在自己想要部署的环境。

SOA架构的缺点

  1. 系统之间远程调用,接口开发增加工作量。

技术难点

  1. 系统间调用接口的编写,需要自己完成全套调用(服务定位,接口协议,网络服务、负载均衡、熔断机制)
  2. 服务的管理:服务的上下线导致其他应用调用的时候服务不可用。
  3. 服务配置管理:服务分布在不同的机器上、且服务众多。需要统一管理配置文件。
  4. 链路监控:一个请求经过哪些服务的监控。
  5. 网关:统一服务路口和服务转发。

微服务架构

微服务架构在某种程度上是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+其他。