什么是SpringCloud?

 

 一、什么是SpringCloud?

SpringCloud是实现微服务结构的一种方式它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等功能;协调分布式环境中各个系统,为各类服务提供模板性配置。其主要涉及的组件包括:

Eureka:注册中心
Zuul、Gateway:服务网关
Ribbon:负载均衡
Feign:服务调用
Hystrix或Resilience4j:熔断器

      1.Eureka注册中心 :实现服务治理(服务注册与发现)。

      2.负载均衡Ribbon :主要提供客户侧的软件负载均衡算法。

      3.熔断器Hystrix:保护系统,控制故障范围。
      4.服务调用Feign:服务间的调用
      5.Spring Cloud Gateway网关:api网关,路由,负载均衡等多种作用。
      6.Spring Cloud Config分布式配置中心 :配置管理
      7.Spring Cloud Bus服务总线 

二、各组件介绍

1.Eureka注册中心 

1.1.Eureka做什么?
Eureka就好比是滴滴,负责管理、记录服务提供者的信息。服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你。
同时,服务提供方与Eureka之间通过 “心跳” 机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除。这就实现了服务的自动注册、发现、状态监控。
1.2.原理图 
基本架构:
Eureka:就是服务注册中心(可以是一个集群),对外暴露自己的地址
提供者:启动后向Eureka注册自己信息(地址,提供什么服务)
消费者:向Eureka订阅服务,Eureka会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态 
1.3.
坐标:
1 <dependency> 
2       <groupId>org.springframework.cloud</groupId> 
3       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> 
4 </dependency>

启动类:

1 //声明当前应用为eureka服务 
2 @EnableEurekaServer 
3 @SpringBootApplication 
4 public class EurekaServerApplication {
5      public static void main(String[] args) { 
6          SpringApplication.run(EurekaServerApplication.class); 
7      } 
8 }
客户端注册服务到集群 :
1 eureka: 
2     client: 
3         service-url: # EurekaServer地址,多个地址以','隔开 
4         defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka

2.负载均衡Ribbon 

2.1.负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
2.2.负载均衡要干什么事情?

服务端负载

需要做三个事情:

1.接收请求

2.选择服务器地址

3.转发/执行请求(转发还是执行可以参考网关)

客户端负载

1.选择服务器地址

2.发请求

负载均衡就是分发请求流量到不同的服务器。
负载均衡一般分为两种:
1、 服务器端负载均衡(nginx)

2、 客户端负载均衡(Ribbon)

2.3、负载均衡架构

 2.4.开启负载均衡 

因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。
在RestTemplate的配置方法上添加 @LoadBalanced 注解:
1 @Bean 
2 @LoadBalanced public RestTemplate restTemplate() { 
3       return new RestTemplate(); 
4 }

3.熔断器Hystrix

 3.1.Hystrix的作用是什么呢?具体要保护什么呢?
        Hystrix是Netflflix开源的一个延迟和容错库,用于隔离访问远程服务、第三方库,防止出现级联失败。
        在高并发领域,在分布式系统中,可能因为一个小小的功能扛不住压力,宕机了,导致其他服务也跟随宕机,最终导致整个系统宕机,所以在SpringCloud中采用Hystrix进行处理。
        微服务I 发生异常,请求阻塞,用户请求就不会得到响应,则tomcat的这个线程不会释放,于是越来越多的用户请求到来,越来越多的线程会阻塞。服务器支持的线程和并发数有限,请求一直阻塞,会导致服务器资源耗尽,从而导致所有其它服务都不可用,形成雪崩效应。
         Hystrix解决雪崩问题的手段主要是服务降级,包括:
         线程隔离
         服务熔断
 
3.2.线程隔离
        Hystrix为每个依赖服务调用分配一个小的线程池,如果线程池已满调用将被立即拒绝,默认不采用排队,加速失败判定时间。用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务。
       用户的请求将不再直接访问服务,而是通过线程池中的空闲线程来访问服务,如果线程池已满,或者请求超时,则会进行降级处理,什么是服务降级?
服务降级:优先保证核心服务,而非核心服务不可用或弱可用。
       用户的请求故障时,不会被阻塞,更不会无休止的等待或者看到系统崩溃,至少可以看到一个执行结果(例如返回友好的提示信息) 。服务降级虽然会导致请求失败,但是不会导致阻塞,而且最多会影响这个依赖服务对应的线程池中的资源,对其它服务没有响应。
      触发Hystrix服务降级的情况:线程池已满、请求超时
 
3.3.服务熔断
熔断原理
       在服务熔断中,使用的熔断器,也叫断路器,其英文单词为:Circuit Breaker
熔断机制与家里使用的电路熔断原理类似;当如果电路发生短路的时候能立刻熔断电路,避免发生灾难。在分布式系统中应用服务熔断后;服务调用方可以自己进行判断哪些服务反应慢或存在大量超时,可以针对这些服务进行主动熔断,防止整个系统被拖垮。
       Hystrix的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后,可以自动重连。通过断路的方式,将后续请求直接拒绝,一段时间(默认5秒)之后允许部分请求通过,如果调用成功则回到断路器关闭状态,否则继续打开,拒绝请求的服务。
 

4.Feign

5.Spring Cloud Gateway网关

 5.1.
Spring Cloud Gateway组件的核心是一系列的过滤器,通过这些过滤器可以将客户端发送的请求转发(路由)到对应的微服务。 Spring Cloud Gateway是加在整个微服务最前沿的防火墙和代理器,隐藏微服务结点IP端口信息,从而加强安全保护。Spring Cloud Gateway本身也是一个微服务,需要注册到Eureka服务注册中心。
Spring Cloud Gateway基于Filter链提供网关基本功能:安全、监控/埋点、限流等。
网关的核心功能是:过滤和路由
 5.2.Gateway加入后的架构
 
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都可经过网关,然后再由网关来实现 鉴权、动态路由等等操作。Gateway就是我们服务的统一入口。
 5.3.核心概念
路由(route): 路由信息的组成:由一个ID、一个目的URL、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求URL和配置路由匹配。
断言(Predicate): Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的ServerWebExchangeSpring Cloud Gateway的断言函数允许开发者去定义匹配来自于Http Request中的任何信息比如请求头和参数。
过滤器(Filter): 一个标准的Spring WebFilterSpring Cloud Gateway中的Filter分为两种类型的Filter,分别Gateway FilterGlobal Filter。过滤器Filter将会对请求和响应进行修改处理 。

 

 

6.Spring Cloud Config分布式配置中心 

7.Spring Cloud Bus服务总线

原文地址:https://www.cnblogs.com/aaaazzzz/p/12781435.html