
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Fake Service 是一款用于测试上游服务通信、服务网格及其他分布式系统场景的模拟服务。它可配置为 HTTP 或 gRPC 服务,支持错误注入、性能模拟、分布式追踪和 CPU 负载模拟等功能,帮助开发和测试人员验证系统在各种条件下的行为。
Fake Service 通过环境变量进行配置,以下是主要参数说明:
| 环境变量 | 默认值 | 描述 |
|---|---|---|
| UPSTREAM_URIS | 无 | 上游服务的逗号分隔 URI |
| UPSTREAM_WORKERS | 1 | 调用上游服务的并行工作线程数(1 为顺序调用) |
| SERVER_TYPE | http | 服务类型:http 或 grpc |
| MESSAGE | Hello World | 返回消息(字符串或 JSON) |
| NAME | Service | 服务名称 |
| LISTEN_ADDR | 0.0.0.0:9090 | 服务绑定的 IP 和端口 |
| ALLOWED_ORIGINS | * | CORS 允许的源(逗号分隔) |
| ALLOWED_HEADERS | Accept,Accept-Language,Content-Language,Origin,Content-Type | CORS 允许的请求头(逗号分隔) |
| ALLOW_CREDENTIALS | false | 是否允许 CORS 凭证 |
| HTTP_CLIENT_KEEP_ALIVES | false | 上游调用是否启用 HTTP 连接保活 |
| HTTP_CLIENT_REQUEST_TIMEOUT | 30s | 上游请求超时时间 |
| HTTP_CLIENT_APPEND_REQUEST | true | 是否将当前请求的路径、查询参数和头信息附加到上游调用 |
| TIMING_50_PERCENTILE | 0s | 50% 分位请求响应时间 |
| TIMING_90_PERCENTILE | 0s | 90% 分位请求响应时间(未设置则使用 50% 分位值) |
| TIMING_99_PERCENTILE | 0s | 99% 分位请求响应时间(未设置则使用 90% 分位值) |
| TIMING_VARIANCE | 0 | 请求时间的百分比方差(随机波动范围) |
| ERROR_RATE | 0 | 错误率(小数,如 0.1 表示 10% 请求返回错误) |
| ERROR_TYPE | http_error | 错误类型:http_error(HTTP/gRPC 错误)或 delay(延迟) |
| ERROR_CODE | 500 | 错误状态码(HTTP 或 gRPC 错误码) |
| ERROR_DELAY | 0s | 错误延迟时间(如 1s、100ms) |
| RATE_LIMIT | 0 | 限流速率(请求/秒,0 表示不限流) |
| RATE_LIMIT_CODE | 503 | 限流时返回的状态码 |
| LOAD_CPU_CLOCK_SPEED | 1000 | 单逻辑核心时钟速度(MHz) |
| LOAD_CPU_CORES | -1 | 生成 CPU 负载的逻辑核心数(-1 表示使用所有核心) |
| LOAD_CPU_PERCENTAGE | 0 | CPU 负载百分比(如 50 表示 50% 负载) |
| TRACING_ZIPKIN | 无 | Zipkin 追踪收集器地址 |
| TRACING_DATADOG | 无 | Datadog 追踪收集器地址 |
| METRICS_DATADOG | 无 | Datadog 指标收集器地址 |
| LOG_FORMAT | text | 日志格式:text 或 json |
| LOG_LEVEL | info | 日志级别:info、debug、trace、warn、error |
| LOG_OUTPUT | stdout | 日志输出位置(默认 stdout,如 /var/log/web.log) |
| TLS_CERT_LOCATION | 无 | TLS 证书文件路径(PEM 格式) |
| TLS_KEY_LOCATION | 无 | TLS 私钥文件路径(PEM 格式) |
基础 HTTP 服务
bashdocker run -d -p 9090:9090 \ -e NAME="MyTestService" \ -e MESSAGE="Hello from Fake Service" \ nicholasjackson/fake-service
带上游调用的 HTTP 服务
bashdocker run -d -p 9090:9090 \ -e NAME="API" \ -e UPSTREAM_URIS="http://upstream1:9090,http://upstream2:9090" \ -e UPSTREAM_WORKERS=2 \ nicholasjackson/fake-service
gRPC 服务
bashdocker run -d -p 9090:9090 \ -e SERVER_TYPE="grpc" \ -e NAME="GRPCService" \ nicholasjackson/fake-service
带错误注入的服务(20% 概率返回 500 错误)
bashdocker run -d -p 9090:9090 \ -e ERROR_RATE=0.2 \ -e ERROR_TYPE="http_error" \ -e ERROR_CODE=500 \ nicholasjackson/fake-service
以下示例展示了一个包含 4 个服务和 Jaeger 追踪的多服务系统:
yamlversion: '3' services: jaeger: image: jaegertracing/all-in-one:latest ports: - "16686:16686" # Jaeger UI - "9411:9411" # Zipkin 兼容端口 environment: - COLLECTOR_ZIPKIN_HOST_PORT=:9411 currency: image: nicholasjackson/fake-service environment: - NAME=currency - MESSAGE="Currency response" - TRACING_ZIPKIN=http://jaeger:9411 cache: image: nicholasjackson/fake-service environment: - NAME=cache - MESSAGE="Cache response" - TRACING_ZIPKIN=http://jaeger:9411 payments: image: nicholasjackson/fake-service environment: - NAME=payments - MESSAGE="Payments response" - UPSTREAM_URIS=http://currency:9090 - TRACING_ZIPKIN=http://jaeger:9411 api: image: nicholasjackson/fake-service environment: - NAME=api - MESSAGE="API response" - SERVER_TYPE=grpc - UPSTREAM_URIS=http://payments:9090,http://cache:9090 - UPSTREAM_WORKERS=2 - TRACING_ZIPKIN=http://jaeger:9411 web: image: nicholasjackson/fake-service ports: - "9090:9090" environment: - NAME=web - MESSAGE="Hello World" - UPSTREAM_URIS=grpc://api:9090 - TRACING_ZIPKIN=http://jaeger:9411
启动命令:
bashcd examples/docker-compose docker-compose up
访问 http://localhost:9090 获取服务响应,访问 http://localhost:16686 查看 Jaeger 追踪数据。
配置 TRACING_ZIPKIN 环境变量指向 Zipkin 兼容收集器(如 Jaeger)后,Fake Service 会使用 OpenTracing 库输出追踪数据,可在 Jaeger 等工具中查看调用链和性能数据。
!https://raw.githubusercontent.com/nicholasjackson/fake-service/master/images/jaeger_tracing.png
配置错误率、错误类型和错误码,模拟服务故障:
bashdocker run -d -p 9090:9090 \ -e ERROR_RATE=0.2 \ # 20% 请求返回错误 -e ERROR_TYPE=http_error \ -e ERROR_CODE=500 \ # HTTP 500 错误 nicholasjackson/fake-service
配置延迟错误,模拟服务响应缓慢:
bashdocker run -d -p 9090:9090 \ -e ERROR_RATE=0.3 \ # 30% 请求延迟 -e ERROR_TYPE=delay \ -e ERROR_DELAY=2s \ # 延迟 2 秒 nicholasjackson/fake-service
配置每秒请求上限,超过则返回限流错误:
bashdocker run -d -p 9090:9090 \ -e RATE_LIMIT=1 \ # 1 请求/秒 -e RATE_LIMIT_CODE=429 \ # 限流状态码 429 nicholasjackson/fake-service
配置核心数和负载百分比,模拟服务计算负载:
bashdocker run -d -p 9090:9090 \ -e LOAD_CPU_CORES=4 \ # 使用 4 个核心 -e LOAD_CPU_PERCENTAGE=75 \ # 75% 负载 nicholasjackson/fake-service
HTTP 服务提供可视化界面,访问 /ui 路径查看请求数据和调用链:
!https://raw.githubusercontent.com/nicholasjackson/fake-service/master/images/ui.png
错误状态下的 UI: !https://raw.githubusercontent.com/nicholasjackson/fake-service/master/images/ui-error.png
注意:UI 仅在 SERVER_TYPE=http 时可用。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务