TDengine 闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <atom:link href="//www.yakult-sh.com.cn/tdengine-%E9%9B%86%E7%BE%A4/feed" rel="self" type="application/rss+xml" /> <link>//www.yakult-sh.com.cn</link> <description>TDengine | 楂樻€ц兘銆佸垎甯冨紡銆佹敮鎸丼QL鐨勬椂搴忔暟鎹簱 | 娑涙€濇暟鎹?/description> <lastBuildDate>Fri, 21 Oct 2022 07:36:20 +0000</lastBuildDate> <language>zh-Hans</language> <sy:updatePeriod> hourly </sy:updatePeriod> <sy:updateFrequency> 1 </sy:updateFrequency> <generator>//wordpress.org/?v=6.8.2</generator> <image> <url>//www.yakult-sh.com.cn/wp-content/uploads/2025/07/favicon.ico</url> <title>TDengine 闆嗙兢 – TDengine | 娑涙€濇暟鎹?/title> <link>//www.yakult-sh.com.cn</link> <width>32</width> <height>32</height> </image> <item> <title>鎬ц兘瀹岃儨InfluxDB锛岄泦缇ゅ姛鑳戒篃寮€婧愶紝瑙hTDengine闆嗙兢鐨勪富瑕侀€昏緫鍗曞厓 //www.yakult-sh.com.cn/influxdb-proxy/12402.html Fri, 08 Jul 2022 08:34:02 +0000 //www.yakult-sh.com.cn/?p=12402 åŒåœ¨åŸºç¡€è½¯äšg领域创业åQ?strong>æ—¶åºæ•°æ®åº?/a> InfluxDBž®†é›†¾Ÿ¤åŠŸèƒ½é—­æºæ˜¯å®Œå…¨å¯ä»¥ç†è§£çš„。但 InfluxDB集群 是刚需åQŒæ˜¯æ ¸å¿ƒç—›ç‚¹åQŒå¦‚果核心痛点ä¸è§£å†³åQŒé‚£å¯æ›¿ä»£æ–¹æ¡ˆä¼šå¾ˆå¤šåQŒäñ”哿œ¬íw«çš„æŽ¨å¹¿ž®×ƒ¼šå¤§æ‰“折扣åQŒå¼€æºçš„价值就大䨓䏋é™ã€?/p>

TDengine 的设计是åŸÞZºŽå•个¼‹¬äšgã€èÊYä»¶ç³»¾lŸä¸å¯é åQŒåŸºäºŽä“Q何å•å°è®¡½Ž—机都无法æä¾›èƒö够计½Ž—能力和存储能力处熋¹·é‡æ•°æ®çš„å‡è®¾è¿›è¡Œè®¾è®¡çš„。因æ­?TDengine 从研å‘çš„½W¬ä¸€å¤©è“våQŒå°±æŒ‰ç…§åˆ†å¸ƒå¼é«˜å¯é æž¶æž„˜q›è¡Œè®¾è®¡åQŒæ˜¯æ”¯æŒæ°´åã^扩展的,˜q™æ ·ä»ÖM½•å•å°æˆ–å¤šå°æœåС噍å‘生¼‹¬äšg故障或èÊY仉™”™è¯¯éƒ½ä¸åª„å“ç³»¾lŸçš„å¯ç”¨æ€§å’Œå¯é æ€§ã€‚åÆˆä¸”å’Œ InfluxDB ä¸åŒçš„æ˜¯åQŒTDengine 选择ž®†é›†¾Ÿ¤åŠŸèƒ½å¼€æºã€‚本文é‡ç‚¹è®²è§?TDengine 集群的主è¦é€»è¾‘å•元的设计ã€?/p>

TDengine åˆ†å¸ƒå¼æž¶æž„çš„(qing)逻è(hun)¾‘¾l“构囑֦‚下:(xi)

性能完胜InfluxDBåQŒé›†¾Ÿ¤åŠŸèƒ½ä¹Ÿå¼€æºï¼Œè§£è¯»TDengine集群的主è¦é€»è¾‘å•å…ƒ - TDengine Database æ—¶åºæ•°æ®åº? class=

一个完整的 TDengine ¾pÈ»Ÿæ˜¯è¿è¡Œåœ¨ä¸€åˆ°å¤šä¸ªç‰©ç†èŠ‚ç‚¹ä¸Šçš„ï¼Œé€»è¾‘ä¸Šï¼Œå®ƒåŒ…å«æ•°æ®èŠ‚ç‚?dnode)ã€TDengine 应用驱动(taosc)以åŠåº”用(app)。系¾lŸä¸­å­˜åœ¨ä¸€åˆ°å¤šä¸ªæ•°æ®èŠ‚ç‚¹ï¼Œ˜q™äº›æ•°æ®èŠ‚ç‚¹¾l„æˆä¸€ä¸ªé›†¾Ÿ?cluster)。应用通过 taosc çš?API ä¸?TDengine 集群˜q›è¡Œäº’动。下é¢å¯¹æ¯ä¸ªé€»è¾‘å•å…ƒ˜q›è¡Œ½Ž€è¦ä»‹¾lã€?/p>

物ç†èŠ‚ç‚¹(pnode)åQ?/strong> pnode 是一独立˜qè¡Œã€æ‹¥æœ‰è‡ªå·Þqš„计算ã€å­˜å‚¨å’Œ¾|‘络能力的计½Ž—机åQŒå¯ä»¥æ˜¯å®‰è£…有OSçš„ç‰©ç†æœºã€è™šæ‹Ÿæœºæˆ?Docker 容器。物ç†èŠ‚ç‚¹ç”±å…‰™…¾|®çš„ FQDN (Fully Qualified Domain Name)æ¥æ ‡è¯†ã€‚TDengine 完全ä¾èµ– FQDN æ¥è¿›è¡Œç½‘¾lœé€šè®¯åQŒå¦‚æžœä¸äº†è§£ FQDNåQŒè¯·çœ‹åšæ–?a href="//www.yakult-sh.com.cn/engineering/1824.html">《一½‹‡æ–‡ç« è¯´æ¸…楚 TDengine çš?FQDNã€?/a>ã€?/p>

æ•°æ®èŠ‚ç‚¹(dnode)åQ?/strong> dnode æ˜?TDengine æœåŠ¡å™¨ä¾§æ‰§è¡Œä»£ç  taosd 在物ç†èŠ‚ç‚¹ä¸Šçš„ä¸€ä¸ªè¿è¡Œå®žä¾‹ï¼Œä¸€ä¸ªå·¥ä½œçš„¾pÈ»Ÿå¿…须有至ž®‘一个数æ®èŠ‚ç‚V€‚dnode 包å«é›¶åˆ°å¤šä¸ªé€»è¾‘的虚拟节ç‚?vnode)åQŒé›¶æˆ–者至多一个逻辑的管ç†èŠ‚ç‚?mnode)。dnode 在系¾lŸä¸­çš„唯一标识由实例的 End Point (EP)军_®šã€‚EP æ˜?dnode 所在物ç†èŠ‚ç‚¹çš„ FQDN (Fully Qualified Domain Name)和系¾lŸæ‰€é…置的网¾lœç«¯å£å·(Port)的组åˆã€‚通过é…ç½®ä¸åŒçš„端å£ï¼Œä¸€ä¸ªç‰©ç†èŠ‚ç‚?一å°ç‰©ç†æœºã€è™šæ‹Ÿæœºæˆ–容器)å¯ä»¥˜q行多个实例åQŒæˆ–有多个数æ®èŠ‚ç‚V€?/p>

虚拟节点(vnode)åQ?/strong> ä¸ºæ›´å¥½çš„æ”¯æŒæ•°æ®åˆ†ç‰‡ã€è´Ÿè½½å‡è¡¡ï¼Œé˜²æ­¢æ•°æ®˜q‡çƒ­æˆ–倾斜åQŒæ•°æ®èŠ‚ç‚¹è¢«è™šæ‹ŸåŒ–æˆå¤šä¸ªè™šæ‹ŸèŠ‚ç‚¹(vnodeåQŒå›¾ä¸?V2, V3, V4½{?。æ¯ä¸?vnode 都是一个相对独立的工作å•å…ƒåQŒæ˜¯æ—¶åºæ•°æ®å­˜å‚¨çš„基本å•元,å…ähœ‰ç‹¬ç«‹çš„è¿è¡Œçº¿½E‹ã€å†…存空间与æŒä¹…化存储的路径。一ä¸?vnode 包å«ä¸€å®šæ•°é‡çš„表(数æ®é‡‡é›†ç‚¹ï¼‰ã€‚当创å¾ä¸€å¼ æ–°è¡¨æ—¶åQŒç³»¾lŸä¼š‹‚€æŸ¥æ˜¯å¦éœ€è¦åˆ›å»ºæ–°çš?vnode。一个数æ®èŠ‚ç‚¹ä¸Šèƒ½åˆ›å»ºçš„ vnode 的数é‡å–决于该数æ®èŠ‚ç‚ÒŽ‰€åœ¨ç‰©ç†èŠ‚ç‚¹çš„¼‹¬äšg资æºã€‚一ä¸?vnode åªå±žäºŽä¸€ä¸?DBåQŒä½†ä¸€ä¸?DB å¯ä»¥æœ‰å¤šä¸?vnode。一ä¸?vnode é™¤å­˜å‚¨çš„æ—¶åºæ•°æ®å¤–,也ä¿å­˜æœ‰æ‰€åŒ…å«çš„表çš?schemaã€æ ‡½{‘Ö€¼ç­‰ã€‚一个虚拟节点由所属的数æ®èŠ‚ç‚¹çš„EPåQŒä»¥åŠæ‰€å±žçš„ VGroup ID 在系¾lŸå†…唯一标识åQŒç”±½Ž¡ç†èŠ‚ç‚¹åˆ›å¾òq¶ç®¡ç†ã€?/p>

½Ž¡ç†èŠ‚ç‚¹(mnode)åQ?/strong> 一个虚拟的逻辑å•å…ƒåQŒè´Ÿè´£æ‰€æœ‰æ•°æ®èŠ‚ç‚¹è¿è¡Œçжæ€çš„监控和维护,以åŠèŠ‚ç‚¹ä¹‹é—´çš„è´Ÿè½½å‡è¡?图中 M)ã€‚åŒæ—Óž¼Œ½Ž¡ç†èŠ‚ç‚¹ä¹Ÿè´Ÿè´£å…ƒæ•°æ®(åŒ…æ‹¬ç”¨æˆ·ã€æ•°æ®åº“ã€è¡¨ã€é™æ€æ ‡½{„¡­‰)的存储和½Ž¡ç†åQŒå› æ­¤ä¹Ÿ¿UîCØ“ Meta Node。TDengine 集群中å¯é…置多个(最多中‘…过 3 ä¸? mnodeåQŒå®ƒä»¬è‡ªåŠ¨æž„å»ºæˆä¸ÞZ¸€ä¸ªè™šæ‹Ÿç®¡ç†èŠ‚ç‚¹ç»„(图中 M0, M1, M2)ã€?/p>

mnode 间采ç”?master/slave 的机制进行管ç†ï¼Œè€Œä¸”采å–å¼ÞZ¸€è‡´æ–¹å¼è¿›è¡Œæ•°æ®åŒæ­? ä»ÖM½•æ•°æ®æ›´æ–°æ“作åªèƒ½åœ?Master 上进行。mnode 集群的创建由¾pÈ»Ÿè‡ªåŠ¨å®ŒæˆåQŒæ— éœ€äººå·¥òq²é¢„。æ¯ä¸?dnode 上至多有一ä¸?mnodeåQŒç”±æ‰€å±žçš„æ•°æ®èŠ‚ç‚¹çš„EPæ¥å”¯ä¸€æ ‡è¯†ã€‚æ¯ä¸?dnode 通过内部消æ¯äº¤äº’è‡ªåŠ¨èŽ·å–æ•´ä¸ªé›†ç¾¤ä¸­æ‰€æœ?mnode 所在的 dnode çš„EPã€?/p>

虚拟节点¾l?VGroup)åQ?/strong> ä¸åŒæ•°æ®èŠ‚ç‚¹ä¸Šçš„ vnode å¯ä»¥¾l„æˆä¸€ä¸ªè™šæ‹ŸèŠ‚ç‚¹ç»„(vnode group)æ¥ä¿è¯ç³»¾lŸçš„高å¯é ã€‚虚拟节点组内采å?master/slave 的方å¼è¿›è¡Œç®¡ç†ã€‚写æ“作åªèƒ½åœ?master vnode 上进行,¾pÈ»Ÿé‡‡ç”¨å¼‚æ­¥å¤åˆ¶çš„æ–¹å¼å°†æ•°æ®åŒæ­¥åˆ?slave vnodeåQŒè¿™æ ïL¡®ä¿äº†ä¸€ä»½æ•°æ®åœ¨å¤šä¸ªç‰©ç†èŠ‚ç‚¹ä¸Šæœ‰æ‹¯‚´ã€‚一ä¸?vgroup 里虚拟节点个数就是数æ®çš„副本数。如果一ä¸?DB 的副本数ä¸?NåQŒç³»¾lŸå¿…™åÀLœ‰è‡›_°‘ N æ•°æ®èŠ‚ç‚¹ã€‚å‰¯æœ¬æ•°åœ¨åˆ›å»ºDBæ—‰™€šè¿‡å‚æ•° replica å¯ä»¥æŒ‡å®šåQŒç¼ºçœäØ“ 1。ä‹Éç”?TDengine 的多副本ç‰ÒŽ€§ï¼Œå¯ä»¥ä¸å†éœ€è¦æ˜‚è´ëŠš„¼‚盘阵列½{‰å­˜å‚¨è®¾å¤‡ï¼Œž®±å¯ä»¥èŽ·å¾—åŒæ ïLš„æ•°æ®é«˜å¯é æ€§ã€‚虚拟节点组ç”Þq®¡ç†èŠ‚ç‚¹åˆ›å»ºã€ç®¡ç†ï¼Œòq¶ä¸”ç”Þq®¡ç†èŠ‚ç‚¹åˆ†é…一个系¾lŸå”¯ä¸€çš?IDåQŒVGroup ID。如果两个虚拟节点的 vnode group ID 相åŒåQŒè¯´æ˜Žä»–们属于åŒä¸€ä¸ªç»„åQŒæ•°æ®äº’为备份。虚拟节点组里虚拟节点的个数是å¯ä»¥åŠ¨æ€æ”¹å˜çš„åQŒå®¹è®¸åªæœ‰ä¸€ä¸ªï¼Œä¹Ÿå°±æ˜¯æ²¡æœ‰æ•°æ®å¤åˆ¶ã€‚VGroup ID 是永˜qœä¸å˜çš„åQŒå³ä½¿ä¸€ä¸ªè™šæ‹ŸèŠ‚ç‚¹ç»„è¢«åˆ é™¤ï¼Œå®ƒçš„ID也ä¸ä¼šè¢«æ”¶å›žé‡å¤åˆ©ç”¨ã€?/p>

TAOSCåQ?/strong> taosc æ˜?TDengine ¾l™åº”用æä¾›çš„驱动½E‹åº(driver)åQŒè´Ÿè´£å¤„ç†åº”用与集群的接å£äº¤äº’,æä¾› C/C++ 语言原生接å£åQŒå†…嵌于 JDBCã€C#ã€Pythonã€Goã€Node.js 语言˜qžæŽ¥åº“里。应用都是通过 taosc è€Œä¸æ˜¯ç›´æŽ¥è¿žæŽ¥é›†¾Ÿ¤ä¸­çš„æ•°æ®èŠ‚ç‚¹ä¸Žæ•´ä¸ªé›†ç¾¤˜q›è¡Œäº¤äº’的。这个模å—负责获å–åÆˆ¾~“存元数æ®ï¼›ž®†æ’å…¥ã€æŸ¥è¯¢ç­‰è¯äh±‚转å‘到正¼‹®çš„æ•°æ®èŠ‚ç‚¹åQ›åœ¨æŠŠç»“果返回给应用æ—Óž¼Œ˜q˜éœ€è¦è´Ÿè´£æœ€åŽä¸€¾U§çš„èšåˆã€æŽ’åºã€è¿‡æ»¤ç­‰æ“作。对äº?JDBCã€C/C++ã€C#ã€Pythonã€Goã€Node.js 接å£è€Œè¨€åQŒè¿™ä¸ªæ¨¡å—是在应用所处的物ç†èŠ‚ç‚¹ä¸Šè¿è¡Œã€‚åŒæ—Óž¼Œä¸ºæ”¯æŒå…¨åˆ†å¸ƒå¼çš„ RESTful 接å£åQŒtaosc åœ?TDengine 集群的æ¯ä¸?dnode 上都有一˜q行实例ã€?/p>

以上ž®±æ˜¯ TDengine 集群的主è¦é€»è¾‘å•å…ƒåQŒæˆ‘们将会通过更多文章åQŒå‘大家解读 TDengine 集群的更多设计秘¾cã€?/p> ]]>