当前位置: 首页 > news >正文

SOFABoot-06-健康检查

前言

大家好,我是老马。

sofastack 其实出来很久了,第一次应该是在 2022 年左右开始关注,但是一直没有深入研究。

最近想学习一下 SOFA 对于生态的设计和思考。

sofaboot 系列

SOFABoot-00-sofaboot 概览

SOFABoot-01-蚂蚁金服开源的 sofaboot 是什么黑科技?

SOFABoot-02-模块化隔离方案

SOFABoot-03-sofaboot 介绍

SOFABoot-04-快速开始

SOFABoot-05-依赖管理

SOFABoot-06-健康检查

SOFABoot-07-版本查看

SOFABoot-08-启动加速

SOFABoot-09-模块隔离

SOFABoot-10-聊一聊 sofatboot 的十个问题

健康检查

SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。

如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例

引入健康检查扩展

要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可:

<dependency>
    <groupId>com.alipay.sofa</groupId>
    <artifactId>healthcheck-sofa-boot-starter</artifactId>
</dependency>

如果不引入 SOFABoot 的健康检查扩展,用户依然可以直接依赖 HealthIndicator 接口进行原生的 Spring Boot Actuator 的 Liveness Check。

安全提醒

从 SOFABoot 2.3.0 开始,由于健康检查能力依赖于 SpringBoot 1.4.x 里的 Actuator 组件,而 Actuator 会默认开启很多 EndPoint,例如 /dump,/trace 等等,可能存在安全风险,可以参照官方文档里的安全建议进行设置。

SpringBoot 1.5.x 和 SpringBoot 2.x 已修复了部分安全行为,SOFABoot 将通过升级 SpringBoot 内核进行支持。

查看健康检查结果

加入健康检查扩展之后,我们可以直接在浏览器中输入 http://localhost:8080/health/readiness 来查看 Readiness Check 的结果。

如果要查看 Liveness Check 的结果,可以直接查看 Spring Boot 的健康检查的 URL http://localhost:8080/health。

除了通过 URL 来查看健康检查的结果之外,在 SOFABoot 中,还可以通过查看具体的日志来确定健康检查的结果,日志的目录位于 health-check 目录下,日志的内容大概如下:

2018-04-06 23:29:50,240 INFO  main                             - Readiness check result: success

目前 SOFA 中间件已经通过 SOFABoot 的 Readiness Check 的能力来控制了上游流量的进入,但是一个应用的流量可能并不是全部都是从中间件进入的,比较常见的还有从负载均衡器进入的,为了控制从负载均衡器进入的流量,建议使用者通过 PAAS 来访问 Readiness Check 的结果,根据结果来控制是否要在负载均衡器中上线对应的节点。

注: 自 SOFABoot 2.x 之后,不再间接引入 spring-boot-starter-web 依赖,如果需要在浏览器中查看健康检查结果,需要额外在工程中引入 web 容器依赖。

注: 在 SOFABoot 3.x 中调整了 endpoint 路径,health/readiness 更改为 actuator/readiness

扩展 Readiness Check 能力

在 Readiness Check 的各个阶段,SOFABoot 都提供了扩展的能力,应用可以根据自己的需要进行扩展,在 2.x 版本中,可供扩展的点如下:

回调接口 	说明
org.springframework.context.ApplicationListener 	如果想要在 Readiness Check 之前做一些事情,那么监听这个 Listener 的 SofaBootBeforeHealthCheckEvent 事件。
org.springframework.boot.actuate.health.HealthIndicator 	如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。
com.alipay.sofa.healthcheck.startup.SofaBootAfterReadinessCheckCallback 	如果想要在 Readiness Check 之后做一些事情,那么可以扩展 SOFABoot 的这个接口。

在 3.x 版本中,可供扩展点如下:

回调接口 	说明
com.alipay.sofa.healthcheck.core.HealthChecker 	如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,可以直接扩展该接口。相较于 Spring Boot 本身的 HealthIndicator 接口,该接口提供了一些额外的参数配置,比如检查失败重试次数等。
org.springframework.boot.actuate.health.HealthIndicator 	如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。
org.springframework.boot.actuate.health.ReactiveHealthIndicator 	在 WebFlux 中,如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。
com.alipay.sofa.healthcheck.startup.ReadinessCheckCallback 	如果想要在 Readiness Check 之后做一些事情,那么可以扩展 SOFABoot 的这个接口。

需要指出的是,上述四个扩展接口均可以通过 Spring Boot 标准的 Ordered, PriorityOrdered 和注解 @Order 实现执行顺序的设置。

Readiness Check 配置项

应用在引入 SOFABoot 的健康检查扩展之后,可以在 Spring Boot 的配置文件 application.properties 中添加相关配置项来定制 Readiness Check 的相关行为。

Readiness Check 配置项 	说明 	默认值 	开始支持版本
com.alipay.sofa.healthcheck.skip.all 	是否跳过整个 Readiness Check 阶段 	false 	2.4.0
com.alipay.sofa.healthcheck.skip.component 	是否跳过 SOFA 中间件的 Readiness Check 	false 	2.4.0
com.alipay.sofa.healthcheck.skip.indicator 	是否跳过 HealthIndicator 的 Readiness Check 	false 	2.4.0
com.alipay.sofa.healthcheck.component.check.retry.count 	组件健康检查重试次数 	20 	2.4.10 (之前版本重试次数为 0)
com.alipay.sofa.healthcheck.component.check.retry.interval 	组件健康检查重试间隔时间 	1000 (单位:ms) 	2.4.10 (之前版本重试间隔为 0)
com.alipay.sofa.healthcheck.module.check.retry.count 	sofaboot 模块健康检查重试次数 	0 	2.4.10
com.alipay.sofa.healthcheck.module.check.retry.interval 	sofaboot 模块健康检查重试间隔时间 	1000 (单位:ms) 	2.4.10 (之前版本重试间隔为 0)

小结

希望本文对你有所帮助,如果喜欢,欢迎点赞收藏转发一波。

我是老马,期待与你的下次相遇。

相关文章:

  • 7 合并两个有序列表
  • MediaPipe软件包如何构建和安装
  • Vue中组件和插件有什么区别?
  • Android 根据Url使用Retrofit框架进行文件下载
  • 数字内容体验优化用户参与路径
  • AI比人脑更强,因为被植入思维模型【15】马斯洛需求层次理论
  • 使用Python开发自动驾驶技术:车道线检测模型
  • Java的流程控制
  • 机器学习与数据分析相关数学基础知识总结
  • Redis 内存管理
  • Java中的多态
  • Java IO性能优化:字节流与缓冲流的对比与实战分析
  • Cache与虚拟存储:计算机系统中的“快取侠”与“空间魔术师”
  • 导出tdengine创建表语句
  • Java并发编程(1)
  • 【指针(2)-- 使用指针的技巧】
  • BBR 和 CUBIC 对长肥管道的不同反应
  • 使用请求调用本地部署的stable-diffusion接口
  • 从零开始实现 C++ TinyWebServer 处理请求 HttpRequest类详解
  • 3D引擎:Three.js有什么有什么优缺点?
  • 提升学历最快是哪种方式/seo需要会什么
  • 做印刷网站公司/今天的新闻 联播最新消息
  • 百度网站体检/申请自媒体平台注册
  • 做网站多少钱西宁君博专注/郑州seo外包收费标准
  • 高中作文网站/软文营销案例分析
  • 乐清网站制作公司/百度收录规则2022