第三章-spring原生云

本章介绍了服务注册中心Eureka的使用攻略,包括设置服务注册中心、服务注册与发现、引用负载均衡器、断路器Hystrix以及处理故障和延迟。

服务发现

微服务编程思想

单片应用程序看似简单,但却存在一些挑战:

  • 理解难:随着代码基数越大
  • 测试难
  • 容易发生lib库冲突
  • 效率低下
  • 技术更新难:技术决策要考虑整个应用程序
  • 上生产难:需要大量的人力物力测试

应用架构、微服务架构有以下特点:

  • 容易理解
  • 容易测试
  • 微服务不太可能受到库不兼容的影响
  • 微服务是独立伸缩的
  • 每个微服务都能独立技术选型
  • 微服务可以更频繁地发布到生产环境中

设置服务注册中心

Spring Cloud是一个相当大的伞形项目,由几个独立的子项目组成,每个子项目都以某种方式支持微服务开发。其中一个子项目是Spring Cloud Netflix,它提供了来自Netflix开放源代码组合的几个组件,其中包含一个Spring twist。其中包括Netflix服务注册中心Eureka。

Eureka服务注册和发现图:

Alt text

为什么使用客户端负载均衡器

通常,负载平衡器被认为是一个单独的集中式服务,它处理所有请求并将它们分布到目标的多个实例上。相比之下,Ribbon是一个客户端负载均衡器,对于每个发出请求的客户端都是本地的。
优点:

  • 因为每个客户机都有一个本地负载均衡器,所以负载均衡器自然地与客户机的数量成比例。
  • 可以将每个负载均衡器配置为采用最适合每个客户机的负载平衡算法,而不是对所有服务应用相同的配置。

步骤:

  1. 添加依赖

    [代码块]
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <properties>
    ...
    <spring-cloud.version>Finchley.SR1</spring-cloud.version>
    </properties>
    ...

    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    </dependencies>
    </dependencyManagement>
  2. 启用Eureka服务器。
    打开应用程序的主引导类,并使用@EnableEurekaServer注释它。

    [代码块]
    1
    2
    3
    4
    5
    6
    7
    @SpringBootApplication
    @EnableEurekaServer
    public class ServiceRegistryApplication {
    public static void main(String[] args) {
    SpringApplication.run(ServiceRegistryApplication.class, args);
    }
    }
  3. 测试
    Alt text

配置Eureka

[1.application.yml]
1
2
3
4
5
6
7
8
eureka:
instance:
hostname: localhost
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka
[2.指定EUREKA的服务器端口]
1
2
server:
port: 8761
[3.禁用SELF-PERSERVATION模式]
1
2
3
4
eureka:
...
server:
enable-self-preservation: false

扩展Eureka

使用Spring配置文件为两个对等点配置Eureka:
Alt text

注册和发现服务

  1. 配置Eureka客户端属性
    Alt text

  2. 消费服务

  • RestTemplate
  • Feign-generated客户端接口

使用RestTemplate:
Alt text

使用Feign-generated客户端接口:
Alt text

配置管理

共享配置

Spring Cloud Config Server提供了一个集中式的配置,一个应用程序中的所有微服务都可以依赖该服务器进行配置。因为它是集中式的,所以它是所有服务中通用的配置一站式服务,但是它也能够提供特定于给定服务的配置。

运行配置服务器

Spring Cloud Config Server为配置数据提供了一个集中的源。
Alt text

  1. 启用config服务器
    Alt text

  2. 填充配置存储库
    Alt text

使用共享的配置

Alt text

服务于特定于应用程序和特定于配置文件的属性

利用spring.application.name属性来指定对应服务的配置文件。

  1. 不同服务使用独立的配置文件
    Alt text

  2. 使用profiles属性切换配置文件
    Alt text

对配置属性保密

Alt text

动态刷新配置属性

手动刷新

Alt text

自动刷新

Alt text

  1. 创建WEBHOOK
    Alt text
  2. 在配置服务器中处理WEBHOOK更新
    Alt text
  3. 创建GOGS通知提取器
    Alt text
  4. 在配置服务器客户端启用自动刷新
    Alt text

处理故障和延迟

了解断路器

在为他们的断路器实现起名字的时候,Netflix的开发人员想要一个能抓住弹性、防御和容错的名字。他们选定了海斯特里克斯(Hystrix),这是一种被称为“旧世界豪猪”(Old-World porcupine)的动物,这种动物的特点是能够用长刺自卫。
常见异常:

  • 调用REST的方法
  • 执行数据库查询的方法
  • 潜在的慢方法
    Alt text

定义断路器

Alt text
管理断路器阀值:
Alt text

监控失败

概述

Alt text

介绍Hystrix仪表板

Alt text

理解Hystrix线程池

Alt text

聚合多个Hystrix流

Alt text