Muh*_*eed 10 url api-design health-monitoring kubernetes kubernetes-health-check
我有两个我控制的API A和B,都有准备和生活健康检查.A依赖于B.
A
/foo - This endpoint makes a call to /bar in B
/status/live
/status/ready
B
/bar
/status/live
/status/ready
Run Code Online (Sandbox Code Playgroud)
A的准备情况运行状况检查是否应该因为依赖性而调用API B的就绪状况检查?
Rya*_*son 10
如果服务 A 可以处理业务请求,它就准备好了。因此,如果能够到达 B 是它需要做的事情的一部分(看起来确实如此),那么它应该检查 B。
让 A 检查 B 的一个优点是您可以在错误的滚动升级中快速失败。假设您的 A 配置错误,因此升级为 B 提供了错误的连接详细信息 - 也许 B 的服务名称作为环境变量注入,而新版本有错字。如果您的 A 实例在启动时检查 Bs,那么您可以更轻松地确保升级失败并且没有流量进入新的错误配置的 Pod。有关更多信息,请参阅https://medium.com/spire-labs/utilizing-kubernetes-liveness-and-readiness-probes-to-automatically-recover-from-failure-2fe0314f2b2e
通常,A 检查 B 的活动端点或任何最小可用性端点而不是 B 的就绪端点就足够了。这是因为 kubernetes 无论如何都会为您检查 B 的就绪探测器,因此 A 可以访问的任何 B 实例都将是就绪的。如果 B 的就绪端点执行的检查多于活性端点,则调用 B 的活性端点而不是就绪端点会有所不同。请记住,kubernetes 会定期调用这些探测器——就绪和活跃——它们都有一个周期。区别在于 Pod 是退出服务流量(如果准备失败)还是重新启动(如果活跃失败)。您不是在尝试进行端到端的交易检查,您希望这些检查包含最少的逻辑并且不会消耗太多负载。
如果 A 的就绪性实现中的代码进行检查而不是在 k8s 级别(在 Pod 规范本身中)进行检查,则更可取。最好在 k8s 级别执行此操作,因为理想情况下您想知道容器中运行的代码确实连接。
检查依赖服务是否可用的另一种方法是检查 initContainer。使用 initContainers 可以避免在启动期间看到多次重启(通过确保正确的顺序),但通过探测器对依赖项进行检查可以更深入(如果在应用程序的代码中实现),并且探测器将在启动后继续定期运行。因此,同时使用两者可能是有利的。
小心检查其他服务是否准备就绪,因为它可能导致级联不可用。例如,如果一个后端短暂出现故障并且前端正在探测它,那么前端也将变得不可用,因此将无法显示正确的错误消息。您可能希望从简单的探针开始,然后小心地添加复杂性。
参考Microsoft的实施弹性应用程序教程。特别是运行状况监视,建议如果当前服务的总体状态取决于依赖项的状态,则仅当其依赖项是健康的时,服务的健康状态才应该是健康的
但是,eShopOnContainers的MVC Web应用程序对其余微服务具有多个依赖性。因此,它
AddUrlCheck为每个微服务调用一个方法,如以下示例所示:
// Startup.cs from the MVC web app
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<AppSettings>(Configuration);
services.AddHealthChecks(checks =>
{
checks.AddUrlCheck(Configuration["CatalogUrl"]);
checks.AddUrlCheck(Configuration["OrderingUrl"]);
checks.AddUrlCheck(Configuration["BasketUrl"]);
checks.AddUrlCheck(Configuration["IdentityUrl"]);
});
}
}
Run Code Online (Sandbox Code Playgroud)
因此,微服务在所有检查也都正常之前不会提供“健康”状态。
重点矿
因此,为了更直接地回答您的问题
由于依赖关系,是否应该为A的就绪状态健康检查调用API B的就绪状态健康检查?
我会说是的。特别是如果依赖项的健康状况B直接影响的稳定性A。
| 归档时间: |
|
| 查看次数: |
501 次 |
| 最近记录: |