如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
用于使用 STDIO/HTTP 的函数的反向代理/中间件
of-watchdog 实现了一个监听端口 8080 的 HTTP 服务器,并作为运行中函数和微服务的反向代理。它可以独立使用,也可以作为 OpenFaaS 容器的入口点。
of-watchdog 此版本的 OpenFaaS 看门狗增加了对 HTTP 代理和 STDIO 的支持,这实现了内存重用和极快的请求服务。它不旨在替代 Classic Watchdog,而是为需要这些功能的用户提供另一种选择。
可通过 GitHub releases 下载,但该看门狗旨在通过多阶段构建从发布到 ghcr.io 的容器镜像中复制:
FROM --platform=${TARGETPLATFORM:-linux/amd64} ghcr.io/openfaas/of-watchdog:0.9.11 as watchdog
FROM --platform=${TARGETPLATFORM:-linux/amd64} node:18-alpine as ship
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
参见示例模板
of-watchdog 提供多种模式,这些模式会改变它与微服务或函数代码的交互方式。
三种看门狗模式的比较。左上角 - Classic Watchdog,右上角:afterburn(已弃用),左下角 - of-watchdog 的 HTTP 模式。
三种看门狗模式的比较。左上角 - Classic Watchdog,右上角:afterburn(已弃用),左下角 - of-watchdog 的 HTTP 模式。
由看门狗提供的私有端点:
/_/health/_/ready``/_/health``max_inflight其他所有 HTTP 请求:
/*对于目标语言有可用 HTTP 服务器实现的所有模板,推荐使用 HTTP 模式。
参见一些不同的模板示例,更多模板可通过 faas-cli template store list 获取,例如 golang-middleware、python3-http 和 node*。
faas-cli template store list``golang-middleware``python3-http``node*
要获取特定模板的仓库,请使用 faas-cli template store describe NAME。
faas-cli template store describe NAME
看门狗启动时会 fork 一个进程,然后将传入看门狗的所有请求转发到容器内的 HTTP 端口。
优点:
/tmp/测试示例用法:
$ go build && mode=http port=8081 fprocess="docker run -p 80:80 --name nginx -t nginx" upstream_url=http://127.0.0.1:80 ./of-watchdog
$ go build && mode=http port=8081 fprocess="node expressjs-hello-world.js" upstream_url=http://127.0.0.1:3000 ./of-watchdog
缺点:
目前无法将看门狗自身的消息以 JSON 格式输出:
2024/04/25 17:29:06 Listening on port: 8080
2024/04/25 17:29:06 Writing lock-file to: /tmp/.lock
2024/04/25 17:29:06 Metrics listening on port: 8081
2024/04/25 17:29:08 GET / - 301 Moved Permanently - ContentLength: 39B (0.0049s) [test]
不过,您可以用 JSON 编写自己的日志行。只需将 prefix_logs 环境变量设置为 false,即可移除看门狗原本会添加的默认前缀。
prefix_logs``false
启用 prefix_logs 时:
prefix_logs
2024-04-24T21:00:04Z {"msg": "unable to connect to database"}
禁用 prefix_logs 时:
prefix_logs
{"msg": "unable to connect to database"}
网关会发送 X-Call-Id 头,您应在自己的日志记录器中使用该头来关联和追踪请求。
X-Call-Id
在 HTTP 模式下,如果将 log_callid 环境变量设置为 true,看门狗会将 X-Call-Id 附加到其自己的 HTTP 日志消息的方括号中:
log_callid
2024/04/25 17:29:58 GET / - 301 Moved Permanently - ContentLength: 39B (0.0037s) [079d9ff9-d7b7-4e37-b195-5ad520e6f797]
如果函数通过 exec_timeout 设置了较大的超时时间(如 1h),但您需要单个请求提前超时(例如 1m),则可以通过 HTTP 头 X-Timeout 传递 Go 持续时间来覆盖此行为。
exec_timeout``1h``1m``X-Timeout
X-Timeout 的值必须等于或短于 exec_timeout 环境变量。
X-Timeout``exec_timeout
当 exec_timeout 设置为 0 或未指定时,无法设置 X-Timeout。
X-Timeout``exec_timeout
由于输入/输出直接连接到响应以实现流式传输效率,函数开始执行后无法发送HTTP headers。除非进程分叉出现问题,否则响应码始终为200。中途错误必须由客户端捕获。多线程。
每个请求派生一个进程,能够处理大于内存容量的请求体——例如,512MB内存的虚拟机可以处理多个GB的视频。
由于输入/输出直接连接到响应以实现流式传输效率,函数开始执行后无法发送HTTP头。响应代码始终为200,除非派生进程时出现问题。中途错误必须由客户端检测。多线程。
此模式启动一个HTTP文件服务器,用于提供static_path指定目录中的静态内容。
请参见Hugo博客文章中的示例。
| 选项 | 用法 |
|---|---|
write_debug | 在经典watchdog中,此选项将响应体打印到控制台 |
read_debug | 在经典watchdog中,此选项将请求体打印到控制台 |
combined_output | 在经典watchdog中,此选项会在函数的HTTP响应中返回STDOUT和STDERR;关闭时仅返回STDOUT,并将STDERR打印到watchdog的日志中 |
来自真实用户的反馈,见证轩辕镜像的优质服务