系統(tǒng)監(jiān)控數(shù)據(jù)該用推還是拉?
系統(tǒng)度量數(shù)據(jù)的收集方式通常分為拉動式(Pull)和推動式(Push)。這兩種方式在數(shù)據(jù)采集和傳輸?shù)倪^程中具有不同的特點和適用場景。
圖片
1.拉動式
拉動式是指數(shù)據(jù)收集系統(tǒng)定期向目標設備或系統(tǒng)發(fā)送請求,以獲取數(shù)據(jù)。這種方式的關(guān)鍵在于,數(shù)據(jù)收集方主動發(fā)起請求,目標系統(tǒng)被動響應。
圖 1 顯示了通過 HTTP 拉動模式收集數(shù)據(jù)的情況。我們有專門的指標收集器,定期從運行的應用程序中提取指標值。
在這種方法中,指標收集器(Metrics Collector)需要知道要從哪些服務端點獲取數(shù)據(jù)。一種簡單的方法是使用一個文件來保存 “指標收集器 ”服務器上每個服務端點的 DNS/IP 信息。雖然想法很簡單,但這種方法在大規(guī)模環(huán)境中很難維護,因為服務器會經(jīng)常添加或移除,而且我們要確保度量收集器不會錯過從任何新服務器收集度量數(shù)據(jù)。
優(yōu)點
- 控制靈活性:拉動式系統(tǒng)可以根據(jù)需求定期或按需請求數(shù)據(jù),因此具有較高的控制靈活性。用戶可以指定數(shù)據(jù)采集的時間或條件。
- 減少不必要的數(shù)據(jù)傳輸:只有在請求時才會收集數(shù)據(jù),這意味著如果沒有實際的需求或事件,數(shù)據(jù)不會被頻繁地傳輸,從而避免了不必要的網(wǎng)絡流量和存儲。
- 簡化處理:拉動式方式可以在數(shù)據(jù)請求時就進行數(shù)據(jù)處理,因此系統(tǒng)接收到的數(shù)據(jù)通常已被篩選或加工過。
缺點
- 延遲問題:因為數(shù)據(jù)是按需收集的,如果請求頻率較低,可能會存在一定的延遲,不能即時獲取最新的數(shù)據(jù)。
- 請求開銷:每次數(shù)據(jù)請求都需要一定的系統(tǒng)資源和時間,特別是在數(shù)據(jù)量較大的時候,頻繁請求可能會導致性能瓶頸。
- 系統(tǒng)負擔:當多個設備或系統(tǒng)都使用拉動方式時,服務器可能需要處理大量的請求,從而導致壓力增加。
我們可以通過 Kubernetes、Zookeeper 等提供的服務發(fā)現(xiàn)(Service Discovery)獲得可靠、可擴展和可維護的解決方案,其中服務會注冊其可用性,每當服務端點列表發(fā)生變化時,度量收集器就會收到服務發(fā)現(xiàn)組件的通知。服務發(fā)現(xiàn)包含有關(guān)何時何地收集度量的配置規(guī)則,如圖 2 所示。
2.推動式
推動式是指數(shù)據(jù)源主動向數(shù)據(jù)收集系統(tǒng)發(fā)送數(shù)據(jù)。數(shù)據(jù)生成方(如設備、系統(tǒng))在事件發(fā)生或數(shù)據(jù)更新時,主動將數(shù)據(jù)推送到接收方。
第一步
指標收集器從服務發(fā)現(xiàn)獲取服務端點的配置元數(shù)據(jù)。元數(shù)據(jù)包括拉取間隔、IP 地址、超時和重試參數(shù)等。
第二步
指標收集器通過預定義的 HTTP 端點(例如 /metrics)獲取指標數(shù)據(jù)。要公開該端點,通常需要在服務中添加客戶端庫。在圖 3 中,服務是 Web 服務器。
第三步
另外,度量收集器還可以向服務發(fā)現(xiàn)(Service Discovery)注冊變更事件通知,以便在服務端點變更時接收更新?;蛘撸攘渴占骺梢远ㄆ谳喸兌它c變化。
優(yōu)點
- 實時性強:數(shù)據(jù)能夠在生成或變化的瞬間被推送到接收方,這種方式適合需要高實時性的數(shù)據(jù)場景,如監(jiān)控系統(tǒng)或?qū)崟r分析。
- 減少請求開銷:由于數(shù)據(jù)是被主動推送的,收集系統(tǒng)不需要周期性地發(fā)送請求,減少了系統(tǒng)間的通信開銷。
- 靈活的事件驅(qū)動:可以根據(jù)特定的事件或條件觸發(fā)數(shù)據(jù)推送,而不是基于時間,這使得數(shù)據(jù)采集更加精確和高效。
缺點
- 數(shù)據(jù)過載:如果推送過于頻繁,可能會導致數(shù)據(jù)過載,尤其是在高頻變化的場景下,接收方可能難以處理過多的數(shù)據(jù)。
- 管理復雜性:在推送式數(shù)據(jù)收集模式下,數(shù)據(jù)源需要管理發(fā)送的頻率和觸發(fā)條件,系統(tǒng)間需要保持較強的同步和協(xié)調(diào),否則可能會發(fā)生數(shù)據(jù)丟失或重復傳輸。
- 網(wǎng)絡負擔:如果數(shù)據(jù)推送過于頻繁或數(shù)據(jù)量較大,可能會給網(wǎng)絡帶來負擔,尤其在網(wǎng)絡帶寬有限的情況下。