docker - 如何为 gRPC 服务实现 liveness 和 readiness 端点?
问题描述
我有一个 gRPC 服务,它使用 tcp 侦听器侦听端口。该服务是 Docker 化的,最终我想在 Kubernetes 集群中运行它。
我想知道为检查我的服务的健康状况而实施活动性和就绪性探测的最佳方法是什么?
/health
我应该在另一个 goroutine 中运行一个单独的 http 服务器并响应/ready
路径吗?- 或者,我是否也应该为我的服务的活跃性和就绪性调用 gRPC 并使用 gRPC 客户端来查询这些端点?!
解决方案
以前我在应用程序中运行了一个单独的 http 服务器,仅用于运行状况检查(这是因为 AWS 应用程序负载均衡器只有 http 检查,我不了解 kube)。
如果您将 http 服务器作为单独的例程运行,并将 grpc 服务器运行在主 goroutine 上,那么您应该避免 grpc 服务器出现故障并且 http 仍然为 200 - OK(假设您还没有方法让 http健康检查您的 grpc)。
您还可以使用 goroutines 的 heatbeat 模式,它由 http 服务器控制并接受来自 grpc 服务器的心跳以确保一切正常。
如果您运行 2 个服务器,它们将需要在不同的端口上运行,这对于一些需要 1 个服务端口的调度程序(如 ECS)来说可能是一个问题。有一些示例和软件包允许您将多个协议多路复用到同一端口。我猜 kube 支持多个端口服务,所以这可能不是问题。
多路复用示例的链接:
推荐阅读
- encryption - 端到端加密静态网站内容
- python - Python lowriter 调用获得与终端不同的结果
- lammps - Windows 10 AMMPS 更改 DocumentRoot
- google-apps-script - 谷歌表格自动过滤器
- c - 给定时间戳,批量混合音频。多个偏移,只有两个声音。如何有效地做到这一点?
- plsql-psp - 带有大小写条件的 pl/sql 日期过滤器
- javascript - 无法按整数值对对象数组进行排序
- python - 在文件中看不到 csv 文件(从 df 转换而来)
- python - 无需登录即可从 url 验证 Django
- r - 将“NA”字符串更改为 -99.99