| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
"我们把每棵树想象成是一个设备上的服务(Atom),这棵树有各式各样的根(Data),这棵树可以从根中吸取养分,并将养分输送至枝干(Ability),枝干上或许有几个鸟巢或蜂窝,这些小家伙会将那'那些东西'从一棵树带到另一棵树,而'那些东西'在自己这棵树上是完全可以被任何部分获取的。"
当然这是一颗可大可小的树,甚至支持"水培",以适配各种各样的"生存环境"。您可以开发任何自定义的树枝(Ability)或根系(Data),从而实现一定程度的"极致优化",从而打到不一样的结果。
您可以直接使用Go语言版实现大多数平台的打包和部署,或者使用Rust语言版(未推出)、C++语言版(未推出)实现更高性能的边缘计算服务,当然他们之间也是可以相互交互的。
这意味着您可以通过这个框架(或者说这种符合"依赖抽象而不依赖具体"的强规范)下的"树"来构建一个相当灵活的分布式的边缘计算系统,甚至是一个分布式的边缘计算生态系统。
// 1. 最小化启动(只含 BaseData + BaseAbility)
atom := fasteredge.InitAtom()
// 2. 或一次性注册常用组件(NetMap/Time/OneKey/Cmd/Sh/Bash/ConfigFile 等)
atom := fasteredge.InitStandardAtom()
// 3. 挂载(Check + Mount)
if err := fasteredge.PreRunAtom(atom); err != nil { return err }
// 4. 在可取消上下文中运行(只对实现 types.Runner 的 Ability 起作用)
return fasteredge.RunAtom(ctx, atom, fasteredge.WithShutdownTimeout(5*time.Second))本地可信代码可直接调用 Ability,例如:
ab, _ := atom.Ability("NetMapAbility")
out := ab.Command(atom, ability.NetMapCommandRegisterPeer, ability.NetMapRegisterPeerArgs{
Name: "edge-2", Address: "10.0.0.2:7000", Role: "edge",
})InitStandardAtom 会把 OneKeyAbility 安装为 Atom 全局命令认证器。HTTP、MQTT、RPC 等远程入口必须使用鉴权分发接口,不应暴露本地可信的 Command / CommandContext:
credential := ability.OneKeyCredential{
Subject: token.Subject, IssuedAt: token.IssuedAt,
ExpiresAt: token.ExpiresAt, Signature: token.Signature,
}
out := atom.AuthenticatedCommandContext(
ctx, credential, "NetMapAbility", ability.NetMapCommandGetTopology, nil,
)认证会在查找目标组件前完成;过期、吊销、密钥轮换前签发或字段被修改的 token 均会被拒绝。当前 OneKey token 在有效期内可重复使用,因此远程节点应使用较短 TTL,并通过吊销或轮换及时失效。
| 名称 | 功能 | 关键命令 |
|---|---|---|
| BaseData | 框架元信息(logo、版本) | logo / info |
| NetMapData | 本节点网络拓扑(节点名、网卡、默认出网接口) | info / set_node_name / interfaces / set_default_iface |
| KeyringData | 共享密钥与令牌表 | status / set_secret / rotate / issue_token / revoke_* |
| ConfigData | 扁平点号路径 KV 配置 | get / set / delete / list / snapshot |
| MySQLData / PostgreSQLData | 关系数据库公开连接参数与独立密码 | configure / set_secret / clear_secret / get_config / status / snapshot |
| SQLiteData | SQLite 文件、模式、WAL、超时与连接池参数 | configure / get_config / status / snapshot |
| RedisData | Redis 节点列表、DB、TLS、超时、连接池与独立密码 | configure / set_secret / clear_secret / get_config / status / snapshot |
| MongoDBData | MongoDB 节点、认证源、副本集、TLS 与独立密码 | configure / set_secret / clear_secret / get_config / status / snapshot |
| InfluxDBData | InfluxDB Endpoint、Org、Bucket、超时与独立 Token | configure / set_secret / clear_secret / get_config / status / snapshot |
数据库密码和 Token 仅保存在 Data 的私有内存中,get_config、snapshot 和 JSONMarshal 均不会返回明文。配置或密钥每次变化都会递增 DatabaseStatus.Revision。例如:
mysql, _ := atom.Data("MySQLData")
mysql.Command(atom, data.DatabaseCommandConfigure, data.SQLDatabaseConfigureArgs{
Config: data.SQLDatabaseConfig{
Host: "db.example.com", Port: 3306, Database: "edge",
Username: "edge-node", TLSMode: data.DatabaseTLSRequire,
},
})
mysql.Command(atom, data.DatabaseCommandSetSecret, data.DatabaseSetSecretArgs{
Secret: []byte(os.Getenv("MYSQL_PASSWORD")),
})InfluxDBAbility 依赖 InfluxDBData:旧的 set_endpoint / set_org / set_bucket / set_token 命令仍兼容,但配置和 Token 实际存放在 Data 中;get_config 返回的 Token 始终为空。Ping、写入和查询通过注入的 InfluxTransport 完成。
| 名称 | 类别 | 核心能力 |
|---|---|---|
| BaseAbility | 基础 | list_data_names / list_ability_names |
| RoleAbility | 基础 | describe / set_role / get_role |
| TimeAbility | 基础 | sync_manual / sync_system / sync_net / sync_ntp / get_time / configure_run |
| NetMapAbility | 基础 | register_peer / unregister_peer / update_peer / list_peers / lookup_peer / get_topology |
| OneKeyAbility | 基础 | issue_token / verify_token / revoke_token / revoke_all / list_tokens / status / rotate (HMAC-SHA256) |
| CloudRoleAbility | 基础 | describe / set_controller / register_service / set_status / heartbeat(依赖 RoleAbility 且 role=cloud) |
| EdgeRoleAbility | 基础 | describe / set_zone / add_capability / record_latency / get_metrics / set_online(依赖 RoleAbility 且 role=edge) |
| CmdAbility | 终端 | run / start / wait / kill / list / set_allowlist / clear_finished(可插拔 allowlist) |
| ShAbility | 终端 | run / start / wait / kill / list / set_allowlist(基于 CmdAbility,sh -c 形式) |
| BashAbility | 终端 | run / start / wait / kill / list / set_allowlist(基于 ShAbility,bash --noprofile --norc -c 形式) |
| ConfigFileAbility | 文件/配置 | set_path / load / save / exists(基于 ConfigData 的 JSON 持久化) |
| FileTransferAbility | 文件/配置 | set_target / upload / download / list / get_transfer / cancel(可插拔 Transport) |
| AlgorithmDistributionAbility | 文件/配置 | register_algorithm / unregister_algorithm / distribute / list_distributions / cancel(基于 FileTransfer) |
| ModbusAbility | 工业协议 | set_endpoint / set_unit_id / read_holding / read_input / read_coils / read_discrete / write_*(可插拔) |
| SerialAbility | 工业协议 | open / close / read / write / set_config / list_ports(可插拔 Transport) |
| TSNAbility | 工业协议 | set_interface / register_talker / register_listener / unregister / set_priority_map / set_time_aware |
| MQTTAbility | 数据交互 | set_broker / connect / disconnect / publish / subscribe / drain / list_subscriptions(可插拔 Transport) |
| InfluxDBAbility | 数据交互 | set_endpoint / set_token / set_org / set_bucket / ping / write / query / list_series / delete_series |
| EKuiperAbility | 数据交互 | set_endpoint / create_stream / drop_stream / create_rule / start_rule / stop_rule / show_rules |
| DockerAbility | 容器编排 | set_endpoint / list_containers / start/stop/restart/remove / pull_image / inspect / get_logs / create |
| KubernetesAbility | 容器编排 | set_context / apply / delete / list / get / scale / get_logs |
所有依赖外部网络/进程的能力(FileTransfer / Modbus / Serial / MQTT / InfluxDB / EKuiper / Docker / Kubernetes)均通过 SetXxxTransport(...) 注入,框架本身只管理元数据与生命周期,不绑定具体驱动。
atom := fasteredge.InitStandardAtom()
fasteredge.PreRunAtom(atom)
// 1. 通过 NetMap 注册对等节点
nm, _ := atom.Ability("NetMapAbility")
nm.Command(atom, ability.NetMapCommandRegisterPeer, ability.NetMapRegisterPeerArgs{
Name: "edge-2", Address: "10.0.0.2:7000", Role: "edge",
})
// 2. 通过 OneKey 为其签发短期令牌
ok, _ := atom.Ability("OneKeyAbility")
out := ok.Command(atom, ability.OneKeyCommandIssueToken, ability.OneKeyIssueTokenArgs{
Subject: "edge-2", TTL: time.Hour,
})
tok := out.Value.(ability.OneKeyToken)
// 3. 远端用 verify_token 校验
ok.Command(atom, ability.OneKeyCommandVerifyToken, ability.OneKeyVerifyTokenArgs{
Subject: tok.Subject, IssuedAt: tok.IssuedAt, ExpiresAt: tok.ExpiresAt, Signature: tok.Signature,
})FasterEdge 是库,不是独立进程。先注册组件,再挂载,最后在可取消的上下文中运行:
atom, err := fasteredge.InitAtom()
if err != nil { return err }
if err := fasteredge.PreRunAtom(atom); err != nil { return err }
return fasteredge.RunAtom(ctx, atom, fasteredge.WithShutdownTimeout(5*time.Second))RunAtom 会监督实现 types.Runner 的 Ability;上下文取消或 Runner 返回错误后,框架使用新的清理上下文按逆序卸载组件。关闭超时、panic 和卸载错误均通过结构化 error 返回,组件注册表不会暴露内部 map。
TimeAbility 的命令参数使用严格类型(例如 TimeSyncManualArgs),时间缓存基于单调时钟推进。网络时间源默认拒绝本机、私网、链路本地和组播地址,并禁用环境代理;只有显式启用 LAN 源选项时才放行私网地址。HTTP 响应限制为 64 KiB,NTP 使用校验后的响应偏移量。
go test ./... # 运行所有单元测试
go test -race ./... # 含竞态检测
go test ./... -v -run Integration # 跨能力集成测试当前覆盖:~135 个测试,全部通过,go vet 无警告。
| Back | FazBrowse Home | New Git URL |