怎样在Python的ASGI服务中配置健康检查与Liveness探针

酷丽姑娘_2644

酷丽姑娘_2644

2026-10-07

230人浏览

原创

asgi应用需手动实现健康检查路由,因asgi规范本身不定义liveness/readiness端点;须显式暴露如/live和/ready路径,分别验证进程存活与依赖就绪,并绕过中间件、控制响应精简、设置超时。

怎样在python的asgi服务中配置健康检查与liveness探针

ASGI应用里加健康检查路由要自己写,没有内置

ASGI规范本身不定义健康检查端点,liveness 或 readiness 都得手动实现。主流ASGI服务器(如Uvicorn、Hypercorn)只负责转发请求,不提供默认健康接口。你得在应用逻辑里显式暴露一个路径,比如 /healthz 或 /live,并确保它返回 200 状态码和轻量响应体。

常见错误是直接复用 Flask/FastAPI 的 @app.get("/health") 写法,但若你用的是纯 ASGI app(比如自定义 app(scope, receive, send)),就必须手动构造响应 —— 否则会 500 或超时。

  • FastAPI 用户:用 @app.get("/live") 即可,它底层已适配 ASGI,但注意别在该路由里调用阻塞 I/O(如同步数据库查询),否则会卡住整个事件循环
  • 纯 ASGI app(如 bare async def app(...)):必须用 await send(...) 发送 status=200 和 body=b"OK",不能 return 字符串
  • 路径名建议统一用 /live(liveness)和 /ready(readiness),避免和前端路由冲突;Kubernetes 默认探针路径是 /healthz,但需提前和运维对齐

readiness 探针要检查依赖服务,不能只返回 OK

readiness 的语义是“是否准备好接收流量”,不是“进程是否活着”。所以它必须验证下游关键依赖:数据库连接、缓存、外部 API 可达性等。如果只返回 200 OK,Kubernetes 可能将流量导到尚未完成初始化或依赖失联的实例上。

典型陷阱是把 readiness 和 liveness 写成同一个函数。它们职责不同:liveness 应极简(仅确认进程未卡死),readiness 可稍重但必须有超时控制。

python-script-generator
python-script-generator

快速生成专业的 Python 脚本和应用代码。一键创建完整项目结构,支持CLI、API、爬虫、Bot、Django等多种项目类型,包含完整的项目结构、配置文件、依赖管理、测试、README和文档。

下载
  • 数据库检查用异步驱动(如 asyncpg 或 aiomysql),避免 psycopg2 这类同步库造成阻塞
  • 所有依赖检查必须设 timeout(例如 asyncio.wait_for(..., timeout=2.0)),否则探针超时会导致 Pod 被反复重启
  • 缓存检查别用 GET 某个 key,而应发 PING 命令(Redis)或 INFO(Memcached),更轻量且不污染业务数据

Uvicorn 启动参数影响探针响应延迟

Uvicorn 的 --workers、--limit-concurrency 和 --timeout-keep-alive 会间接导致健康检查失败。比如高并发下连接池耗尽,/ready 因拿不到 DB 连接而超时;或 --timeout-keep-alive=5 太短,导致探针 TCP 连接被主动断开。

Kubernetes 默认探针超时是 1 秒,失败阈值 3 次。如果 Uvicorn 响应慢于这个窗口,就会触发误杀。

  • 生产环境建议固定 --workers=1(配合 Kubernetes 多副本),避免多进程间状态不一致影响 readiness 判断
  • --limit-concurrency 设为略高于预期 QPS,防止健康检查请求排队等待
  • 在 livenessProbe 的 YAML 中显式设置 timeoutSeconds: 2 和 periodSeconds: 5,比默认值更宽松

HTTP 头和响应体必须精简,避免中间件干扰

很多项目会全局挂载认证中间件(如 JWT 校验)、CORS、日志中间件。这些可能拦截或修改健康检查请求:比如认证中间件返回 401,CORS 中间件添加大量 Access-Control-* 头,日志中间件打满磁盘。

最稳妥的方式是让健康检查路由绕过所有中间件 —— 不是“忽略”,而是从 ASGI 生命周期最前端处理。

  • FastAPI:用 @app.api_route("/live", include_in_schema=False) 并确保没套 Depends(),同时在 middleware 注册时用 path="/live" 排除
  • Starlette:在 MiddlewareStack 外层单独写一个 live_app = Starlette(routes=[Route("/live", ...)]),再用 Mount 拼进主应用
  • 务必检查响应头:禁用 Content-Encoding(gzip 会增加 CPU)、删掉 Server、X-Powered-By 等非必要字段,Body 控制在 2–4 字节(如 b"ok")
健康检查真正难的不是写那几行代码,而是厘清每个探针背后的语义边界——liveness 是进程级心跳,readiness 是服务就绪快照,二者不可混用,也不能被任何中间件劫持。Kubernetes 不会替你判断“该不该转发流量”,它只认 HTTP 状态码和超时。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1671

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4164

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1669

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

24077

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2947

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

2967

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1163

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2303

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程