架构的发展是从单体架构,(垂直架构)分布式架构,SOA架构,再到微服务架构
开发架构体系发展
单体式架构
未做任何拆分的Javaweb程序
应用流量较小,一个应用将所有的功能代码部署在一起
减少开发,部署和维护的成本
分布式架构
在垂直架构 的基础上开发
抽取公共的模块,提高代码复用率
但是系统之间耦合性变得更高,调用关系更加复杂,难以维护
按照业务进行垂直划分,每一个业务都是单体应用,通过API调用
SOA架构
服务越来越多的时候,就需要一个调度中心对集群进行管理
SOA是一种面向服务的架构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或者消费服务,所以是分布式架构的一种
使用了治理中心解决了服务间调用的关系,保证了协议的协调
但是服务间会有依赖关系,一旦一个环节出错会影响较大(服务雪崩)
服务关系复杂,部署,运维困难
微服务(Micro Service)
微服务是一种SOA架构的进一步发展,更加彻底的对服务进行拆分
提高效率,每个服务与服务之间互不影响,
每一个服务都需要单独的进行部署
服务员子拆分,独立打包,部署和升级,保证每一个服务清晰的任务划分,利于扩展
其有着如下定义:
目前微服务做好的解决方案是SpringCloud和Dubbo
SpringCloud架构
依赖于SpringBoot,快速开发,持续交付和容易部署,组件众多
技术体系
Eureka
分为eureka-server和eureka-client,基于REST的服务发现组件
Ribbon
是一个用作负载均衡的组件
Feign
是一个声明式的Web Service客户端,是一个轻量级的http框架
Hystrix
提供了熔断器功能,能够阻止分布式系统中出现联动故障
Zuul
致力于网关解决方案的开源组件
Spring Gateway
Spring Cloud Gateway 旨在为微服务架构提供简单、 有效且统一的 API 路由管理方式。
Spring Config
提供外部配置支持
Bus
消息总线
OAuth2.0
标准的授权协议
Sleuth
springcloud为分布式提供的链路追踪的解决方案
常见微服务架构
Dubbo架构
Dubbo+Zookeeper+SpringBoot
配套的通信方式为RPC
注册中心使用Zookeeper/Redis
配置中心使用diamond
但是这一套架构对于容错降级和熔断,链路追踪等方面都需要自行实现处理,过于复杂
Springcloud
Springcloud 全家桶(Netflix)
配套使用restful作为通信方式
使用eureka/consul 作为注册中心
配置中心为config
断路器hystrix
网关zuul
分布式追踪系统 sleuth+zipkin
但是Netflix现在已经代码闭源,对于新的开发不再推荐使用该架构
SpringCloudAlibaba
一站式解决方案
springCloudAlibaba 作为新的微服务架构,在其中你都能找到对应Netflix的组件
其使用Nacos作为注册和配置中心
断路器使用Sentinel
链路追踪使用Skywalking
使用restful作为通信方式