献给Nacos小白的一篇好文:服务的健康检查

这篇具有很好参考价值的文章主要介绍了献给Nacos小白的一篇好文:服务的健康检查。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

服务的健康检查

几乎所有提供服务注册与发现的组件都支持对服务进行健康状态的检测,以便于及时发现和解决服务问题。常见的健康检查策略分两种方式,一种是客户端主动上报自身健康状态,另一种则是服务端主动探测客户端的健康状态。在nacos中,临时服务对应主动上报健康信息,持久服务则对应服务端下探服务健康状态。

| 客户端上报

| 服务端下探

| 自我保护

| 一些注意事项

一、客户端上报

1、上报设定

在nacos中,所有注册的服务默认均为临时服务,也就是说这些服务默认均开启了主动上报自己健康信息的功能,默认上报间隔时间为5秒,如果15秒未上报,服务被标记为不健康服务,30秒未上报会剔除该服务,可通过heart-beat-interval来自定义这个时间,实际使用时为了快速检查和响应服务健康状态,一般会做如下上报参数的设定,如:

spring:
  cloud:
    nacos:

      discovery:
        ### 实例上报心跳间隔时间(毫秒)
        heart-beat-interval: 1000
       
### 实例上报心跳超时时间(毫秒)
        heart-beat-timeout: 3000
       
### 实例超时心跳被剔除时间(毫秒)
        ip-delete-timeout: 3000

说明:

服务实例注册后,会将上面的心跳设定规则同步到给该服务,作为后续该服务主动上报的规则使用。

2、如何发送beat

在nacos的client模块中,通过NamingProxy.sendBeat(…)来定时发送心跳beat上报,它会以http方式调取naming模块的/v1/ns/instance/beat接口发送心跳。

然后,通过HealthCheckReactor.scheduleNow(…)以多线程方式异步发送BeatTask任务,也就是Runnable检查任务。

二、服务端下探

默认情况下,nacos使用了tcp方式检查服务的健康状态,并且默认使用IP端口检查,而默认的端口为80,默认20秒探测一次,若探测失败则判别服务为不健康服务,但服务不会从nacos中移除。这些信息从nacos ui后台可清楚看到,当然,nacos还提供了http方式检查,需要我们手动配置,具体如下:

nacos 健康检查,微服务设计-Nacos,微服务,java,nacos

1、下探规则

1.1 TCP检查

TCP检查的基本逻辑就是对与服务关联的channel不断的ping服务的IP+端口port,进而记录和判别服务健康情况。

1.2 HTTP检查

HTTP检查的基本逻辑也比较简单,就是通过HttpAsyncClient不断对服务的IP+端口port+自定义服务接口地址进行访问,如果返回200,则代表服务是健康的。当然,如果不设定“自定义服务接口地址”,则直接检测IP+Port,具体如下:

nacos 健康检查,微服务设计-Nacos,微服务,java,nacos

2、集群下健康检查

集群环境下的服务健康检查,就是每个服务对应其分配的某个注册中心实例,对于临时实例:当注册中心接收到来自客户端主动上报的健康信息后,其会同步该信息到其它注册中心节点;而永久实例:当负责的注册中心所下探服务的健康信息发生改变后,其会同步变动信息到其它注册中心,进而实现集群下服务的健康检查功能。

3、为什么支持两种健康检查

当流量洪峰到来时,势必要比平时流量高出很多,那么就需要更多的服务实例来均衡应对高并发情况,当这波大流量过后,就不需要这么多服务实例了,所以临时实例比较适合此场景。当然,对于一些常备的服务实例,则需要持久化实例比较合适。

三、自我保护机制

Nacos为每个服务提供了保护阀值,其值范围在0-1之间,当服务实例健康个数占比(健康实例个数/总实例个数)小于这个保护阀值时,为降低服务雪崩的可能,也会向不健康实例发送请求,虽然牺牲了部分请求,但也起到了均摊流量的作用,避免整体系统无法提供服务的风险,这是值得的,这个阀值可在nacos ui后台手动设定,如下:

nacos 健康检查,微服务设计-Nacos,微服务,java,nacos

说明:

什么是服务雪崩?如服务调取顺序:A->B->C ,当A服务调用B服务,B服务调用C服务时,正常情况下,如果C服务有5个实例,每个实例能够达到的QPS为200,那么整个C服务可以达到1000的QPS,如果C服务宕掉了3个服务实例,注册中心通知B服务目前只有2个实例可用,那么每个C实例每秒均需要接收500次请求,显然大大超出了实例的性能范围,可能会停止服务,接着B服务也会停止服务,接着A服务也无法提供服务,这引起了服务级联崩掉的现象被称为“服务雪崩”。

四、一些注意事项

1、客户端上报

建议修改默认相关心跳上报时间,以适应实际环境下快速响应服务健康状态的处理,一般建议做如下设定,详细上面有介绍:

### 实例上报心跳间隔时间(毫秒)
heart-beat-interval: 1000
### 实例上报心跳超时时间(毫秒)
heart-beat-timeout: 3000
### 实例超时心跳被剔除时间(毫秒)
ip-delete-timeout: 3000

注意:

一般情况下,都会设置一个网关Gateway来统一管理进出,如果Gateway使用了如ribbon等负载策略时,单单修改客户端的上报时间是不够的,还需要修改ribbon的相关时间,如下:

ribbon:
  ServerListRefreshInterval:
3000

这样整体的最大时间可能为客户端上报的3秒,再加上ribbon的间隔时间3秒,所以最多可能时长为6秒才能上下线服务。

2、服务端下探

一般情况下,我们大多选择默认的TCP下探方式来检查服务健康情况,如果当服务下线后,我们有某些自定义行为的,一般可选择HTTP方式来下探服务健康情况。

3、保护阀值

服务的保护阀值主要就是为了预防流量洪峰时,因为原服务的某些实例不能正常工作,进而请求会堆压在正常服务的少许实例上,可能会导致服务宕掉,进而引起服务雪崩问题,增加这个阀值后,即使服务实例宕掉了,nacos依然分配流量给它,虽牺牲了一些流量,但保住了服务整体正常提供服务,一般常见设置这个阀值在0.75~0.85之间,具体请根据流量峰值设定。

nacos 健康检查,微服务设计-Nacos,微服务,java,nacos

 文章来源地址https://www.toymoban.com/news/detail-616566.html

到了这里,关于献给Nacos小白的一篇好文:服务的健康检查的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python - kubernetes中grpc服务健康检查实现

    概述 kubernetes本身不支持gRPC健康检查,本文记录使用 ‘grpc-health-probe’ 实现grpc服务的健康检查 ‘grpc-health-probe’,这是 Kubernetes 原生的健康检查 gRPC 应用程序的方法 官方参考文档:https://kubernetes.io/zh-cn/blog/2018/10/01/health-checking-grpc-servers-on-kubernetes/ 示例 下载grpc-health-probe文件

    2024年02月09日
    浏览(41)
  • Asp .Net Core 系列: 集成 Consul 实现 服务注册与健康检查

    官网:https://www.consul.io/ Consul 是一款开源的服务发现和配置管理工具,它能够监控应用程序和服务之间的通信,并提供了一组 API 和 Web UI,用于管理服务和配置。 Consul 是分布式的、高可用的、可横向扩展的,具备以下特性: 服务发现:Consul 通过 DNS 或者 HTTP 接口使服务注册

    2024年01月21日
    浏览(47)
  • SpringCloud Alibaba 深入源码 - Nacos 和 Eureka 的区别(健康检测、服务的拉取和订阅)

    目录 一、Nacos 和 Eureka 的区别 1.1、以 Nacos 注册流程来解析区别 a)首先,我们的服务启动时。都会把自己的信息提交给注册中心,然后注册中心就会把信息保存下来. 注册的信息实际上就是一个嵌套 Map,结构为 MapString, MapString, Service,第一层 key 就是 namespace_id,起到环境隔

    2024年01月22日
    浏览(52)
  • 微服务之以nacos注册中心,以gateway路由转发服务调用实例(第一篇)

    nacos 2.1.1 springCloud 2021.0.7 springboot 2.6.14 spring-cloud-starter-alibaba-nacos-discovery 2021.1 spring-cloud-starter-alibaba-nacos-config 2021.1 新建仓库 可使用github/gitlab/码云等其它代码库,建立自己的项目仓库 我这里使用的是码云 码云地址 拉取仓库项目 git clone 你新建的仓库地址 下载后,用idea打开(这

    2024年02月07日
    浏览(41)
  • AIGC大模型必备知识——LLM ,你知道它是如何训练的吗?小白必读深度好文

    Look!👀我们的大模型商业化落地产品 📖更多AI资讯请👉🏾关注 Free三天集训营助教在线为您火热答疑👩🏼‍🏫 近年来,人工智能(AI)领域经历了令人瞩目的增长,尤其是自然语言处理(NLP)。你知道是什么推动了NLP领域的这种飞速发展吗?没错,那就是大型语言模型

    2024年01月25日
    浏览(44)
  • 【微服务部署】03-健康检查

    Liveness Readiness Startup 1.1 LivenessProbe 判断服务是否存活 结束“非存活”状态服务 根据重启策略决定是否重启服务 1.2 ReadinessProbe 判断服务是否“就绪” “就绪”状态的服务可以接收请求 非“就绪”状态的服务将会被从流量负载中摘除 1.3 StartupProbe 检测应用程序是否启动成功

    2024年02月11日
    浏览(42)
  • 解决pod健康检查问题

    引自:Solving the mystery of pods health checks failures in Kubernetes。原文中的某些描述并不清晰,本文作了调整。 很早以前,环境中的pod有时候会遇到健康检查失败的问题,但并没有什么明显表征,且几乎是立马就会恢复。由于这种情况很少发生,且不会对业务造成影响,因此起初并

    2024年02月03日
    浏览(40)
  • docker中设置容器健康检查

    在 HEALTHCHECK [选项] CMD 后面的命令,格式和 ENTRYPOINT 一样,分为 shell 格式,和 exec 格式。命令的返回值决定了该次健康检查的成功与否: 0 :成功; 1 :失败; 2 :保留值,不要使用 容器启动之后,初始状态会为 starting (启动中)。Docker Engine会等待 interval 时间,开始执行健康

    2024年02月15日
    浏览(51)
  • 17、Health Check 健康检查

    强大的自愈能力是kubernetes容器编排引擎的重要特性。 自愈的默认实现方式是自动重启发生故障的容器 。除此之外,还可通过 Liveness和Readiness探测机制 设置更精细的健康检查,进而实现如下要求: 零停机部署 避免部署无效的镜像 更加安全的滚动升级 Liveness探测和Readiness探测

    2024年02月07日
    浏览(49)
  • kylin集群反向代理(健康检查)

            前面一篇文章提到了使用nginx来对kylin集群进行反向代理, kylin集群使用nginx反向代理-CSDN博客 文章浏览阅读349次,点赞8次,收藏9次。由于是同一个集群的,元数据没有变化,所以,直接将原本的kylin使用scp的方式发送到其他节点即可。说明一下,192.168.200.12是我

    2024年02月02日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包