功能
AWS X-Ray 是一項服務,收集應用程序所請求的相關數據,並提供用於查看、篩選和獲取數據洞察力的工具,以確定問題和發現優化的機會。
對於任何被跟蹤的對您應用程序的請求,不僅可以查看請求和響應的詳細信息,還可以查看應用程序對下游AWS 資源、微服務、數據庫和 HTTP Web API 進行的調用的詳細信息。
類似的全鏈路追蹤監控系統還有:
總結:X-Ray本質上是一個適用於AWS的分布式系統調用鏈追蹤工具,我們選擇X-Ray的原因是我們的應用都是原生在AWS雲上,能夠很好的跟X-Ray實現集成,尤其是對於AWS服務的調用記錄,X-Ray原生支持。
缺點:與AWS強綁定,犧牲了使用多雲的靈活性。
雲架構的設計是一個多因素綜合結果,前期的過度設計可能會導致成本和復雜度過高,需要根據公司實際業務需求選擇合適的設計方案。
關於X-Ray詳見:X-Ray
用途
1,快速定位程序故障原因,降低MTTR
2,自動生成雲端架構圖,統一視圖
3,發現系統中可以優化的點
特點
自動根據請求生成雲端結構圖
圖中:app_1和app_2為我們開發的程序,其他部分結構為自動生成
可以根據此圖,快速的定位到接口問題,比如響應慢,返回錯誤等等
分析接口每一步操作延時
通過跟蹤請求,能夠詳細分析請求中每一步的操作時間。
能夠協助排查問題,優化方案。
如何使用
引入X-Ray的SDK即可,對開發改動不大
適用於 .NET 的 AWS X-Ray 開發工具包 - AWS X-Ray
以Python為例
僅需在原始代碼部分增加上部分的引入庫,以及下面的初始化X-Ray的SDK即可。
from aws_xray_sdk.core import patch_all
patch_all()
from aws_xray_sdk.core import xray_recorder
from aws_xray_sdk.ext.flask.middleware import XRayMiddleware
<原始代碼部分>
xray_recorder.configure(service='app-2')
XRayMiddleware(app, xray_recorder)
性能影響測試
接口性能影響
使用X-Ray
10000次請求,分別測試10次取平均值
使用X-Ray:129.1466495196024
不用X-Ray:121.5133796532948
結論:初步測試,使用X-Ray約有6%的性能損失。
實例影響
CPU占用:0.1%
內存占用:0.0%
結論:幾乎沒影響
壓力測試
按照我們的一個中等項目的訪問量:
250000/分鍾,100台服務器計算
每台服務器的速率為42QPS
上述測試性能時,單台服務器的QPS為77,未出現任何性能問題。
由此結論:再達到中等項目的量級2倍之前,不會存在性能問題。
AWS技術支持關於性能問題的回復:
監控
目前X-Ray提供的是問題排查工具,未提供告警功能。
可以借助AWS SDK,在發生問題時,獲取X-Ray的圖表,集成到現有的告警體系中。
費用
以us-west-2區域計算
每月記錄的前 100000 條軌跡免費。
超出免費套餐的限額后,每一百萬條的記錄軌跡費用為 5.00 USD(每條軌跡 0.000005 USD)。
超出免費套餐的限額后,每一百萬條的接收軌跡費用為 0.50 USD(每條軌跡 0.000005 USD)。
以中等項目的API訪問量為例,計算使用X-Ray的費用:
25萬/分鍾*60*24h*30d/100萬*$0.5*5%采樣率=$270/月
即,如開啟X-Ray,則增加$270/月的費用
結論:這個費用值得承擔。