天天看点

spring-cloud入门011、今日内容介绍2、系统架构演变过程3、SpringCloud介绍4、基础架构图剖析-版本介绍5、微服务业务场景的构建6、微服务业务场景问题思考7、Eureka-注册中心简介8、注册中心搭建-界面介绍9、服务注册到注册中心10、再次实现消费者访问服务提供者11、注册中心-知识点详解12、负载均衡-介绍13、实现负载均衡入门案例14、负载均衡源码解析15、Hystrix-熔断器-简介16、熔断器配置文件解析17、熔断器原理分析18、熔断器全局服务降级方法课后练习

1、今日内容介绍

  • 回顾:
    • 系统架构的演变过程分为哪四个阶段?
    • 创建SpringBoot有几种方式,分别是什么?
    • 配置文件注入属性值有那两个注解,哪两种?
      • @Value()
      • @ConfigurationProperties()
  • 今日内容安排:
    • 介绍SpringCloud:What,Why,How
    • 模拟简单微服务业务场景:父工程,提供者服务,消费者服务
    • 思考微服务业务系统中,必然面临的问题,及解决方案
    • Eureka注册中心:简介,原理,搭建,整合,详解
    • Ribbon负载均衡:简介,原理,搭建,源码分析
    • Hystrix熔断器:简介,雪崩效应,熔断案例,服务降级

2、系统架构演变过程

  • 单一应用架构
  • 垂直应用架构
  • 分布式服务架构
  • 面向服务的架构:微服务架构

3、SpringCloud介绍

  • 什么是SpringCloud?
    • 是一系列框架的有序集合,包含了服务注册发现,配置中心,消息总线,负载均衡,断路器等
  • 为什么要用Springcloud?
    • 从架构层面降低了对大型分布式系统构建的要求和难度

4、基础架构图剖析-版本介绍

  • 版本介绍-Greenwich SR1
    • 快照版 -SNAPSHOT
    • 里程碑版本-MileStone,M1–>M9
    • 正式的,稳定发行版本-SR,Service Release,GA(Generally Available)
  • Spring Cloud与SpringBoot版本的对应关系
    • Greenwich SR1 —> 2.1.x

5、微服务业务场景的构建

  • 创建父工程
  • 创建父工程的子模块,消费者,SpringBoot的工程,只有web
  • 创建父工程的子模块,提供者,Spring Boot的工程, Mybatis+Web

6、微服务业务场景问题思考

实现最简单的需求:消费者访问提供者的查询用户信息接口

实现步骤:

  1. 在启动引导类注册RestTemplate对象到SpringIOC容器
  2. 在ConsumerController中,用RestTemplate请求服务提供者查询用户信息接口
  3. 启动消费者工程并测试

思考存在的问题:

  • 在消费者服务中,访问url地址硬编码了,url地址端口变化了怎么办?服务死掉了如才能知道?
    • 在消费者服务中,是不清楚服务提供者状态的!
  • 为了增加服务提供者的并发访问量,我们搭建集群,集群的负载均衡怎么实现?
  • 服务提供者如果出现故障,会不会向用户抛出异常页面,该不该抛出错误页面?

7、Eureka-注册中心简介

  • 什么是注册中心Eureka?
    • 是一个服务注册和发现,以及服务治理的微服务套件。
    • 由两个部分构成
      • 服务端组件注册中心:服务治理
      • 客户端组件:服务注册,服务发现

8、注册中心搭建-界面介绍

  • 目标:搭建注册中心
  • 实现步骤:
    1. 创建SpringBoot工程eureka_server
    2. 勾选starter:DevTools和EurekaServer
    3. 启动引导类上加注解@EnableEurekaServer
    4. 配置文件:端口,应用名称,注册中心地址
    5. 启动注册中心服务
    6. 测试注册中心服务
  • 界面简介

9、服务注册到注册中心

  • 目标:提供者和消费者服务注册到注册中心
  • 实现步骤:
    1. 改造服务提供者,pom文件中加入Eureka客户端的starter依赖
    2. 启动引导类上加@EnableDiscoveryClient注解
    3. 配置文件:端口,应用名称,服务注册中心地址
    4. 重启项目
    5. 在注册中心管理平台查看已成功注册的服务

10、再次实现消费者访问服务提供者

这次是通过注册中心的注册列表来访问

目标:消费者访问服务提供者

  • 实现步骤:
    1. 在ConsumerController中注入DiscoveryClient对象
    2. 通过DiscoveryClient获取服务列表,从服务列表中获取用户服务(user-service)
    3. 用户服务实例中获取请求地址,请求端口,实现动态地址拼接
    4. RestTemplate发送请求,获取响应
    5. 启动消费者工程并测试

11、注册中心-知识点详解

  1. 基础架构的三个角色:注册中心,消费者,提供者
  2. 服务注册(register):Eureka Client会通过发送REST请求的方式向Server注册自己的服务
  3. 服务续约(renew):心跳检测,定时续约服务,默认30秒
  4. 获取服务(get registry):获取注册中心所有服务的清单信息,本地有缓存,缓存时间默认30秒
  5. 服务调用:通过清单查阅要调用的服务,然后进行远程调用
  6. 服务下线(cancel):服务正常关闭和重启,告知注册中心自己下线的过程
  7. 失效剔除(evict):如果服务没有来得及告诉注册中心就死了,那么等着被剔除吧!
  8. 自我保护:避免了大面积网络故障导致的本不应该的服务被剔除!默认自我保护功能是开启

12、负载均衡-介绍

  • 什么是Ribbon?
    • 它是一个工具类框架,实现了http请求的负载均衡。它是微服务的基础设施,非常重要,很多其他组件都是基于它实现的,比如说feign,比如说API网关gateway…。
  • 负载均衡算法扩展介绍:AvailabilityFilteringRule(根据当前服务是否熔断及并发情况进行负载均衡的算法)、WeightedResponseTimeRule(根据服务响应时间来负载均衡的算法)

13、实现负载均衡入门案例

目标:实现负载均衡访问用户服务小集群。

实现步骤:

第一步:启动多个user_service服务

  1. 修改配置文件端口获取方式
  2. 编辑应用启动配置
  3. 启动两个提供者服务
  4. 在注册中心查询是否启动成功

第二步:开启消费者负载均衡

  1. 在RestTemplate的注入方法上加入@LoadBalanced注解
  2. 修改调用请求的Url地址,改为服务名称调用
  3. 访问页面查看效果

14、负载均衡源码解析

为什么只输入了Service名称就可以访问了呢?不应该需要获取ip和端口吗?

源码类:LoadBalancerInterceptor

15、Hystrix-熔断器-简介

  • 什么是Hystrix熔断器?
    • 分布式环境中,帮助控制服务之间级联报错的一个延迟和容错的库。提高系统整体弹性。
  • 雪崩效应:查看讲义PPT内容

16、熔断器配置文件解析

# 配置熔断策略:
hystrix:
  command:
    default:
      circuitBreaker:
      	# 原理分析中解释配置含义
        # 强制打开熔断器 默认false关闭的。测试配置是否生效
        forceOpen: false
        # 触发熔断错误比例阈值,默认值50%
        errorThresholdPercentage: 50
        # 熔断后休眠时长,默认值5秒
        sleepWindowInMilliseconds: 5000
        # 熔断触发最小请求次数,默认值是20
        requestVolumeThreshold: 10
      execution:
        isolation:
          thread:
            # 熔断超时设置,默认为1秒
            timeoutInMilliseconds: 1000
           

断策略超时效果演示

17、熔断器原理分析

熔断器的原理如同电力过载保护器

有三种状态

  • 关闭状态:所有请求正常访问
  • 打开状态:所有请求被降级
  • 半开状态:打开状态不是永久的,打开之后过了休眠时间会进入半开状态,半开状态效验服务

什么时候熔断?

  1. 访问超时
  2. 服务不可用(死了)
  3. 服务抛出异常(虽然有异常但还活着)
  4. 其他请求导致服务异常到达阈值,所有服务都会被降级

18、熔断器全局服务降级方法

  • 目标:体验全局服务降级方法
  • 实现步骤:
    1. 在controller类上加@DefaultProperties(defaultFallback=”defaultFallBack“)注解
    2. 在方法上加@HystrixCommon注解
    3. 重启服务测试测试

课后练习

1、搭建微服务业务场景:三个工程,父工程,消费者工程,提供者工程。

2、搭建注册中心微服务,查看注册中心控制界面,并将消费者和提供者注册到注册中心。

3、搭建2个用户服务的集群,通过服务在均衡访问。

4、编写服务降级方法,测试服务降级效果。

继续阅读