首頁 後端開發 php教程 簡單介紹PHP中的分散式跟踪

簡單介紹PHP中的分散式跟踪

Aug 17, 2017 am 09:03 AM
php 分散式 追蹤


摘要:自從實現微服務化後,我們碰到了許多問題。其中最大的問題就是如何排除故障,服務化後的介面通常會依賴多個服務,依賴介面的緩慢會直接影響介面的服務品質。這種依賴導致的緩慢情況在線上很常見,但是並不好排查,究 ...

  自從實現微服務化後,我們碰到了很多問題。其中最大的問題就是如何排除故障,服務化後的介面通常會依賴多個服務,依賴介面的緩慢會直接影響介面的服務品質。

        這種依賴導致的緩慢情況在線上很常見,但是並不好排查,究其原因是線上都是透過日誌進行追蹤的大量的日誌開發人員並不是很直觀,且有的公司開發人員是看不到線上具體執行情況。一般來說線上這些小機率故障代表系統的隱患,當流量增加後這些隱患會被放大甚至直接導致線上大規模故障,為了避免類似的事情我們需要做很多事情,最直觀的就是用分散式追蹤系統去統計分析。

        我們常見到大牛在講線上表現怎麼優化,怎麼提高效能,其實有個重要的還環節他們並沒有提及,他們是如何發現低機率故障?分散式追蹤系統在大型網路公司是很常見,但是中小型公司是沒有技術實力去實現這個系統的。而從我們角度來看即使流量很小但是對於公司仍舊很重要的系統是我們需要強化的,能夠發現問題才能解決問題這是我一直貫徹的宗旨。

        分散式追蹤系統特定的實現是有一定技術難度的,要實現效能的捕捉、日誌寫入、日誌收集整理、日誌傳輸、日誌儲存、日誌索引、日誌即時分析、最後合併展示,要求系統能夠應付大流量系統的衝擊。如每次請求每個介面產生1k的日誌,那麼QPS 2000 的伺服器就會產生2M的日誌,如果是一次請求依賴5個介面那麼就是每秒10M的日誌,當線上業務更複雜流量更大的時候,這個數值還會增加。

        大型網路公司有許多分散式追蹤系統,能夠承受數十億流量,但是對於小公司來說這種架構負擔很大,其中許多環節如依賴分散式訊息系統、分散式儲存、分散式計算,光這幾個至少會使用6台以上伺服器,對於一般小型公司性價比不高。

        這次我們開源的分散式追蹤是有兩款,一款是給中小型網路公司使用的單機版他可以支撐PV 2000w的業務系統(如支付系統)。另外還有一款支援分散式數十億PV的分散式追蹤系統。目前剛開放Fiery單機版(https://github.com/weiboad/fiery)這個版本是針對中小型企業使用而設計的,整個專案就是一個Jar包開箱即用,只要有Java8 runtime即可直接使用,當然系統需要簡單的做一個埋點工作。而C++分散式版本依賴東西較多對運維人員有一定能力要求,後續看單機版情況後續放出。這些完全開源內部有敏感資料的核心交易系統也完全可以使用。

        目前市面上有多個方式的分散式追蹤,有的是公司自己內部使用,有的則是小規模免費大規模付費的服務。常見的分散式追蹤是透過統計方式去記錄每一個Block的效能情況。目前我們提供的方式和市面的方式並不完全一樣,我們透過不斷的實驗做了大量的簡化,只保留我們認為真正實用的功能,我們將系統設計為關鍵系統分散式監控。如支付系統、交易系統。

        我們記錄了每個請求的具體情況、返回值、特定的性能等信息,透過表格分析可以快速的發現線上依賴接口性能(第三方或者未埋點的接口性能統計)、做埋點的介面也獨立做了效能排行分析。透過查看分析表格後我們可以快速的找到最慢的介面請求回放,以此分析線上效能緩慢的原因。透過實踐我們發現很多情況下都是PHP依賴的資料資源緩慢導致了PHP介面效能不佳。所以埋點的重點都是依賴資源。其他資訊使用者可以根據自己需求增加,這樣可以減少大量無用日誌,可以更節儉一些。

        這次開源的Fiery主要有三個部分、PHP侵入式埋點庫、精簡的日誌監控推送模組、服務端。這三個就實現了一個PV2000w以下的網站分散式追蹤。

        埋點庫會在入口產生Traceid(UUID)這個Traceid內隱藏著入口伺服器的IP位址,請求時間,所有後續產生的日誌都會用這個UUID作為標示。在日誌收集後所有相關日誌都會依這個UUID進行儲存。埋點庫會在運行時負責接收其他請求發送的Traceid和發送產生維護RPCID,RPCID是一個有層級的計數器,透過它我們可以將呼叫關係順序及層級直接進行還原展示給開發人員。另外在PHP運作過程中如果產生Exception也會被埋點庫擷取記錄下來,以供服務端進行去重統計。最後會將這些日誌落地到伺服器本地磁碟,由於一些原因多個PHP進程同時寫一個檔案的時候偶爾會出現亂序情況,我們現在是按進程ID加上專案名稱作為檔案名稱進行落地的。

        Fiery日誌抓取傳輸我們實作了一個簡單的版本,這麼做是為了簡化使用維運人員的工作,目前確實有很多開源提供類似的功能、但是需要依賴其他環境,這對於運維來說有一定負擔。我們還有個實驗性的PHP的日誌抓取傳輸服務,但是還是實驗的功能,預計會有一定的缺陷各位用戶可以參與調試改進。

        Fiery的服務端我們做了許多工作,內建了Lucene和Rocksdb,分別對請求進行索引和儲存。並且做了一些內存統計的工作,目前我們的統計維度是固定的,只針對本地接口,依賴接口,Mysql、Curl的響應情況進行統計、另外提供調用關係回放、錯誤日誌警報去重統計。透過這些功能可以快速的發現線上關鍵點的效能故障,系統異常。目前只是單機版,後續需要我可以將它進一步擴展成更簡單的分散式方式。

        以上這些服務並不僅僅服務於線上,目前我們內部還用他做了很多有意思的嘗試,如QA測試的環境接入一套,測試完畢後把故障接口產生的Traceid直接發給開發,開發能夠透過Traceid找到此次請求所有調用經過、參數、返回情況、性能都可以直觀看到方便分析.上線之前的單元測試也可以這麼做。前陣子我發微博推廣Fiery的時候有人還提到可以用它來做蜜罐,查看駭客入侵的過程,具體細節。後續功能還待大家繼續發掘和改進,這個系統就是為了填補PHP生態空缺而做的。

以上是簡單介紹PHP中的分散式跟踪的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1248
24
在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

See all articles