学习笔记--1服务治理

基于之前服务治理工程demo,介绍服务治理的相关信息。


之前程序的框架结构:
在这里插入图片描述

1.1 Eureka服务治理基础框架的三个核心要素

  • 服务注册中心

Eureka提供的服务端,用于提供服务与发现。

  • 服务提供者

提供服务的应用,可以是一切遵循Eureka通讯机制的应用(不限于springboot)。它将自己提供的服务注册到Eureka。

  • 服务消费者

从服务注册中心获取服务列表,从而使消费者可以知道去何处调用需要的服务。可以通过ribbon和feign实现服务消费。

1.2 服务治理机制

  • 服务注册中心1,2相互注册形成高可用集群。
  • 服务提供者注册服务到注册中心。
  • 服务消费者同样指向注册中心。

1.2.1服务提供者

  • 服务注册
    服务提供者在启动时会通过发送REST请求的方式将自己注册到Eureka Server上,同时带上自身服务的元数据信息。
    Eureka Server接收到这个REST请求后,将元数据信息存储在一个双层结构Map中。第一层key是服务名,第二层key是具体服务的实例名。
    eureka.client.register-with-eureka=true 启动注册操作。

  • 服务同步
    服务提供者虽然会在不同的注册中心注册,但是当服务注册中心会转发请求到与其相连的其他注册中心,从而实现注册中心间的服务同步。通过服务同步,服务提供者的服务信息就可以通多服务注册中心的任一台获取到。

  • 服务续约
    服务注册完成后,服务提供者会维护一个心跳,防止EurekaServer“剔除任务”。
    eureka.instance.lease-renewal-interval-in-seconds=30 设置服务续约任务的调用间隔。
    eureka.instance.lease-expiration-duration-in-seconds=90 定义服务失效时间。

1.2.2 服务消费者

  • 获取服务
    当我们启动服务消费者的时候,它会发送一个REST请求给服务注册中心,来获取注册的服务清单。EurekaServer会维护一份只读的服务清单返回给客户端,同时该缓存清单会每隔30秒更新一次。
    客户端设置 eureka.client.fetch-register=true(虽然这是默认的)
    eureka.client.fetch-register-interval-seconds=30设置缓存清单更新时间。

  • 服务调用
    消费者获取服务清单后,通过服务名可以获取:服务实例名和该实例的元数据信息。
    在Ribbon中通过轮询的方式进行调用实例,从而实现客户端的负载均衡。
    进行服务调用时优先访问同处一个zone中的服务提供方。若访问不到则访问其他的zone。【每一个客户端对应一个region和一个zone】

  • 服务下线
    当服务实例进行正常关闭时,会触发一个服务下线的REST请求给EurekaServer,服务注册中心收到请求后,将该服务状态设置为下线down(上线为up)。并把下线事件传播出去。

1.2.3 服务注册中心

  • 失效剔除
    当服务实例非正常下线,服务注册中心未收到下线请求。EurekaServer的定时任务会将清单中超时没有续约的服务剔除。

  • 自我保护
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY’RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
    本地调试时基本会在界面看到这条信息。这就是触发了EurekaServer的自我保护机制。EurekaServer在运行期间,会统计心跳失败比例在15分钟内是否低于85%。eureka会将当前实例信息保护起来,不让其过期。
    使用eureka.server.enable-self-preservation=false来关闭保护机制。

1.3 配置

以上所有的应用都可以视为Eureka服务治理体系中的客户端。故,eureka客户端的配置包含两部分:

  • 服务注册相关配置:服务注册中心地址、服务获取间隔时间、可用区域等
  • 服务实例相关的配置信息:服务实例名称、IP地址、端口号、健康检查路径等。

1.3.1 服务注册类配置

可以查看org.springframework.cloud.netflix.eureka.EurekaClientConfigBean所有的配置信息都以eureka.client为前缀。

  • ** 指定注册中心 **
    eureka.client.serviceUrl.defaultZone=http....
    配置多个注册中心使用逗号分隔。
    http://<username>:<password>@ip:port/...使用安全校验信息。
    eureka.client.enable=true 启用Eureka客户端
    在这里插入图片描述
    图片是从spring cloud微服务实战上copy的。

  • 服务实例类配置
    可以查看org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean所有的配置信息都以eureka.instance为前缀。

    • 元数据

    元数据:Eureka客户端在向注册中心发送注册请求时,用来描述自身服务信息的对象。

    标准化元数据eureka.instance.<properties>=<value>
    自定义元数据eureka.instance.metedataMap.<key>=<value>

    • 实例名配置
      同一主机启动多实例时的默认配置规则:
      ${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}
      对于实例的命名规则可以使用eureka.instance.instanceId参数进行配置。
      设置随机端口:server.port=0或者 server.port=${random.int[10000,19999]}
      虽然端口名不同但是实例名还是相同的,需要使用下面的方法设置不同的实例名:
      eureka.instance.instanceId=${spring.application.name}:${random.int}

    • 端点配置
      当我们为应用设置了context-path时,management.context-path=/hello,监控端点都应该加上这个前缀。需要变更actuator模块的访问的路径。
      eureka.instance.statusPageUrlPath=${management.context-path}/info
      eureka.instance.healthCheckUrlPath=${management.context-path}/health
      使用绝对路径方式:
      eureka.instance.healthCheckUrl=https://${eureka.instance.hostname}/health
      eureka.instance.statusPageUrl=https://${eureka.instance.hostname}/info
      eureka.instance.homePageUrl=https://${eureka.instance.hostname}/

    • 健康监测
      当服务不能正常提供时,比如服务所依赖的外部资源出现问题时,此时心跳还是在运行,客户端依旧可以使用非正常服务。这是不合理的。
      因此需要更加健全的健康状态维护。方法如下:
      首先在pom xml中引入actuator模块依赖
      配置参数eureka.client.healthcheck.enable=true

    • 其他配置
      在这里插入图片描述

1.4 跨平台支持

Eureka的通信机制使用HTTP的REST接口实现,这也是Eureka同其他服务注册工具的一个关键不同点。HTTP是平台无关的,虽然Eureka Server通过java实现,但是其下微服务应用不限于使用java开发。

1.4.1 通信协议

Eureka使用Jersey和XStream配合JSON作为servlet和client之间的通讯协议。也可以选择实现自己的协议来代替。


华丽丽的分隔符!

終わり

——下一篇文章会介绍客户端均衡负载ribbon

参考

spring cloud中文网:https://springcloud.cc/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值