03-SpringCloud

1. SpringCloud 与 dubbo

  • dubbo 只是做服务与发现(Zookeeper),远程调用(RPC-部分底层使用的是netty)框架,是一种具体的实现

  • SpringCloud 是一套分布式解决方案,收集了包括服务发现(Netflix Eureka)、服务调用(Netflix Feign)、熔断器(Netflix Hystrix)、服务网关(Netflix Zuul)、分布式配置(Spring Cloud Config)、消息总线(Spring Cloud Bus) 等几大模块

  • SpringCloud 需要配合SpringBoot使用

2.分布式理论(CAP)

任何分布式架构都不能同时严格满足这三个特性,分区容错性 必须满足, 一致性和可用性在设计的分布式框架的时候需要选择更倾向哪个

  • Consistency(一致性)

  • Availability(可用性)

  • Partition Tolerance(分区容错性)

zookeeper 和 Eureka 对比

zookeeper 在设计的时候更倾向于一致性,比如多个zookeeper集群,只有一个主节点,  
一致性由主节点保证,所有从节点从主节点同步。当主节点出现故障的时候,会通过选举从从节点中尽快选出新的主节点。  
这个过程可能会导出zookeeper不可用,直到新的主节点出现  

Eureka 在设计的时候更倾向于可用性,Eureka集群每个节点之间是对等的,相互同步服务列表。   
过程当中可能服务列表不一致,但是当其中任何一个节点挂掉的时候,其他节点 
正常工作,可以保证服务的可用性。Eureka客户端会每隔30秒向服务端发送心跳。Eureka的客户端也会缓存服务列表      

Eureka 特点
1.客户端会向服务端发送心跳(30秒/s),服务端通过客户端心跳来注册微服务以及维护可用微服务列表  

2.服务端之间通过相互复制(同步)方式保证服务列表一致性  

3.如果服务端发现85%以上微服务都没有发送心跳,将不会删除列表中的为服务,不会向其他服务器同步服务列表(保护模式),也是可用性体现

4.即使全部Eureka服务器挂掉,客户端会使用缓存在本地的服务列表(客户端缓存)   

3.Eureka-Server 搭建

1.添加依赖

2.添加配置

3.@EnableEurekaServer 注解加在启动类上

4.Eureka-Client 搭建

1.添加依赖

2.添加配置

3.@EnableEurekaClient 注解加在启动类上

5.Netflix-Fegin ( 远程调用RPC )

1.添加依赖

  1. 定义远程调用接口

3.启动类需要添加

4.自带负载均衡,同一个服务启动多个实例,会均衡调用

6.SpringCloud 中的熔断

熔断机制:

启用熔断器:

备用方案:

7.Spring-cloud 微服务网关

常用作用:

    1. 网关项目也需要注册到Eureka服务

    1. 作为多个微服务项目的统一入口,转发请求

    1. 对多个微服务项目做统一登录鉴权

1.添加依赖

2.添加配置

3.启动类添加@EnableZuulProxy //开启zuul网关

4.网关过滤器

添加私有请求头 网关过滤器

权限处理 网关过滤器

8.Spring-Cloud 配置中心

使用git 来统一管理众多微服务项目中的配置文件,方便管理

1.新建配置中心项目步骤

1.添加依赖

2.启动类添加@EnableConfigServer 注解

3.编写application.yml

4.启动项目,浏览器测试 http://localhost:12000/base_dev.ymlarrow-up-right

  1. 修改需要配置的微服务项目

1.添加依赖

2.删除原有的application.yml

3.添加新的配置文件bootstrap.yml, 并配置

9.Spring-Cloud-Bus 消息总线

场景: spring-cloud支持配置中心,但是如果没有消息总线,配置中心的配置只会在 微服务项目启动的时候拉取一次,当配置中心的配置改变的时候,微服务项目不能 及时同步最新配置;消息总线就是解决这个问题的

git仓库的webhook 机制

大致流程

  1. git仓库配置webhook通知的url,一般为配置中心项目的地址;

    配置中心和微服务项目事先配置好订阅关系,配置中心相当于消息生产者,

    微服务项目相当于消费者。配置中心默认用的是rabbitMQ

  2. 当配置文件改动,触发webhook,自动发送请求通知配置中心

  3. 配置中心接受到请求,发送一条消息

  4. 微服务项目接收到消息,重新拉取配置文件,实现同步

注意: 消息中间件部分需要自己搭建,配置中心配置mq的地址,充当消息生产者; 微服务项目配置监听的mq地址,充当消费者

1 配置中心改动

1.添加依赖

2.添加配置

2 消息总线微服务客服端配置

1.添加依赖

2.添加配置

3.微服务项目中用到配置的地方需要添加@RefreshScope 注解,使配置生效

Last updated