{"id":28639477,"url":"https://github.com/taosdata/ems","last_synced_at":"2026-01-20T16:45:12.047Z","repository":{"id":286065247,"uuid":"931350499","full_name":"taosdata/ems","owner":"taosdata","description":"Github Action Workflows for Customer Scenarios Simulation","archived":false,"fork":false,"pushed_at":"2025-05-20T03:33:19.000Z","size":50483,"stargazers_count":0,"open_issues_count":1,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-20T04:29:43.635Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/taosdata.png","metadata":{"files":{"readme":"README-CN.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-12T06:00:38.000Z","updated_at":"2025-05-17T14:03:01.000Z","dependencies_parsed_at":"2025-04-23T15:22:30.281Z","dependency_job_id":"f9cc473a-5f1d-4150-98e8-7476dfe1ee8c","html_url":"https://github.com/taosdata/ems","commit_stats":null,"previous_names":["taosdata/ems"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/taosdata/ems","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taosdata%2Fems","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taosdata%2Fems/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taosdata%2Fems/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taosdata%2Fems/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/taosdata","download_url":"https://codeload.github.com/taosdata/ems/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/taosdata%2Fems/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259520285,"owners_count":22870415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-12T19:40:27.325Z","updated_at":"2025-10-25T06:34:45.420Z","avatar_url":"https://github.com/taosdata.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"简体中文 | [English](README.md)\n\n# EMS Test\nEMS(Energy Management System) 客户场景基于分布式架构，旨在实现 MQTT 数据流、边缘节点、中心节点以及客户端之间的高效协同，满足复杂场景下的数据采集、处理和同步需求。\n\n为便于用户在不同环境中快速部署和测试，本仓库提供了两种灵活的部署方式：\n\n\n- **Workflow 自动部署**：通过 GitHub Actions 自动部署集群环境并运行测试，适合在 CI/CD 或云端环境中使用。【见下文】\n\n- **Docker Compose 本地部署**：通过 Docker Compose 在本地快速搭建测试环境，适合本地开发测试或演示。【见[ Docker Compose 部署 ]( ./docker-compose )】\n\n# 目录\n- [EMS Test](#ems-test)\n- [目录](#目录)\n  - [1. 使用说明](#1-使用说明)\n    - [1.1 手动触发 Workflow](#11-手动触发-workflow)\n    - [1.2 登录 taos-explorer 查看运行情况](#12-登录-taos-explorer-查看运行情况)\n  - [2. 工作流程](#2-工作流程)\n    - [阶段概览](#阶段概览)\n    - [关键 Job 说明](#关键-job-说明)\n  - [3. 组件拓扑图](#3-组件拓扑图)\n  - [4. 测试场景](#4-测试场景)\n  - [5. 配置文件说明](#5-配置文件说明)\n    - [5.1 数据库参数配置 (db\\_config.json)](#51-数据库参数配置-db_configjson)\n    - [5.2 查询参数配置 (query.json)](#52-查询参数配置-queryjson)\n  - [6. 测试结果](#6-测试结果)\n  - [7. 环境要求](#7-环境要求)\n    - [必要 Secrets](#必要-secrets)\n    - [节点标签要求](#节点标签要求)\n  - [8. 常见问题](#8-常见问题)\n    - [Q1: 如何修改测试配置参数？](#q1-如何修改测试配置参数)\n    - [Q2: 参数选择有什么建议？](#q2-参数选择有什么建议)\n    - [Q3: 如何调试失败的测试？](#q3-如何调试失败的测试)\n    - [Q4: 是否使用了用户提供的数据？](#q4-是否使用了用户提供的数据)\n\n\n## 1. 使用说明\n\n### 1.1 手动触发 Workflow\n1. 进入仓库的 [Actions](https://github.com/taosdata/ems/actions) 选项卡；\n2. 选择 [EMS Test](https://github.com/taosdata/ems/actions/workflows/ems-test.yml) workflow；\n3. 点击 **Run workflow** 按钮，填写参数：\n\n| 参数名称               | 描述                     | 类型    | 必需 | 默认值    | 选项          |\n|------------------------|--------------------------|---------|------|-----------|---------------|\n| td-version           | TDengine 版本           | string  | ✅   | 3.3.5.5  | -             |\n| edge-dnode-count     | 边缘节点数量            | choice  | ✅   | 2        | 1/2           |\n| center-dnode-count   | 中心节点数量            | choice  | ✅   | 3        | 1/2/3         |\n| exec-time            | 测试执行时长 (秒)       | string  | ✅   | 300      | -             |\n| source-interval      | 数据源间隔 (毫秒)       | string  | ✅   | 1000     | -             |\n| enable-compression   | 启用数据压缩            | choice  | ✅   | false    | true/false    |\n\n4. 点击刚刚启动的 **workflow**，可以在下级页面查看详细的运行状态；\n\n5. 全部流程运行完成后，在详情页面最下方 **Artifacts** 区域可下载名为 **perf_report_YYYYMMDD_HHMMSS.txt** 的测试报告。\n\n\n    🔗 [Workflow Trigger Demo](https://github.com/taosdata/ems/actions/runs/14280051434)\n\n\n### 1.2 登录 taos-explorer 查看运行情况\n1. 打开 taos-explorer 页面：\n```markdown\n- http://[中心节点IP]:6060\n- http://[边缘节点IP]:6060\n```\n2. 输入用户名密码登录（默认 root/taosdata）\n3. 在`数据浏览器`及`数据写入`侧边栏中查看写入情况\n\n\n\u003e **NOTE:**\n\u003e 如果您想在自己的 runner 中运行测试，请参考【[Test Guide for User Repo Runner]( ./USER-REPO-TEST-GUIDE-CN.md )】\n\n\n## 2. 工作流程\n\n### 阶段概览\n```mermaid\ngraph TD\n    A[filter-runners] --\u003e B[upload-hosts-info]\n    B --\u003e C[combine-and-update-hosts]\n    C --\u003e D[deploy-center-nodes]\n    C --\u003e E[deploy-edge-nodes]\n    C --\u003e F[deploy-mqtt-simulator]\n    C --\u003e G[deploy-client-nodes]\n    D \u0026 E \u0026 F \u0026 G --\u003e H[test-and-report]\n```\n\n### 关键 Job 说明\n| Job 名称                   | 功能描述                      | 依赖项                              |\n|---------------------------|------------------------------|-------------------------------------|\n| filter-runners          | 动态选择指定规格的运行器           | -                                   |\n| combine-and-update-hosts| 同步所有节点的 hosts 配置         | filter-runners                      |\n| deploy-center-nodes     | 部署中心节点组件                  | combine-and-update-hosts           |\n| deploy-edge-nodes       | 部署边缘节点组件                  | combine-and-update-hosts           |\n| deploy-mqtt-simulator   | 部署 MQTT 模拟器                 | combine-and-update-hosts           |\n| deploy-client-nodes     | 部署客户端测试环境                | combine-and-update-hosts           |\n| test-and-report         | 分布式执行测试用例并上传测试报告     | 所有部署阶段                       |\n\n\n## 3. 组件拓扑图\n\n以下为系统的组件拓扑图，展示了 MQTT 节点、边缘节点、中心节点和客户端节点之间的连接和数据流动。\n\n\n```mermaid\ngraph LR\n  subgraph MQTT-Nodes\n    A1[MQTT Simulator1]\n    A2[MQTT Simulator2]\n    AN[MQTT SimulatorN]\n  end\n\n  subgraph Edge-Nodes\n    B1[flashmq1]\n    C1[TDengine node1]\n    B2[flashmq2]\n    C2[TDengine node2]\n    BN[flashmqN]\n    CN[TDengine nodeN]\n  end\n\n  subgraph Center-Nodes\n    E[TDengine Cluster]\n  end\n\n  subgraph Client-Nodes\n    J[taosBenchmark]\n    H[taostest]\n  end\n\n  A1 --\u003e|生成数据| B1\n  A2 --\u003e|生成数据| B2\n  AN --\u003e|生成数据| BN\n\n  B1 --\u003e C1\n  B2 --\u003e C2\n  BN --\u003e CN\n\n  C1 --\u003e E\n  C2 --\u003e E\n  CN --\u003e E\n\n  J --\u003e|执行查询| E\n\n  H --\u003e|调度| MQTT-Nodes\n  H --\u003e|调度| Edge-Nodes\n  H --\u003e|调度| E\n\n  style A1 fill:#ffcc99,stroke:#cc6600\n  style A2 fill:#ffcc99,stroke:#cc6600\n  style AN fill:#ffcc99,stroke:#cc6600\n  style B1 fill:#99ccff,stroke:#3366cc\n  style B2 fill:#99ccff,stroke:#3366cc\n  style BN fill:#99ccff,stroke:#3366cc\n  style C1 fill:#ff99cc,stroke:#ff99cc\n  style C2 fill:#ff99cc,stroke:#ff99cc\n  style CN fill:#ff99cc,stroke:#ff99cc\n  style E fill:#99ff99,stroke:#339933\n  style J fill:#ff9999,stroke:#cc0000\n  style H fill:#ff9999,stroke:#cc0000\n```\n\n\n## 4. 测试场景\n\n| 场景                    | 描述                                           |\n|------------------------|------------------------------------------------|\n| MQTT 数据采集性能      | 从 MQTT 订阅设备采集数据并写入到边缘节点的存储中      |\n| taosx 数据迁移性能     | 将数据从边缘节点迁移到中心节点的存储中               |\n| 数据查询性能           | 在数据迁移过程中测试查询 QPS                       |\n| 数据压缩性能           | 压缩后数据大小与原始数据大小的比值                  |\n\n\n\n## 5. 配置文件说明\n\n位于 `ems/config` 目录下的配置文件用于定义测试行为和数据库参数：\n\n```bash\nconfig/\n├── db_config.json    # 数据库参数配置\n├── query.json        # 查询参数配置\n├── config.yaml       # MQTT 订阅与数据路由配置\n├── parser.yaml       # 数据解析与存储规则配置\n└── ems.toml          # MQTT 测试数据生成配置\n```\n\n### 5.1 数据库参数配置 (db_config.json)\n\n```json\n{\n    \"vgroups\": 10,\n    \"stt_trigger\": 2,\n    \"buffer\": 4096,\n    \"minrows\": 100\n}\n```\n\n| 关键字段       | 作用描述                  |\n|---------------|-------------------------|\n| vgroups       | 初始 vgroup 的数目        |\n| stt_trigger   | 落盘文件触发文件合并的个数   |\n| buffer        | 写入内存池大小             |\n| minrows       | 文件块中记录的最小条数       |\n\n\n🔗 更多配置请参考 [TDengine 数据库参数文档](https://docs.taosdata.com/reference/taos-sql/database/#%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93)\n\n\n### 5.2 查询参数配置 (query.json)\n```json\n{\n    \"filetype\": \"query\",\n    \"cfgdir\": \"/etc/taos\",\n    \"host\": \"u2-195\",\n    \"port\": 6030,\n    \"user\": \"root\",\n    \"password\": \"taosdata\",\n    \"confirm_parameter_prompt\": \"no\",\n    \"continue_if_fail\": \"yes\",\n    \"databases\": \"center_db\",\n    \"query_times\": 100,\n    \"query_mode\": \"rest\",\n    \"specified_table_query\": {\n      \"query_interval\": 10,\n      \"concurrent\": 10,\n      \"sqls\": [\n        {\n          \"sql\": \"select last_row(*) from site_topic7_mqtt_1;\",\n          \"result\": \"./query_res0.txt\"\n        },\n        {\n          \"sql\": \"select count(*) from site_topic7_mqtt_1;\",\n          \"result\": \"./query_res1.txt\"\n        },\n        {\n          \"sql\": \"select last(*) from site_topic7_mqtt_1;\",\n          \"result\": \"./query_res2.txt\"\n        }\n      ]\n    },\n    \"test_log\": \"/root/testlog/\"\n}\n```\n\n| 关键字段       | 作用描述                  |\n|---------------|-------------------------|\n| query_times    | 总查询次数               |\n| sqls           | 多语句并行测试配置        |\n| concurrent     | 并发线程数               |\n| query_interval | 查询时间间隔             |\n\n\n🔗 更多配置请参考 [taosBenchmark 查询配置文档](https://docs.taosdata.com/reference/tools/taosbenchmark/#%E6%9F%A5%E8%AF%A2%E9%85%8D%E7%BD%AE%E5%8F%82%E6%95%B0)\n\n\n## 6. 测试结果\n测试完成后生成的性能报告将作为 Artifact 存储：\n\n```bash\nperf_report_YYYYMMDD_HHMMSS.txt\n```\n\n包含以下指标：\n- 📈 数据写入吞吐量\n- ⏱️ 消息延迟分布\n- 🗜️ 压缩率\n- 🖥️ 资源利用率 (CPU/MEM/Disk)\n\n## 7. 环境要求\n\n### 必要 Secrets\n```env\nRUNNER_PAT        # 运行器访问令牌\nVM_PASSWD         # 节点 SSH 统一密码\nPUB_DL_URL        # 测试工具下载地址\nASSETS_DL_URL     # 企业版 TDengine 下载地址\n```\n\n### 节点标签要求\n```yaml\nMQTT_LABEL: \"8C16G\"     # MQTT 节点规格\nEDGE_LABEL: \"20C16G\"    # 边缘节点规格\nCENTER_LABEL: \"20C16G\"  # 中心节点规格\nCLIENT_LABEL: \"24C64G\"  # 客户端规格\n```\n\n## 8. 常见问题\n\n### Q1: 如何修改测试配置参数？\n```markdown\n1. 触发 workflow 时可以定义一些初始化参数，第 1.1 章节已提供对应的参数定义\n2. 修改 ems/config 下的配置文件，第 5 章节中已提供各配置文件的说明\n```\n\n### Q2: 参数选择有什么建议？\n```markdown\n1. 边缘节点数量: 根据 runner 数量配置\n2. 数据间隔: 100-5000ms 区间进行阶梯测试，interval 越小，采集频率越高\n3. 压缩启用: 当测试网络带宽瓶颈时建议开启\n```\n\n### Q3: 如何调试失败的测试？\n```markdown\n1. 查看 filter-runners job 的节点筛选结果\n2. 查看各部署阶段的组件安装日志\n```\n\n### Q4: 是否使用了用户提供的数据？\n```markdown\n我们参考了用户数据进行建模，并没有使用用户提供的数据，因为用户提供的是一个 800M+ 的 CSV 数据文件，不太方便我们在 workflow 或者 docker-compose 中使用。\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaosdata%2Fems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftaosdata%2Fems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftaosdata%2Fems/lists"}