表示属于 ELB 的实例不健康的 http 状态代码

http status code to signal an instance that is part of an ELB is unhealthy

根据 https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.healthstatus.html,Web 服务应响应 200 OK HTTP 状态代码以指示应用程序健康,或 任何其他 响应不健康。

我的问题是哪种 HTTP 状态最适合不健康的应用程序?

在下面的所有 HTTP 状态 类 中

简单的逻辑表明它应该是一个服务器错误而不是其他任何东西,并且在所有 5xx Server errors 代码中 503 Service Unavailable 最自然地适合但是我找不到任何支持这个的文档。

My questions is which HTTP status is most appropriate for an unhealthy application?

503 Service Unavailable, or a lower level TCP RST, are perfectly satisfactory ways for a service to announce that it isn't currently available. You can use Retry-After 如果您想建议等待时间。我还没有看到任何文件表明 ELB 客户端会遵守 header.

GCP and Azure are similar; 200 Healthy, anything else is not. The Azure document suggests a 500 Internal Server Error 作为一个可能的候选者,这当然很好(Y00 是所有 Yxx 代码的粗粒度近似值)。

协议 Consul checks is similar -- 2xx for healthy, 429 Too Many Requests 警告(这是一个非常奇怪的选择),以及其他任何失败。

我不太喜欢使用 Client Error 来描述什么是服务器问题;但我不知道它真的会伤害任何东西。 Retry-After 的语义实际上只为 3xx 和 429/503 明确定义,因此如果您希望利用它,您应该限制自己使用这些代码。

否则,您可以翻阅status code registry,看看是否有您认为更合适的代码。