核心

服务注册与发现(高可用)

  • Eureka、Consul

    • eureka server

      • 引入依赖
      • 程序入口

        1. @EnableEurekaServer
        2. @SpringBootApplication
      • 配置属性

        1. spring.application.name=eureka-server
        2. server.port=1001
        3. eureka.instance.hostname=localhost
        4. eureka.client.register-with-eureka=false
        5. eureka.client.fetch-registry=false
      • 验证

    • eureka client

      • 引入依赖
      • 定义控制器
      • 程序入口

        1. @EnableDiscoveryClient
        2. @SpringBootApplication
      • 属性配置

        1. spring.application.name=eureka-client
        2. server.port=2001
        3. eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
      • 验证

    • Consul

      • 修改依赖
      • 修改属性配置

        1. spring.cloud.consul.host=localhost
        2. spring.cloud.consul.port=8500
      • 启动consul开发密模式:consul agent-dev

      • 验证

        服务消费者

  • 基础(LoadBalancerClient)

    • 引入依赖
    • 属性配置

      1. spring.application.name=eureka-consumer
      2. server.port=2101
      3. eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
    • 消费服务控制器

    • 程序入口

      @EnableDiscoveryClient
      @SpringBootApplication
      
    • 说明

  • Ribbon(客户端负载均衡,基于HTTP和TCP)

    • 引入依赖
    • 程序入口

      @EnableDiscoveryClient
      @SpringBootApplication
      
    • 消费服务控制器

    • 说明
  • Feign(声明式服务调用)

    • 引入依赖
    • 程序入口

      @EnableFeignClients
      @EnableDiscoveryClient
      @SpringBootApplication
      
    • 消费服务控制器

    • 说明
  • Feign(传文件)

    • 服务提供方
    • 服务消费方
      • 引入依赖
      • 程序入口&接收方定义
    • 测试

      分布式配置中心(高可用)

  • 基础

    • 准备配置仓库
    • 构建配置中心

      • 引入依赖
      • 程序入口

        @EnableConfigServer
        @SpringBootApplication
        
      • 配置属性

        spring
        application:
        name: config-server
        cloud:
        config:
        server:
        git:
          uri: http://git.oschina.net/didispace/config-repo-demo/
        server:
        port: 1201
        
      • 验证

    • 构建客户端

      • 引入依赖
      • 程序入口
      • 配置属性

        spring:
        application:
        name: config-client
        cloud:
        config:
        uri: http://localhost:1201/
        profile: default
        label: master
        server:
        port: 2001
        
      • 验证

  • 加密与解密
    • 特殊说明
    • 相关配置
    • 扩展:非对称
    • 安全思考
  • 高可用
    • 传统方式
    • 注册为服务
      • 服务端
        • 引入依赖
        • 程序入口
        • 配置属性
        • 验证
      • 客户端
        • 引入依赖
        • 程序入口
        • 配置属性
        • 验证
  • 动态刷新
  • 数据库存储

    服务容错保护

  • Hystrix服务降级

    • 引入依赖
    • 程序入口

      @EnableCircuitBreaker
      @EnableDiscoveryClient
      @SpringBootApplication
      
    • 改造服务消费方式

      @RestController
      public class DcController {
      @Autowired
      ConsumerService consumerService;
      @GetMapping("/consumer")
      public String dc() {
         return consumerService.consumer();
      }
      class ConsumerService {
         @Autowired
         RestTemplate restTemplate;
         @HystrixCommand(fallbackMethod = "fallback")
         public String consumer() {
             return restTemplate.getForObject("http://eureka-client/dc", String.class);
         }
         public String fallback() {
             return "fallback";
         }
      }
      }
      
    • 验证

  • Hystrix依赖隔离
  • Hystrix断路器
  • Hystrix监控面板

    • 引入依赖
    • 程序入口

      @EnableHystrixDashboard
      @SpringCloudApplication
      
    • 配置属性

    • 验证—-单节点监控
  • Hystrix监控数据聚合(Turbine)

    • 通过HTTP收集聚合

      • 引入依赖
      • 程序入口

        @Configuration
        @EnableAutoConfiguration
        @EnableTurbine
        @EnableDiscoveryClient
        
      • 属性配置

        spring.application.name=turbine
        server.port=8989
        management.port=8990
        eureka.client.serviceUrl.defaultZone=http://localhost:1001/eureka/
        turbine.app-config=eureka-consumer-ribbon-hystrix
        turbine.cluster-name-expression="default"
        turbine.combine-host-port=true
        
    • 通过消息代理收集聚合

      • 引入依赖
      • 程序入口

        @Configuration
        @EnableAutoConfiguration
        @EnableTurbineStream
        @EnableDiscoveryClient
        
      • 属性配置

      • 消费者项目变动

        服务网关

  • 基础

    • 引入依赖
    • 程序入口

      @EnableZuulProxy
      @SpringCloudApplication
      
    • 配置属性

      spring:
      application:
      name: api-gateway
      server:
      port: 1101
      eureka:
      client:
      serviceUrl:
       defaultZone: http://eureka.test.com/eureka/
      
    • 验证

  • 路由配置
    • 传统路由配置
    • 服务路由配置
  • 过滤器
  • API文档

    • API服务

      • 引入依赖
      • 程序入口

        @EnableSwagger2Doc
        @EnableDiscoveryClient
        @SpringBootApplication
        
      • 配置属性

    • 网关整合Swagger

      • 引入依赖
      • 程序入口
        @EnableSwagger2Doc
        @EnableZuulProxy
        @SpringCloudApplication
        
    • 验证

      消息驱动的微服务

  • 入门

    • 引入依赖
    • 消息消费者
    • 程序入口
  • 核心概念
  • 消费组
  • 消息分区

    分布式服务跟踪

  • 入门

  • 跟踪原理
  • 整合logstash
  • 整合zipkin
  • 收集原理
  • 抽样收集

    网飞套件

    Eureka注册中心

    Ribbon负载均衡

    Feign服务调用

    Hystrix熔断降级

    Zuul网关

    阿里套件

    Nacos注册

    Sentinel哨兵

    RocketMQ消息

    整合组件

    Consul

    Config配置

    Gateway网关

    Stream

    Sleuth

    脑图和链接地址

1、路由网关

  • Zuul
    • 也要注册到注册中心。提供路由+代理+过滤
  • GateWay

注册中心

  • Enreka
  • Zookeeper
  • Nacos

负载均衡

  • Ribbon

服务调用

  • 方式
    • 微服务名字(ribbon)
    • 接口和注解(feign)
  • Feign
    • feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似controller调用service。Spring Cloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http客户端。
    • Ribbon根据微服务名字访问。之前Ribbon+RestTemplate,利用RestTemplate对http请求的封装处理。
    • Feign集成了Ribbon
  • OpenFeign

熔断、降级

  • 熔断—服务端;降级-客户端。
  • Hystrix
  • 熔断:服务长时间无响应,对服务进行降级,进而熔断快速返回错误信息。
    • 注解@HystrixCommand,一般5秒20次调用失败。
    • 断路器:向调用方返回一个符合预期的,可处理的备选响应,而不是长时间等待或抛出无法处理的异常。
    • 调用链路中,某个服务挂了,弃车保帅,调用备份返回失败。

配置中心

  • Zookeeper
  • Config

例子

业务场景

  • 订单中心、库存中心、物流中心、积分中心

    场景:下订单发货

    组件:注册中心~Nacos,Eureka

  • 订单服务处理订单DB,

  • 调用库存中心,物流中心、积分中心注册中心获取主机地址id+端口,
  • 库存中心处理DB

    组件:服务调用~feign

  • 注册中心只有ip+端口的地址

  • 请求构造,网络连接,解析响应需要Feign处理
  • feign的核心是动态代理,会给加了@FeignClient的注解创建代理,请求处理由代理类提供,通过@RequestMapping 解析具体的请求路径。

    组件:负载均衡~Ribbon,Nginx,F5

  • 若服务部署在多台服务器上,需要负载均衡,ribbon默认采用轮询算法(还有随机,权重)

  • ribbon,eureka,feign是紧密合作的,ribbon从eureka获取服务注册表,获取服务所有的地址端口。选取一台服务器,feign发起请求。
  • feign基于ribbon,封装了ribbon,ribbon不像feign和eureka需要独立部署,更像工具组件。

    组件:隔离熔断降级Hystrix,防止雪崩

  • 若订单服务有多个线程,其中有请求积分的线程,若这时积分挂了,请求积分的线程会阻塞抛异常,其他如查看订单、发货的线程也无法运行,导致订单挂,出现服务雪崩。

  • 结合业务,积分挂了,订单可以不挂,照常发货扣库存,积分可后期维护。
  • 分线程池,积分,库存,物流线程隔离,积分挂,线程卡几秒报错,其他线程池正常工作。
  • 熔断:若挂了且不回复,卡几秒无意义,直接熔断直接返回错误。
  • 降级:积分挂了,在数据库纪录相关信息,而不是什么都不做。

    组件:微服务网关~Zuul,Gateway

  • 主要负责路由 ,处理前端请求。前端所有来源都发往网关,网关根据请求特征转发给后端服务。

  • 统一网关后可统一的降级、限流、认证、授权、安全等。

image.png