oslo 中间件健康检查¶
https://blueprints.launchpad.net/oslo.middleware/+spec/oslo-middleware-healthcheck
一个通用且可扩展的健康检查中间件
问题描述¶
目前没有简单且通用的方法来确保 Openstack API 端点能够处理请求。但使用负载均衡器的部署者希望有一种简单的方法来知道 API 端点是否能够处理请求。
对于依赖后端(如数据库)的 API 端点,仅检查 API 端点在端点根 URL 上不返回 50x 错误是不够的。像 nova 这样的应用程序即使数据库不可用,也可能在‘/’上返回 200。
提议的变更¶
这个想法是创建一个所有 Openstack 组件都可以使用的 wsgi 中间件
[filter:healthcheck]
paste.filter_factory = oslo.middleware.healthcheck:Healthcheck
path = /healthcheck (default)
backends = database,disable_by_file (optional, default: empty)
# used by the 'disable_by_file' backend
disable_by_file_path = /var/run/nova/healthcheck_disable (optional, default: empty)
如果一切正常,中间件将返回“200 OK”,否则将返回“503 <原因>”,并说明为什么不应该使用此 API。
“backends” 将是 “oslo.middleware.healthcheck” 命名空间中的 stevedore 扩展的名称。
oslo.middleware 还会为这些扩展提供一个基类
HealthcheckResult = namedtuple('HealthcheckResult', ['available', 'reason'], verbose=True)
class HealthcheckBaseExtension(object):
def __init__(self, conf):
self.conf = conf
@abc.abstractmethod
def healthcheck():
"""method called by the healthcheck middleware
return: HealthcheckResult object
"""
class MyDBHealthcheck(HealthcheckBaseExtension):
def healthcheck():
...
return HealthcheckResult(available=False,
reason="Fail to connect to the database")
因此 setup.cfg 将具有如下 entry_point
[entry_points]
healthcheck =
database = oslo.db:DBHealthcheck
disable_by_file = oslo.middleware.healthcheck:DisableByFileHealthcheck
‘DisableByFileHealthcheck’ 扩展将在 ‘disable_by_file_path’ 文件缺失时返回
return HealthcheckResult(available=False, reason="DISABLED BY FILE")
否则
return HealthcheckResult(available=True, reason="")
此外,虽然不属于此蓝图,但 oslo.db 可以为数据库检查提供通用的实现。
备选方案¶
一些项目已经提出了相关工作,但从未合并
部署者可以在他们的云中准备资源,并构建 HTTP 请求来查询这些资源以检查一切是否正常工作,但这种方法效率不高,需要准备一些资源,HTTP 请求将包含需要存储在负载均衡器上的凭据。因此,当我们可以简单地在数据库中执行 ‘select now();’ 来知道后端是否正常工作时,这种方法有点繁重。
Impact on Existing APIs¶
Swift 已经有了这种中间件,我们必须确保保持相同的行为
https://github.com/openstack/swift/blob/master/swift/common/middleware/healthcheck.py
安全影响¶
建议阻止此 URL 或随机化用于健康检查的 URL,因为此功能明确专用于负载均衡器等部署者使用的工具。
性能影响¶
无。
Configuration Impact¶
中间件将是可配置的
path: 此中间件的 URL 路径(默认:/healthcheck)
backends: 要使用的 stevedore 扩展列表
以及 DisablebyfileHealthcheck,配置如下
disable_by_file_path 用于以管理方式返回 503 的文件的位置(可选)
开发人员影响¶
N/A
Testing Impact¶
中间件将由单元测试覆盖,并且每个集成了它的服务都将具有 tempest 测试。
实现¶
负责人¶
- 主要负责人
Mehdi Abaakouk (sileht)
- 其他贡献者
Julien Danjou (jdanjou)
里程碑¶
完成目标里程碑
Kilo-1
工作项¶
编写中间件
更新应用程序以使用它
孵化¶
N/A
文档影响¶
N/A
依赖项¶
无
参考资料¶
无
注意
本作品采用知识共享署名 3.0 非移植许可协议授权。 http://creativecommons.org/licenses/by/3.0/legalcode