如果服务太忙,是否应该标记为 UNHEALTHY?
Should a service marked as UNHEALTHY if it's too busy?
Health Check就像一个简单的ping-pong测试,如果服务没有响应,那么它是不健康的。如果有什么东西不健康,应该有警报。
但是,如果服务太忙但仍然有响应,我是否应该将服务标记为 不健康(可能只是短时间过载) ?
大部分健康检查 doesn't have a BUSY
state(只有一个 SERVING
和
NOT_SERVING
状态)
enum ServingStatus {
UNKNOWN = 0;
SERVING = 1;
NOT_SERVING = 2;
}
连接到繁忙的服务毫无意义。但既然它仍然正常工作,它仍然算作一个健康的服务吧?
或者负载均衡器应该仍然能够连接到它,但是服务应该 return 一个 TOO_BUSY
状态来拒绝传入的请求(那为什么不标记它是 不健康)?
未将其标记为不健康的原因:
- 如果您的服务管理器重新启动不健康的服务,那么它可能会造成更大的损害。
- 如果您需要在凌晨 3 点叫醒您的团队是因为服务不健康,而不是因为服务繁忙,那么您就是在浪费团队的精力。
- 如果您的服务不健康是因为您的基础设施缺少合适的形容词,请添加形容词。
最后也是最重要的:
- 真正的问题是,您为什么要尝试阻止服务加载?您是否担心因为服务器忙于响应而导致请求失败?也许是时候扩大规模了。如果每当服务繁忙时,负载开始神奇地自行缓解,那么您的自动缩放器怎么会知道您的服务需要缩放。您的自动缩放器需要服务处于繁忙状态,以便它可以缩放。如果您不使用自动缩放器,那么您为什么要关心它是 "BUSY" 还是 "UNHEALTHY"?
Health Check就像一个简单的ping-pong测试,如果服务没有响应,那么它是不健康的。如果有什么东西不健康,应该有警报。
但是,如果服务太忙但仍然有响应,我是否应该将服务标记为 不健康(可能只是短时间过载) ?
大部分健康检查 doesn't have a BUSY
state(只有一个 SERVING
和
NOT_SERVING
状态)
enum ServingStatus {
UNKNOWN = 0;
SERVING = 1;
NOT_SERVING = 2;
}
连接到繁忙的服务毫无意义。但既然它仍然正常工作,它仍然算作一个健康的服务吧?
或者负载均衡器应该仍然能够连接到它,但是服务应该 return 一个 TOO_BUSY
状态来拒绝传入的请求(那为什么不标记它是 不健康)?
未将其标记为不健康的原因:
- 如果您的服务管理器重新启动不健康的服务,那么它可能会造成更大的损害。
- 如果您需要在凌晨 3 点叫醒您的团队是因为服务不健康,而不是因为服务繁忙,那么您就是在浪费团队的精力。
- 如果您的服务不健康是因为您的基础设施缺少合适的形容词,请添加形容词。 最后也是最重要的:
- 真正的问题是,您为什么要尝试阻止服务加载?您是否担心因为服务器忙于响应而导致请求失败?也许是时候扩大规模了。如果每当服务繁忙时,负载开始神奇地自行缓解,那么您的自动缩放器怎么会知道您的服务需要缩放。您的自动缩放器需要服务处于繁忙状态,以便它可以缩放。如果您不使用自动缩放器,那么您为什么要关心它是 "BUSY" 还是 "UNHEALTHY"?