SpringCloud:
微服务架构是一种架构模式,架构风格,将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,
服务之间互相协调,互相配置,服务之间采用轻量级的通信机制(HTTP)互相沟通,每个服务都围绕着具体的业务进行构建。
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务,
整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由等。
组件:Eureka、Feign、Hystrix、Zuul、Ribbon、Config
一、Eureka
服务注册中心,专门负责服务的注册和发现。
1、Eureka service 注册中心 @EnableEurekaServer
2、Eureka Client 将服务信息注册到注册中心 @EnableEurekaClient
eureka:
client:
serviceUrl:
defaultZone: eureka服务url

更改Eureka实例ID
eureka:
instance:
instanceId:
prefer-ip-address: true //显示ip
健康检查:
默认情况下,Eureka使用客户端心跳来确定客户端状态。
在Status栏显示着UP,表示该服务及其多实例处于状态正常。(需要spring-boot-starter-actuator依赖)
eureka:
client:
healthcheck:
enabled: true
自我保护机制:
默认情况下,EurekaServer在一段时间内没有接收到某个微服务的心跳,会注销该实例(默认90秒),
但是短时间内丢失大量的服务实例心跳,这时会开启自我保护机制,不会剔除该服务。是一种应对网络异常的安全保护措施.
二、Feign
是一个声明式的Web服务客户端,服务与服务之间的调用。
使用@FeignClient进行接口定义,FeignClient会根据接口配置到注册中心找到对应的请求服务接口。
使用Feign在启动类加@EnableFeignClients
在@FeignClient注释中,String值是一个注册在Eureka上的服务名称,
用于创建Ribbon负载平衡器。还可以使用url属性(绝对值或只是主机名)指定URL。
Feign支持Hystrix回退,将fallback属性设置为实现回退的类名。
需要访问导致回退触发的原因,使用注解中fallbackFactory属性,参数Throwable cause :“cause.getMessage()”。
三、Hystrix
Hystrix Dashboard:显示断路器的运行状况
多个微服务之间调用的时候,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,
对此微服务的调用就会占用越来越多的系统资源,进而引起系统崩溃,
“断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,
向调用方返回备选响应 (FallBack) ,
而不是长时间的等待或者抛出调用方法无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间,不必要的占用,
从而避免了故障在分布式系统中的蔓延,乃至雪崩。

- 服务熔断 @HystrixCommand
服务降级、监控 - 服务降级:fallback,提供友好提示。(释放资源供核心业务使用)服务降级情况:程序运行异常、超时、服务熔断触发服务降级。
- 服务熔断:circuit break,服务降级->熔断->恢复调用链路,当失败的调用到一定阈值,缺省是5秒内20次调用失败,就会启动熔断机制,三个状态:打开、关闭、半开
四、Zuul
Zuul是Netflix的基于JVM的路由器和服务器端负载均衡器。
路由网关,将外部请求转发到具体微服务实例,实现外部访问统一入口,过滤器功能负责对请求的处理过程进行干预
zuul默认和Ribbon结合实现了负载均衡的功能
当Zuul中给定路由的电路跳闸时,您可以通过创建类型为FallbackProvider的bean来提供回退响应,
如果要为所有路由提供缺省回退,您可以创建一个类型为FallbackProvider的bean,并且getRoute方法返回*或null。
zuul:
ignored-services: 忽略的服务 / '*',禁用默认的路由
routes:
XXX:
service-id: xxx
path: /xxx/**

五、Ribbon
负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用。
Ribbon是一种客户端负载平衡器,可对HTTP和TCP客户端的行为进行大量控制。
Eureka是抽象远程服务器发现的一种方便的方式,因此您不必在客户端中对其URL进行硬编码,
但如果您不想使用它,Ribbon和Feign仍然很适用的。
#禁止授权给Eureka,明确禁用在Ribbon中使用Eureka。
ribbon:
eureka:
enabled = false
#Ribbon客户端默认为已配置的服务器列表
eureka-service:
ribbon:
listOfServers= xxx,xxx
- 负载均衡 @LoadBalance,支持修改负载均衡算法,
六、Config
集中式管理配置文件
不同环境,不同配置,动态化的配置更新,分环境部署,
分为Config Server、Config Client
服务端也称为 分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息
客户端则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,
并在启动的时候从配置中心获取和加载配置信息。
`cloud:
config:
label: #分支名称
name: #需要读取的资源名称,无后缀
profile: #环境配置
uri: #配置中心的地址`

- 配置中心、集中管理配置文件、进行环境转变不同的配置文件
- 配置文件存放在本地或者远程仓库,Config Server从仓库中读取配置文件,Config Client从Server中加载配置文件
各组件间的运行机制:
1、客户端发起的API调用请求通过路由网关(Zuul)
2、网关接收到请求,根据从Eureka服务中心获取的服务列表,通过负载均衡方式进行转发到具体的服务实例
3、各个微服务间的调用通过Feign进行,Hystrix来进行服务的降级、熔断等操作
4、各服务的配置文件从Config Server中获取
