本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

!Logo
Samply.Beam是一个分布式任务代理,专为在严格的网络环境中进行高效通信而设计。它提供跨严格网络边界的常用通信模式、端到端加密和签名,以及基于易用REST API的证书管理和验证功能。
Samply.Beam特别适合以下场景:
!Architecture Schema
Samply.Beam由两个中央运行组件和每个分布式节点上的一个代理组成:
系统中的每个组件都通过其分层的BeamId唯一标识:
app3.proxy2.broker1.samply.de <---------------------------> AppId <----------------------> ProxyId <---------------> BrokerId
CN=proxy2.broker2.samply.deSamply.Beam基于任务和结果的通信模型:
{ "id": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "from": "app7.proxy-hd.broker-project1.samply.de", "to": [ "app1.proxy-hd.broker-project1.samply.de", "app5.proxy-ma.broker-project1.samply.de" ], "body": "需要完成的工作描述", "failure_strategy": { "retry": { "backoff_millisecs": 1000, "max_tries": 5 } }, "ttl": "30s", "metadata": "代理可读取并使用此字段,例如代表应用应用过滤器" }
字段说明:
id:任务的UUID标识符from:提交应用的BeamID(由Proxy根据身份验证信息自动设置)to:允许检索任务并提交结果的工作者BeamID列表body:工作描述,Broker不解释此内容failure_strategy:建议客户端如何处理失败,可选值:discard(丢弃)、retry(重试)failure_strategy.retry:重试策略,max_tries(最大重试次数)和backoff_millisecs(重试间隔毫秒数)ttl:生存时间,超时后Broker将删除任务及其结果metadata:代理可读取的关联数据,可为任意类型{ "from": "app1.proxy-hd.broker-project1.samply.de", "to": [ "app7.proxy-hd.broker-project1.samply.de" ], "task": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "status": "succeeded", "body": "成功完成的结果数据", "metadata": ["任意", "数据", "类型", "都是", "允许的"] }
字段说明:
from:提交结果的客户端BeamIDto:结果的预期接收者BeamIDtask:关联任务的UUIDstatus:工作结果状态,允许值:claimed(已认领)、tempfailed(临时失败)、permfailed(永久失败)、succeeded(成功)body:结果负载,除claimed状态外,所有状态都需要此字段metadata:代理可读取的关联数据,可为任意类型且不加密创建新任务,由指定的工作者处理。当前body大小限制为10MB。
POST/v1/tasksAuthorization: ApiKey <BeamID> <ApiKey>示例:
curl -k --json '{"body":"生命、宇宙和一切的终极问题的答案是什么?","failure_strategy":{"retry":{"backoff_millisecs":1000,"max_tries":5}},"from":"app.proxy1.broker.example.de","id":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","metadata":"代理可读取此字段","to":["app.proxy2.broker.example.de"],"ttl":"60s"}' \ -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ [***]
响应:
HTTP/1.1 201 Created Location: /tasks/70c0aa90-bfcf-4312-a6af-42cbd57dc0b8 Content-Length: 0
注意:服务器可能忽略提交的id属性并自动生成自己的ID,应使用响应中Location头指定的URL来引用任务。
工作者定期调用此端点来检索提交的任务。
GET/v1/tasksfrom (可选): 仅获取由此ID创建的任务to (可选): 仅获取定向到此ID的任务filter (可选): 仅获取满足指定过滤条件的任务
filter=todo: 匹配要由查询客户端处理的未完成任务Authorization: ApiKey <BeamID> <ApiKey>示例:
curl -k -H "Authorization: ApiKey app.proxy2.broker.example.de AppKey" \ [***]
响应:
[ { "id": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "from": "app.proxy1.broker.example.de", "to": ["app.proxy2.broker.example.de"], "body": "生命、宇宙和一切的终极问题的答案是什么?", "failure_strategy": {"retry":{"backoff_millisecs":1000,"max_tries":5}}, "ttl": "60s", "metadata": "代理可读取此字段" } ]
创建或更新任务的结果。当前body大小限制为10MB。
PUT/v1/tasks/<task_id>/results/<app_id>Authorization: ApiKey <BeamID> <ApiKey>示例:
curl -k -X PUT --json '{"from":"app.proxy2.broker.example.de","metadata":["任意","数据类型","都是","允许的"],"status":"succeeded","body":"答案是42","task":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","to":["app.proxy1.broker.example.de"]}' \ -H "Authorization: ApiKey app.proxy2.broker.example.de AppKey" \ [***]
响应:
HTTP/1.1 204 No Content Content-Length: 0
任务提交者调用此端点来检索结果。
GET/v1/tasks/<task_id>/resultsAuthorization: ApiKey <BeamID> <ApiKey>示例:
curl -k -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ [***]
响应:
[ { "from": "app.proxy2.broker.example.de", "to": ["app.proxy1.broker.example.de"], "task": "70c0aa90-bfcf-4312-a6af-42cbd57dc0b8", "status": "succeeded", "body": "答案是42", "metadata": ["任意","数据类型","都是","允许的"] } ]
所有读取端点都支持长轮询,作为常规(重复)轮询的高效替代方案。
wait_count: API调用将阻塞,直到有这么多结果可用wait_time: 阻塞的最长时间(如果未指定单位,默认为秒)示例:
# 阻塞直到有1个结果可用或30秒过去 curl -k -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ [***]
为了更好地支持异步用例,开发版本支持服务器发送事件(Server-Sent Events)用于结果检索。
GET/v1/tasks/<task_id>/results?wait_count=3Accept: text/event-stream示例:
curl -k -H "Accept: text/event-stream" \ -H "Authorization: ApiKey app.proxy1.broker.example.de AppKey" \ [***]
响应:
event: new_result data: {"body":"答案是42","from":"app.proxy2.broker.example.de","metadata":["任意","数据类型","都是","允许的"],"status":"succeeded","task":"70c0aa90-bfcf-4312-a6af-42cbd57dc0b8","to":["app.proxy1.broker.example.de"]}
监控Samply.Beam组件的运行状态。
GET/v1/healthProxy响应:
HTTP/1.1 200 OK Content-Length: 0
Broker响应:
{ "summary": "healthy", "vault": { "status": "ok" } }
开发环境包含一个broker和两个proxy:
# 启动开发环境 ./dev/beamdev start # 或在后台运行服务 ./dev/beamdev start_bg docker-compose logs -f
docker run -d \ --name beam-broker \ -p 8080:8080 \ -e RUST_LOG=info \ -e BROKER_ID=broker.example.de \ -e VAULT_ADDR=[***] \ -e VAULT_TOKEN=your-vault-token \ samply/beam-broker:latest
docker run -d \ --name beam-proxy \ -p 8081:8080 \ -e RUST_LOG=info \ -e PROXY_ID=proxy1.broker.example.de \ -e BROKER_URL=[***] \ -v ./privkey.pem:/app/privkey.pem \ -v ./rootcert.pem:/app/rootcert.pem \ samply/beam-proxy:latest
version: '3.8' services: vault: image: hashicorp/vault:latest ports: - "8200:8200" environment: - VAULT_DEV_ROOT_TOKEN_ID=dev-root-token - VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200 cap_add: - IPC_LOCK command: server -dev broker: image: samply/beam-broker:latest depends_on: - vault ports: - "8080:8080" environment: - RUST_LOG=info - BROKER_ID=broker.example.de - VAULT_ADDR=[***] - VAULT_TOKEN=dev-root-token restart: unless-stopped proxy1: image: samply/beam-proxy:latest depends_on: - broker ports: - "8081:8080" environment: - RUST_LOG=info - PROXY_ID=proxy1.broker.example.de - BROKER_URL=[***] - ROOTCERT_FILE=/app/rootcert.pem - PRIVKEY_FILE=/app/privkey.pem volumes: - ./proxy1/privkey.pem:/app/privkey.pem - ./proxy1/rootcert.pem:/app/rootcert.pem restart: unless-stopped proxy2: image: samply/beam-proxy:latest depends_on: - broker ports: - "8082:8080" environment: - RUST_LOG=info - PROXY_ID=proxy2.broker.example.de - BROKER_URL=[***] - ROOTCERT_FILE=/app/rootcert.pem - PRIVKEY_FILE=/app/privkey.pem volumes: - ./proxy2/privkey.pem:/app/privkey.pem - ./proxy2/rootcert.pem:/app/rootcert.pem restart: unless-stopped
| 环境变量 | 描述 | 默认值 |
|---|---|---|
BROKER_ID | Broker的BeamID | broker.example.de |
VAULT_ADDR | Hashicorp Vault地址 | `[***] |
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429