事情是这样的:
- 我们已经实现了一个 C++ RESTful API 服务器,带有内置的 HTTP 解析器,并且没有像 apache 或任何类似的标准 HTTP 服务器
- 它已经在 Amazon 结构中使用了几个月,使用普通通信和 SSL 通信,并且没有发现与 Amazon 基础设施相关的问题
- 我们正在使用 Amazon ELB 部署我们的第一个后端
- Amazon ELB 有一个可定制的运行状况检查系统,但也是一个自动系统,如上所述here http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html
- 我们没有找到有关健康检查系统发送哪些数据的文档
- 后端简单地挂在套接字读取指令上,最终关闭连接
我不是在寻找问题的解决方案,因为后端不是基于标准的 Web 服务器,只要有人知道 ELB 健康检查系统正在发送什么样的消息,因为我们没有找到有关此的文档,任何地方。
非常感谢您的帮助。谢谢。
Amazon ELB 具有可定制的健康检查系统,但也可作为
自动的,如上所述here http://docs.amazonwebservices.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html
With 可定制您可能指的是通过 AWS 管理控制台配置的运行状况检查(请参阅配置健康检查设置 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/configure-healthcheck.html)或通过 API(参见配置健康检查 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_ConfigureHealthCheck.html).
字段中概述了以这种方式配置的通过健康检查的要求Target of the 健康检查 http://docs.aws.amazon.com/ElasticLoadBalancing/latest/APIReference/API_HealthCheck.html数据类型文档:
指定正在检查的实例。协议是 TCP,
HTTP、HTTPS 或 SSL。有效端口的范围是一 (1) 到
65535。
Note
TCP 是默认值,指定为 TCP: 端口对,例如
“TCP:5000”。在这种情况下,健康检查只是尝试打开 TCP
连接到指定端口上的实例。连接失败
在配置的超时时间内被认为是不健康的。
SSL 也指定为 SSL: 端口对,例如 SSL:5000。
对于 HTTP 或 HTTPS 协议,情况有所不同。你必须
在字符串中包含 ping 路径。 HTTP 被指定为
HTTP:端口;/;PathToPing;分组,例如
“HTTP:80/天气/美国/华盛顿州/西雅图”。在这种情况下,HTTP GET 请求是
发布到给定端口和路径上的实例。任何答案其他
在超时时间内超过“200 OK”被认为是不健康的。
HTTP ping 目标的总长度需要为 1024 16 位
Unicode 字符或更少。
[强调我的]
With 自动的您可能指的是段落中描述的健康检查Cause within 为什么健康检查的URL与API和控制台中显示的URL不同? http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/ts-elb-healthcheck.html#ts-elb-healthcheck-different-url:
除了为负载均衡器配置的运行状况检查之外,
进行第二次健康检查通过服务来防止
因未经授权而终止实例而导致的潜在副作用
被注销。为了执行此检查,负载均衡器会打开一个
运行状况检查配置到的同一端口上的 TCP 连接
使用,健康检查完毕后关闭连接
完全的。[强调我的]
这段落Solution澄清此处的有效负载为零,即它类似于上面针对可配置运行状况检查描述的非 HTTP/HTTPS 方法:
这项额外的健康检查不会影响您的性能
应用程序,因为它没有向您的后端发送任何数据
实例。您无法禁用或关闭此运行状况检查。
总结/解决方案
假设你的RESTful API 服务器,内置 HTTP 解析器实际上应该只提供 HTTP 服务,您将需要处理两个健康检查:
- 第一个是你自己配置的作为 HTTP:port;/;PathToPing- 您将收到
HTTP GET
请求并必须回答200 OK
在指定的超时时间内被认为是健康的。
- 第二个由服务自动配置 - 它将在上面配置的 HTTP 端口上打开一个 TCP 连接,不会发送任何数据,然后在健康检查完成后关闭连接。
总之,您的服务器可能已经表现得很好,而您只是对第二次运行状况检查的行为感到恼火 - ELB 是否真的认为您的服务器不健康?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)