作者 | 裴亞明
在物聯(lián)網(wǎng)、工業(yè)互聯(lián)網(wǎng)和智能設(shè)備快速發(fā)展的今天,時(shí)序數(shù)據(jù)庫(kù)(Time Series Database)已成為處理海量傳感器數(shù)據(jù)的核心基礎(chǔ)設(shè)施。而對(duì)這些系統(tǒng)的性能評(píng)估、容量規(guī)劃和穩(wěn)定性驗(yàn)證,則離不開(kāi)高效、靈活的壓力測(cè)試工具。
過(guò)去,我們主要使用 taosBenchmark 來(lái)做 TDengine 的基礎(chǔ)寫(xiě)入性能測(cè)試。它在很多場(chǎng)景下已經(jīng)足夠好用,尤其適合快速驗(yàn)證數(shù)據(jù)庫(kù)寫(xiě)入能力。不過(guò),隨著實(shí)際業(yè)務(wù)越來(lái)越復(fù)雜,我們也遇到了一些新的需求。
比如,數(shù)據(jù)不一定只寫(xiě)入數(shù)據(jù)庫(kù),也可能同時(shí)進(jìn)入 MQTT、Kafka 等消息中間件;數(shù)據(jù)生成方式也不能總是簡(jiǎn)單隨機(jī),而是希望更接近真實(shí)設(shè)備的變化規(guī)律;有些測(cè)試還需要按照歷史數(shù)據(jù)的時(shí)間間隔進(jìn)行回放,而不是一味追求最大吞吐——隨著這類需求增多,傳統(tǒng) benchmark 工具在配置靈活性、擴(kuò)展能力以及真實(shí)復(fù)雜流程模擬方面的不足也逐漸顯現(xiàn)出來(lái)。
基于這些考慮,我們推出了 taosgen。它是一款面向時(shí)序數(shù)據(jù)場(chǎng)景的新一代性能基準(zhǔn)與數(shù)據(jù)模擬工具,具備強(qiáng)大功能且高度可擴(kuò)展,希望在“壓測(cè)”之外,也能承擔(dān)更多數(shù)據(jù)生成、鏈路驗(yàn)證和歷史數(shù)據(jù)回放的工作。
什么是 taosgen?
簡(jiǎn)單來(lái)說(shuō),taosgen 是一個(gè)可以生成時(shí)序數(shù)據(jù),并把這些數(shù)據(jù)寫(xiě)入不同目標(biāo)系統(tǒng)的工具。目前它支持:
- 高并發(fā)數(shù)據(jù)生成與寫(xiě)入 TDengine;
- 向 MQTT Broker 發(fā)布模擬設(shè)備消息;
- 向 Kafka Topic 生產(chǎn)結(jié)構(gòu)化數(shù)據(jù)流;
- 基于 DAG 的作業(yè)編排,構(gòu)建復(fù)雜測(cè)試流程;
- 使用 Lua 表達(dá)式動(dòng)態(tài)生成逼真數(shù)據(jù);
- 實(shí)時(shí)“播放”歷史數(shù)據(jù),還原真實(shí)時(shí)間線。
也就是說(shuō),taosgen 不只是一個(gè)寫(xiě)入壓測(cè)工具,更是一個(gè)面向未來(lái)的、支持多目標(biāo)、可編程的數(shù)據(jù)流模擬引擎,可以用來(lái)模擬設(shè)備上報(bào)、數(shù)據(jù)庫(kù)寫(xiě)入、消息隊(duì)列接入等多個(gè)環(huán)節(jié)。目前 taosgen 已支持 Windows、Linux 和 macOS,可直接下載使用。
為什么選擇 taosgen?相比 taosBenchmark 的五大升級(jí)
taosBenchmark 更適合完成標(biāo)準(zhǔn)化的數(shù)據(jù)庫(kù)寫(xiě)入測(cè)試,而 taosgen 關(guān)注的是更復(fù)雜的測(cè)試過(guò)程。具體來(lái)說(shuō),升級(jí)如下:
| 能力維度 | taosBenchmark | taosgen |
| 任務(wù)模型 | 單一任務(wù),固定流程 | 支持 DAG 作業(yè)編排,可定義依賴關(guān)系 |
| 目標(biāo)協(xié)議 | 僅 TDengine | 支持 TDengine / MQTT / Kafka 多協(xié)議輸出 |
| 數(shù)據(jù)生成 | 多表共用,固定模式 | 支持 Lua 表達(dá)式、多表獨(dú)立的即時(shí)生成 |
| 時(shí)間控制 | 固定頻率 | 支持多種控制策略,可基于真實(shí)時(shí)間戳“回放”,模擬實(shí)時(shí)數(shù)據(jù)流 |
| 連接管理 | 每次操作新建連接 | 內(nèi)置連接池,復(fù)用連接提升效率 |
除此之外,taosgen 還具備以下亮點(diǎn)特性:
1. 靈活的作業(yè)編排(Job Orchestration)
taosgen 以“作業(yè)(Job)”為基本執(zhí)行單元,每個(gè)作業(yè)由多個(gè)“步驟(Step)”組成,并可通過(guò) needs 字段聲明前置依賴,形成有向無(wú)環(huán)圖(DAG),實(shí)現(xiàn)如“先建庫(kù) → 再建表 → 最后寫(xiě)入”的標(biāo)準(zhǔn)流程,也可并行執(zhí)行多個(gè)獨(dú)立任務(wù)。
tdengine:
dsn: taos+ws://root:taosdata@127.0.0.1:6041/tsbench
drop_if_exists: true
props: precision 'ms' vgroups 4
schema:
name: meters
tbname:
prefix: d
count: 100
from: 0
jobs:
create_db:
name: Create Database
steps:
- uses: tdengine/create-database
create_stable:
name: Create Super Table
needs: [create_db] # 依賴 create_db 完成
steps:
- uses: tdengine/create-super-table
create_ctable:
name: Create Child Table
needs: [create_stable] # 依賴 create_stable 完成
steps:
- uses: tdengine/create-child-table
insert_data:
name: Insert Data
needs: [create_ctable] # 依賴 create_ctable 完成
steps:
- uses: tdengine/insert
2. 多樣化的數(shù)據(jù)生成方式
taosgen 支持兩種主要數(shù)據(jù)源:
- 即時(shí)生成(Generator Mode):無(wú)需預(yù)生成大文件,直接通過(guò)配置規(guī)則動(dòng)態(tài)生成數(shù)據(jù)。
- CSV 文件導(dǎo)入(CSV Mode):復(fù)用現(xiàn)有 CSV 元數(shù)據(jù)或歷史數(shù)據(jù)進(jìn)行回放。
更強(qiáng)大的是,你可以在列級(jí)別使用 Lua 表達(dá)式來(lái)生成非線性、帶噪聲、周期性變化的數(shù)據(jù),例如模擬電壓波動(dòng)、溫度周期等真實(shí)物理現(xiàn)象:
columns:
- name: voltage
type: FLOAT
gen_type: expression
expr: "220 + 10 * math.sin(_i / 30) + 5 * math.random()" # 模擬電網(wǎng)波動(dòng)
3. 真實(shí)時(shí)間“播放”能力
在很多壓測(cè)場(chǎng)景中,大家首先關(guān)注的是吞吐量,也就是系統(tǒng)能以多快的速度寫(xiě)入數(shù)據(jù)。但在歷史數(shù)據(jù)回放、流處理鏈路驗(yàn)證、告警規(guī)則測(cè)試等場(chǎng)景里,數(shù)據(jù)進(jìn)入系統(tǒng)的時(shí)間節(jié)奏同樣重要。taosgen 支持 time_interval 策略,可以根據(jù)數(shù)據(jù)時(shí)間戳之間的間隔控制發(fā)送速度,從而實(shí)現(xiàn)“慢放”、“快進(jìn)”或“按原始速率播放”等不同情況。
steps:
- uses: tdengine/insert
with:
time_interval:
enabled: true
interval_strategy: literal # 按數(shù)據(jù)時(shí)間戳精確發(fā)送
4. 多協(xié)議輸出,不止于數(shù)據(jù)庫(kù)
在真實(shí)系統(tǒng)里,時(shí)序數(shù)據(jù)往往不會(huì)只進(jìn)入數(shù)據(jù)庫(kù)。很多設(shè)備數(shù)據(jù)會(huì)先通過(guò) MQTT 接入邊緣網(wǎng)關(guān)或 IoT 平臺(tái),也可能通過(guò) Kafka 進(jìn)入流處理系統(tǒng)(Flink、Spark Streaming),之后再落庫(kù)或進(jìn)入下游分析鏈路。
因此,taosgen 除了支持寫(xiě)入 TDengine,也支持將同一套數(shù)據(jù)結(jié)構(gòu)發(fā)布到 MQTT Broker 或 Kafka Topic。這意味著你可以用同一套 schema 和數(shù)據(jù)邏輯,同時(shí)測(cè)試整個(gè)數(shù)據(jù)鏈路的不同環(huán)節(jié)。
steps:
- uses: kafka/produce
with:
topic: factory-sensors
value_serializer: json
acks: 1
5. 更安全、更易用的配置體驗(yàn)
taosgen 使用 YAML 作為配置格式。相比在命令行中堆大量參數(shù),配置文件更適合描述復(fù)雜測(cè)試場(chǎng)景,也方便團(tuán)隊(duì)共享和版本管理。
另外,taosgen 會(huì)自動(dòng)檢測(cè)未知或拼寫(xiě)錯(cuò)誤的配置項(xiàng),避免因?yàn)榕渲脤?xiě)錯(cuò)但程序靜默忽略,導(dǎo)致測(cè)試結(jié)果不符合預(yù)期。命令行參數(shù)的優(yōu)先級(jí)高于配置文件,也方便在調(diào)試時(shí)臨時(shí)覆蓋部分設(shè)置。
這些改動(dòng)看起來(lái)不算“大功能”,但在實(shí)際使用中很重要。壓測(cè)任務(wù)往往需要反復(fù)執(zhí)行,如果配置不清楚、錯(cuò)誤不明顯,后續(xù)排查會(huì)浪費(fèi)不少時(shí)間。
快速開(kāi)始:三步體驗(yàn) taosgen 強(qiáng)大功能
第一步:下載安裝
首先需要前往 GitHub Releases 頁(yè)面(https://github.com/taosdata/taosgen/releases)下載對(duì)應(yīng)平臺(tái)的二進(jìn)制包。以 Linux 為例:
# 下載并解壓
tar zxvf taosgen-v0.8.6-linux-x64.tar.gz
cd taosgen
# 添加到系統(tǒng)路徑(可選)
sudo ln -sf $(pwd)/taosgen /usr/local/bin/taosgen
# 查看版本
taosgen --version
第二步:準(zhǔn)備配置文件(config.yaml)
下面是一個(gè)簡(jiǎn)單示例:創(chuàng)建數(shù)據(jù)庫(kù)、超級(jí)表,并向 10000 張子表寫(xiě)入 10000 條模擬電表數(shù)據(jù)。
tdengine:
dsn: taos+ws://root:taosdata@127.0.0.1:6041/tsbench
drop_if_exists: true
schema:
name: meters
tbname:
prefix: d
count: 10000
from: 0
columns:
- name: ts
type: timestamp
start: now
precision : ms
step: 1
- name: current
type: float
min: 5
max: 20
- name: voltage
type: int
min: 200
max: 240
- name: phase
type: float
expr: _i * math.pi % 180
tags:
- name: groupid
type: int
min: 1
max: 10
- name: location
type: binary(24)
values:
- New York
- Los Angeles
- Chicago
- Houston
- Phoenix
- Philadelphia
- San Antonio
- San Diego
- Dallas
- Austin
generation:
rows_per_table: 10000
rows_per_batch: 10000
jobs:
# TDengine insert job
insert-data:
steps:
- uses: tdengine/create-super-table
- uses: tdengine/create-child-table
- uses: tdengine/insert
第三步:運(yùn)行測(cè)試
taosgen -c config.yaml
運(yùn)行完成后,你將在 TDengine 中看到名為 tsbench 的數(shù)據(jù)庫(kù),以及包含萬(wàn)級(jí)子表的 meters 超級(jí)表,所有數(shù)據(jù)均已按規(guī)則寫(xiě)入。
應(yīng)用場(chǎng)景:taosgen 能做什么?
taosgen 的使用場(chǎng)景并不局限于“往數(shù)據(jù)庫(kù)里寫(xiě)數(shù)據(jù)”。在很多項(xiàng)目里,我們更關(guān)心的是數(shù)據(jù)從設(shè)備側(cè)產(chǎn)生之后,如何進(jìn)入消息中間件、如何被流處理系統(tǒng)消費(fèi)、最終又如何寫(xiě)入數(shù)據(jù)庫(kù)。taosgen 可以用統(tǒng)一的配置生成和發(fā)送這些數(shù)據(jù),因此既能做基礎(chǔ)壓測(cè),也能用來(lái)搭建接近真實(shí)業(yè)務(wù)的數(shù)據(jù)鏈路。下面這些場(chǎng)景,是它目前比較適合發(fā)揮作用的地方。
| 場(chǎng)景 | 說(shuō)明 |
| ?? TDengine 性能壓測(cè) | 模擬百萬(wàn)級(jí)設(shè)備高頻上報(bào),測(cè)試集群吞吐、延遲、資源占用 |
| ?? 數(shù)據(jù)遷移與初始化 | 將 CSV 格式的設(shè)備元數(shù)據(jù)和歷史數(shù)據(jù)批量導(dǎo)入 TDengine |
| ?? MQTT 接入層壓力測(cè)試 | 模擬萬(wàn)臺(tái)設(shè)備并發(fā)連接并發(fā)布消息,驗(yàn)證 Broker 穩(wěn)定性 |
| ?? Kafka 數(shù)據(jù)管道驗(yàn)證 | 構(gòu)建高并發(fā)數(shù)據(jù)源,測(cè)試 Flink/Spark 流處理 pipeline |
| ??? 歷史數(shù)據(jù)回放分析 | “重播”特定時(shí)間段的數(shù)據(jù)流,用于復(fù)現(xiàn)問(wèn)題或訓(xùn)練模型 |
| ?? 系統(tǒng)演示與 PoC 構(gòu)建 | 快速搭建逼真的 IoT 數(shù)據(jù)環(huán)境,用于產(chǎn)品展示或客戶驗(yàn)證 |
結(jié)語(yǔ):邁向更真實(shí)的性能測(cè)試時(shí)代
taosgen 的推出,并不是為了替代所有已有工具。taosBenchmark 仍然適合做標(biāo)準(zhǔn)化、直接的 TDengine 寫(xiě)入性能測(cè)試。而 taosgen 關(guān)注的是另一類問(wèn)題:當(dāng)測(cè)試場(chǎng)景變得更復(fù)雜,數(shù)據(jù)流不再只進(jìn)入數(shù)據(jù)庫(kù),數(shù)據(jù)本身也需要更接近真實(shí)業(yè)務(wù)時(shí),我們需要一個(gè)更靈活的工具來(lái)描述和執(zhí)行這些流程。
對(duì)于數(shù)據(jù)庫(kù)管理員、系統(tǒng)架構(gòu)師和 IoT 平臺(tái)開(kāi)發(fā)者來(lái)說(shuō),taosgen 可以用于容量規(guī)劃、上線前驗(yàn)證、歷史數(shù)據(jù)回放和故障復(fù)現(xiàn)。它讓性能測(cè)試不再只是簡(jiǎn)單地“寫(xiě)入一批數(shù)據(jù)”,而是可以更接近真實(shí)系統(tǒng)運(yùn)行方式。
感興趣的用戶可以下載體驗(yàn):



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



