概述
在 UModel 系统中,实体关系(Entity Relationship)描述 UModel 中不同实体之间的连接和依赖关系,如服务调用关系、主机包含关系等。本文档详细介绍实体关系的数据格式、写入方法和最佳实践。
关于 UModel、EntitySetLink、EntityRelations 的详细概念,请参见EntityStore 简介。
应用案例
当前应用案例相关素材,请参考:umodel.zip
关系数据格式
实体关系数据通过 SLS Log 协议写入到 EntityStore 的${workspace}__topo
日志库中。每个关系记录描述两个实体之间的有向连接。
系统字段
字段名 | 类型 | 是否必须 | 示例 | 说明 |
| string | 是 | apm, k8s | 源实体所属的域 |
| string | 是 | apm.service | 源实体类型 |
| string | 是 | 391274C9A1D369FB5222E273D02B81B8 | 源实体唯一标识符 |
| string | 是 | apm, k8s | 目标实体所属的域 |
| string | 是 | apm.host | 目标实体类型 |
| string | 是 | D91192729ED1688E9096E98801A5D7CA | 目标实体唯一标识符 |
| string | 是 | runs_on, calls, contains | 关系类型,定义关系的业务含义 |
| string | 否(默认Update) | Update, Expire | 操作类型,控制关系的生命周期 |
| int | 否 | 1700000000 | 首次观察时间,秒级时间戳 |
| int | 否(默认LogTime) | 1700000001 | 最近观察时间,秒级时间戳 |
| int | 否(默认3600) | 3600 | 存活时间,秒为单位 |
当前实体关系数据不支持存储边上信息,边上数据建议使用 DataLink 连接 DataSet 进行存储。
字段说明
实体标识符
源实体:由
__src_domain__
+__src_entity_type__
+__src_entity_id__
唯一确定。目标实体:由
__dest_domain__
+__dest_entity_type__
+__dest_entity_id__
唯一确定。实体ID格式:与实体写入相同,支持128位hex值或自动转换。
关系方向性
关系具有明确的方向性:从源实体指向目标实体。
A --calls--> B
:表示A调用B。A --runs_on--> B
:表示A运行在B上。A --contains--> B
:表示A包含B。
时间字段
请参见实体生成与写入中的相关内容。
关系写入方法
请参见实体生成与写入中的相关内容。
关系时间区间与查询覆盖机制
请参见实体生成与写入中的相关内容。
常见关系类型
UModel 系统中,并不强制限制关系类型,可以根据实际业务需求进行定义。
关系类型 | 含义 | 应用场景 |
| 调用 | 服务调用关系 |
| 运行 | 进程运行关系 |
| 包含 | 容器关系 |
| 管理 | 管理关系 |
| 服务 | 服务提供关系 |
| 托管于 | 部署关系 |
| 关联到 | 通用关联关系 |
关系类型需要与 EntitySetLink 中的关系类型保持一致。
关系写入最佳实践
1. 关系发现策略
基于监控数据发现
APM Trace数据:从调用链中提取服务间调用关系。
网络流量数据:从网络监控中发现通信关系。
资源监控数据:从主机、容器监控中发现运行关系。
基于配置数据发现
K8s配置:从Pod、Service、Deployment配置中提取关系。
云资源配置:从VPC、安全组、负载均衡配置中发现关系。
应用配置:从应用配置文件中发现依赖关系。
2. 时间窗口管理
KeepAlive时间根据上报周期进行调整,建议不低于1个上报周期。此外定期上报周期建议不低于5分钟,避免频繁更新影响查询性能。
短期关系(调用关系)
KeepAlive时间:10-30分钟。
适用:服务调用、API请求等动态关系。
更新频率:1-5分钟。
中期关系(部署关系)
KeepAlive时间:1-4小时。
适用:应用部署、容器运行等半静态关系。
更新频率:10-30分钟。
长期关系(基础设施关系)
KeepAlive时间:4-24小时。
适用:网络连接、存储挂载等静态关系。
更新频率:1-6小时。
3. 关系生命周期管理
建议使用增量 + 全量策略:
增量更新:实时或近实时更新活跃关系。
全量同步:定期全量同步,确保数据完整性。
失效清理:通过KeepAlive机制自动清理过期关系。
跨域关系设计原则
明确边界:清晰定义不同域的职责范围。
标准化类型:统一跨域关系类型的命名规范。
避免循环:防止跨域关系形成复杂的循环依赖。
性能考虑:跨域查询可能影响性能,合理设计查询路径。
注意事项
1. 关系一致性
确保关系两端的实体真实存在。
定期检查和清理悬挂关系(实体已删除但关系仍存在)。
2. 性能优化
限制关系数量(单一类型关系不超过10万,整体关系不超过100万),避免影响查询性能。
合理设置 KeepAlive 时间,避免无效关系积累。
控制关系数据的写入频率,避免过度更新。
3. 数据质量
验证关系类型的合理性(如不应该存在 Pod calls Service 的关系)。
确保关系方向的正确性。
定期审查关系数据的准确性。