海爾fcd熱水器怎么開關(海爾熱水器fcdh50g怎么使用)
前沿拓展:
導讀:
分布式鏈路追蹤作為解決分布式應用可觀測問題的重要技術,得物全鏈路追蹤(簡稱Trace2.0)基于OpenTelemetry提供的可觀測標準方案實現新一代的一站式全鏈路觀測診斷平臺,并通過全量采集Trace幫助業務提高故障診斷、性能優化、架構治理的效率。
全量采集Trace數據(日增數百TB 、數千億條Span數據)并以較低的成本保證數據的實時處理與高效查詢,對Trace2.0后端整體的可觀測性解決方案提出了極高的要求。本文將詳細介紹Trace2.0背后的架構設計、尾部采樣和冷熱存儲方案,以及我們是如何通過自建存儲實現進一步的降本增效(存儲成本下降66%)。
1. 整體架構設計全鏈路追蹤Trace2.0從數據接入側、計算、存儲到查詢整體模塊架構如上圖所示。這里說一下各組件的核心能力:
客戶端&數據采集: 集成并定制OpenTelemetry提供的多語言SDK(Agent),生成統一格式的可觀測數據。控制平面Control Plane: 統一的配置中心向數據采集側下發各類動態配置發并實時生效;支持向各采集器下發動態配置并實時生效,支持應用按實例數灰度接入,并提供出入參收集動態開關、性能剖析動態開關、流量染色動態配置、客戶端版本管理等。數據收集服務OTel Server: 數據收集器OTel Server兼容OpenTelemetry Protocol(OTLP)協議,提供gRPC和HTTP兩種方式接收采集器發送的可觀測數據。分析計算&存儲OTel Storage: 計算側除了基礎的實時檢索能力外,還提供了場景化的數據分析計算主要包括:存儲Trace數據:數據分為兩段,一段是索引字段,包括TraceID、ServiceName、SpanName、StatusCode、Duration和起止時間等基本信息,用于高級檢索;另一段是明細數據(源數據,包含所有的Span數據)計算SpanMetrics數據:聚合計算Service、SpanName、Host、StatusCode、Env、Region等維度的執行總次數、總耗時、最大耗時、最小耗時、分位線等數據;業務單號關聯Trace:電商場景下部分研發多以訂單號、履約單號、匯金單號作為排障的輸入,因此和業務研發約定特殊埋點規則后在Span的Tag里添加一個特殊字段&34;bizOrderId={實際單號}&34;便將這個Tag作為ClickHouse的索引字段;從而實現業務鏈路到全鏈路Trace形成一個完整的排障鏈路;Redis熱點數據統計:在客戶端側擴展調用Redis時入參和出參SpanTag埋點,以便統Redis命中率、大Key、高頻寫、慢調用等指標數據;MySQL 熱點數據統計: 按照SQL指紋統計調用次數、慢SQL次數以及關聯的接口名。2. 尾部采樣&冷熱存儲得物早期的全鏈路追蹤方案出于對存儲成本的考慮,在客戶端設置了1%的采樣率,導致研發排查問題時經常查詢不到想看的Trace鏈路。那么Trace2.0為了解決這個問題,就不能僅僅只是簡單地將客戶端的采樣率調整為100%,而是需要在客戶端全量采集Trace數據的同時,合理地控制Trace存儲成本。且從實踐經驗來看,Trace數據的價值分布是不均勻的,隨著時間的推移Trace的數據價值是急速降低的。
全量存儲Trace數據不僅會造成巨大的成本浪費,還會顯著地影響整條數據處理鏈路的性能以及穩定性。所以,如果我們能夠只保存那些有價值、大概率會被用戶實際查詢的Trace,就能取得成本與收益的平衡。那什么是有價值的Trace呢?根據日常排查經驗,我們發現業務研發主要關心以下四類優先級高場景:
在調用鏈上出現了異常ERROR;在調用鏈上出現了大于「200ms」的數據庫調用;整個調用鏈耗時超過「1s」;業務場景的調用鏈,比如通過訂單號關聯的調用鏈。在這個背景下,并結合業界的實踐經驗,落地Trace2.0的過程中設計了尾部采樣&冷熱分層存儲方案,方案如下:
「3天」內的Trace數據全量保存,定義為熱數據。基于Kafka延遲消費+Bloom Filter尾部采樣的數據(錯、慢、自定義采樣規則、以及默認常規0.1%采樣數據)保留「30天」,定義為冷數據。整體處理流程如下:
OTel Server數據收集&采樣規則: 將客戶端采集器上報的全量Trace數據實時寫入Kafka中,并把滿足采樣規則(上述定義的場景)的Span數據對應的TraceID記錄到Bloom Filter中;OTel Storage持久化熱數據: 實時消費Kafka中數據,并全量持久化到ClickHouse熱集群中;OTel Storage持久化冷數據: 訂閱上游OTel Server的Bloom Filter, 延遲 消費Kafka中的數據,將TraceID在Bloom Filter中可能存在的Span數據持久化到ClickHouse冷集群中;延遲時間配置的30分鐘,盡量保證一個Trace下的Span完整保留。TraceID點查: Trace2.0自定義了TraceID的生成規則;在生成TraceID時,會把當前時間戳秒數的16進制編碼結果(占8個字節)作為TraceID的一部分。查詢時只需要解碼TraceId中的時間戳,即可知道應該查詢熱集群還是冷集群。接下來再介紹一下尾部采樣中Bloom Filter的設計細節,如下圖所示:
整體處理流程如下:
OTel Server會將滿足采樣規則的Span數據對應的TraceID,根據TraceID中的時間戳寫入到對應時間戳的Bloom Filter中;Bloom Filter會按十分鐘粒度(可根據實際的數據量并結合BloomFilter的誤算率和樣本大小計算內存消耗并調整)進行分片,十分鐘過后將Bloom Filter進行序列化并寫入到ClickHouse存儲中;OTel Storage消費側拉取Bloom Filter數據(注意:同一個時間窗口,每一個OTel Server節點都會生成一個BloomFilter)并進行合并Merge(減少Bloom Filter的內存占用并提高Bloom Filter的查詢效率)。綜上所述,Trace2.0僅使用了較少的資源就完成了尾部采樣和冷熱分層存儲。既為公司節約了成本,又保存了幾乎所有「有價值」Trace,解決了業務研發日常排查時查詢不到想看的Trace的問題。
3. 自建存儲&降本增效3.1 基于SLSTrace的解決方案Trace2.0建設初期采用了 SLS專為OpenTelemetry定制的Trace方案 【1】 ,提供了Trace查詢、調用分析、拓撲分析等功能,如下圖所示:
SLSTrace主要處理流程如下:
利用OpenTelemetry Collector aliyunlogserverexporter 【2】將Trace數據寫入到SLSTrace Logstore中;SLSTrace通過默認提供的Scheduled SQL任務定時聚合Trace數據并生成相應的Span指標與應用、接口粒度的拓撲指標等數據。隨著Trace2.0在公司內部全面鋪開,SLS的存儲成本壓力變得越來越大,為了響應公司“利用技術手段實現降本提效”的號召,我們決定自建存儲。
3.2 基于ClickHouse的解決方案目前業內比較流行的全鏈路追蹤開源項目(SkyWalking、Pinpoint、Jaeger等)采用的存儲大都是基于ES或者HBase實現的。而近幾年新興的開源全鏈路追蹤開源項目( Uptrace 【3】 、 Signoz 【4】 等)采用的存儲大都是基于ClickHouse實現的,同時將Span數據清洗出來的指標數據也存儲在ClickHouse中。且ClickHouse的物化視圖(很好用)也很好地解決了指標數據降采樣(DownSampling)的問題。最終經過一番調研,我們決定基于ClickHouse來自建新的存儲解決方案。整體架構圖如下:
整體處理流程如下:
Trace索引&明細數據: OTel Storage會將基于Span原始數據構建的索引數據寫入到SpanIndex表中,將Span原始明細數據寫入到SpanData表中(相關表設計可以參考 Uptrace 【5】 );計算&持久化SpanMetrics數據: OTel Storage會根據Span的Service、SpanName、Host、StatusCode等屬性統計并生成「30秒」粒度的總調用次數、總耗時、最大耗時、最小耗時、分位線等指標數據,并寫入到SpanMetrics表;指標 Down S ampling功能 : 利用ClickHouse的物化視圖將「秒級」指標聚合成「分鐘級」指標,再將「分鐘級」指標聚合成「小時級」指標;從而實現多精度的指標以滿足不同時間范圍的查詢需求; span_metrics_10m_mv CREATE MATERIALIZED VIEW IF NOT EXISTS &39;{database}&39;.span_metrics_10m_mv_local on cluster &39;{cluster}&39; TO &39;{database}&39;.span_metrics_10m_local AS SELECT a.serviceName as serviceName, a.spanName as spanName, a.kind as kind, a.statusCode as statusCode, toStartOfTenMinutes(a.timeBucket) as timeBucket, sum(a.count) as count, sum(a.timeSum) as timeSum, max(a.timeMax) as timeMax, min(a.timeMin) as timeMin FROM &39;{database}&39;.span_metrics_30s_local as a GROUP BY a.serviceName, a.spanName, a.kind, a.statusCode, toStartOfTenMinutes(a.timeBucket); 元數據 ( 上下游拓撲數據 ) : OTel Storage根據Span屬性中的上下游關系(需要在客戶端埋相關屬性),將拓撲依賴關系寫入到圖數據庫Nebula中。ClickHouse寫入細節ClickHouse使用Distributed引擎實現了Distributed(分布式)表機制,可以在所有分片(本地表)上建立視圖,實現分布式查詢。并且Distributed表自身不會存儲任何數據,它會通過讀取或寫入其他遠端節點的表來進行數據處理。SpanData表創建語句如下所示:
span_data CREATE TABLE IF NOT EXISTS &39;{database}&39;.span_data_local ON CLUSTER &39;{cluster}&39; ( traceID FixedString(32), spanID FixedString(16), startTime DateTime64(6 ) Codec (Delta, Default), body String CODEC (ZSTD(3)) ) ENGINE = MergeTree ORDER BY (traceID,startTime,spanID) PARTITION BY toStartOfTenMinutes(startTime) TTL toDate(startTime) + INTERVAL &39;{TTL}&39; HOUR; span_data_distributed CREATE TABLE IF NOT EXISTS &39;{database}&39;.span_data_all ON CLUSTER &39;{cluster}&39; as &39;{database}&39;.span_data_local ENGINE = Distributed(&39;{cluster}&39;, &39;{database}&39;, span_data_local, xxHash64(concat(traceID,spanID,toString(toDateTime(startTime,6)))));整體寫入流程比較簡單(注意:避免使用分布式表),如下所示:
定時獲取ClickHouse集群節點;通過Hash函數選擇對應的ClickHouse節點,然后批量寫ClickHouse的本地表。全鏈路追蹤是一個典型的寫多讀少的場景,因此我們采用了ClickHouse ZSTD壓縮算法對數據進行了壓縮,壓縮后的壓縮比高達12,效果非常好。目前ClickHouse冷熱集群各使用數十臺16C64G ESSD機器,單機寫入速度25w/s(ClickHouse寫入的行數)。相比于初期的阿里云SLSTrace方案,存儲成本下降66%,查詢速度也從800+ms下降至490+ms。
下一步規劃目前Trace2.0將Span的原始明細數據也存儲在了ClickHouse中,導致ClickHouse的磁盤使用率會有些偏高,后續考慮將Span明細數據先寫入HDFS/OSS等塊存儲設備中,ClickHouse來記錄每個Span在塊存儲中的offset,從而進一步降低ClickHouse的存儲成本。
關于我們:
得物監控團隊提供一站式的可觀測性平臺,負責鏈路追蹤、時序數據庫、日志系統,包括自定義大盤、應用大盤、業務監控、智能告警、AIOPS等排障分析。
引用
【1】 SLSTrace方案
https://developer.aliyun.com/article/785854
【2】 SLSTrace Contrib
https://github.com/opentelemetry/opentelemetrycollectorcontrib/tree/main/exporter/alibabacloudlogserviceexporter
【3】 Uptrace
https://uptrace.dev/
【4】 Signoz
https://signoz.io/
【5】 Uptrace Schema設計
https://github.com/uptrace/uptrace/tree/v0.2.16/pkg/bunapp/migrations
作者:南風
來源:微信公眾號:得物技術
出處:https://mp.weixin.qq.com/s?__biz=MzkxNTE3ODU0NA==&mid=2247490118&idx=1&sn=821257fcd7f89e2a4a228e7787a4eef5
拓展知識:
海爾fcd熱水器怎么開關
按一下是開,然后再按一下是關。海爾熱水器fcdh60he使用方法
打開進水角閥閥門,再打開出水管上的閥門,打開控制噴頭的混水閥,開到全熱水端。噴頭中會有空氣出來,直到噴頭噴水,機器就注滿了。
建議先將溫度設置到75度,待加熱完成后,放熱水洗浴時盡量調小出水流量,以延長出熱水時間,一般情況下60L的機器冬季可滿足2030分鐘的洗浴,放熱水的時間長短取決于自來水的溫度和放水的流量大小。建議盡量調小水流。
- NIGAO集成灶售后服務電話10-23
- TCL中央空調售后服務熱線01-30
-
格力空調知識講解(如何正確使用和保養格力空調)。
2025-06-07
-
洗衣機馬達怎么試(洗衣機馬達測試方法)
2025-06-07
-
合肥高新區燃氣灶油煙機維修(如何自行解決常見故障)
2025-06-07
-
貝格爾空氣源熱泵售后維修電話(貝格爾空氣源熱泵售后維修電話)
2025-06-07
-
空調清洗劑的危害(使用不當會對身體造成哪些傷害?)
2025-06-07


