一、Spring Cloud全家桶

 

        spring cloud是由若干个框架的集合,包括spring-cloud-config、spring-cloud-bus等,提供了服务治理、服务网关、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。

        spring cloud 全家桶有spring cloud Alibaba全家桶和Spring Cloud Netflix全家桶。

Spring Cloud

官方

Spring Cloud

NetFlix

Spring Cloud Zookeeper

Spring Cloud

       Consul

  Spring Cloud

      Alibaba

服务注册/发现

-

Eureka

Zookeeper

Consul

Nacos

分布式配置

Spring Cloud Config

Archarius

Zookeeper

Consul

Nacos

API网关

Spring Cloud Gateway

Zuul

-

-

Dubbo PROXY

服务熔断限流

Hystrix

-

-

-

Sentinel

服务调用

OpenFeign

RestTemplate

Feign

-

-

Dubbo RPC

负载均衡

-

Ribbon

Dubbo LB

分布式事务

-

-

-

-

Seata

二、Spring Cloud Alibaba组件

springcloudalibaba多模块搭建 springcloudalibaba五大组件_客户端

三、Spring Cloud Netflix的五大组件

1、Eureka

作用:实现服务治理(服务注册与发现

简介:Spring Cloud Eureka是Spring Cloud Netflix项目下的服务治理模块。

由两个组件组成:Eureka服务端和Eureka客户端。

Eureka服务端用作服务注册中心。支持集群部署

Eureka客户端是一个java客户端,用来处理服务注册与发现。

在应用启动时,Eureka客户端向服务端注册自己的服务信息,同时将服务端的服务信息缓存到本地。客户端会和服务端周期性的进行心跳交互,以更新服务租约和服务信息。

2、Ribbon

作用:Ribbon,主要提供客户侧的软件负载均衡算法。

简介:Spring Cloud Ribbon是一个基于HTTP/TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

注意看上图,关键点就是将外界的rest调用,根据负载均衡策略转换为微服务调用。Ribbon有比较多的负载均衡策略,以后专门讲解。

3、Hystrix

作用:断路器,保护系统,控制故障范围

简介:为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。

4、Zuul

作用:api网关,路由,负载均衡等多种作用

简介:类似nginx,反向代理的功能,不过netflix自己增加了一些配合其他组件的特性。

在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务。当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端。

5、Config

作用:配置管理

简介:SpringCloud Config提供服务器端和客户端。服务器存储后端的默认实现使用git,因此它轻松支持标签版本的配置环境,以及可以访问用于管理内容的各种工具。

这个还是静态的,得配合Spring Cloud Bus实现动态的配置更新。

四、Nacos与Eureka比较

(1)功能差异

模块

Nacos

Eureka

说明

注册中心



服务治理基本功能,负责服务中心化注册

配置中心


Eureka需要配合Config实现配置中心,且不提供管理界面

动态刷新


Eureka需要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长连接实时推送

可用区AZ



对服务集群划分不同区域,实现区域隔离,并提供容灾自动切换

分组


Nacos可用根据业务和环境进行分组管理

元数据



提供服务标签数据,例如环境或服务标识

权重


Nacos默认提供权重设置功能,调整承载流量压力

健康检查



Nacos支持由客户端或服务端发起的健康检查,Eureka是由客户端发起心跳

负载均衡



均提供负责均衡策略,Eureka采用Ribion

管理界面


Nacos支持对服务在线管理,Eureka只是预览服务状态

(2)部署安装

模块

Nacos

Eureka

说明

MySql


Nacos需要采用MySql进行数据进行持久化

MQ


Eureka需要采用MQ进行配置中心刷新

配置中心


Eureka结合Config或者Consul实现配置中心

配置文件

在线编辑

本地文件或者Git远程文件

Eureka结合Config或者Consul

集群



Nacos需要配置集群ip再启动

(3)稳定及扩展性

模块

Nacos

Eureka

说明

版本

1.0.0

1.9.9

Eureka2.0已停止开发,Nacos处于1.x-2.0开发

厂商

阿里巴巴

Netflix

Netflix已长期用于生产,阿里刚起步

生产建议


Nacos0.8以前不可用于生产,建议生产采用Nacos1.0,便于节省配置中心集群和服务管理

未来发展


Nacos 2.0主要关注在统一服务管理、服务共享及服务治理体系的开放的服务平台的建设

(4)选型建议

采用Eureka方案的考虑

  • 想用Spring Cloud原生全家桶
  • 想用本地文件和Git作为配置管理的,将配置与服务分开管理
  • 考虑短期的稳定性

采用Nacos方案的考虑

  • 想在线对服务进行上下线和流量管理
  • 不想采用MQ实现配置中心动态刷新
  • 不想新增配置中心生产集群
  • 考虑引入Spring Cloud Alibaba生态

五、Spring Cloud   Bus 消息总线

Spring cloud bus通过轻量消息代理连接各个分布的节点。本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。配置中心客户端刷新就是典型的应用场景之一。

springcloudalibaba多模块搭建 springcloudalibaba五大组件_客户端_02

利用Spring Cloud Bus做配置更新的步骤:

  1. 提交代码触发post给客户端A发送bus/refresh
  2. 客户端A接收到请求从Server端更新配置并且发送给Spring Cloud Bus
  3. Spring Cloud bus接到消息并通知给其它客户端
  4. 其它客户端接收到通知,请求Server端获取最新配置
  5. 全部客户端均获取到最新的配置