
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 时可用。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务