正如開爾文勛爵所言:“衡量的目的在于了解。”不過這項簡單的格言實現起來卻難度極高。其真實含義分為以下兩點。
第一層含義非常明確:我們無法在不加以衡量的情況下,對事物加以認知。舉例來說,如果大家希望快速了解應用程序的運作情況,那么必須選取幾項關鍵并加以追蹤。“良好的性能”意味著功能可在短時間內完成,而糟糕的性能則代表著功能要耗時極久才能實現。
另一項重要指標在于,應用本身是否擁有“理想的性能”。例如,性能是否在不同負載條件下保持穩定,或者在應用的不同組件之間保持穩定?
而第二層含義則相對隱晦,但卻同樣重要:通過定義衡量標準,我們實際上也是在定義自身的知識界線。在應用環境當中,這可能并不是什么大問題; 但云環境則提出了完全不同的挑戰。由于我們無法對環境加以全面控制,因此不能衡量一切將變得非常可怕。
當應用被遷移至云端
有鑒于此,當將服務遷移至云端時,大家必須切實利用衡量手段掌握用戶的使用體驗。如果做不到這一點,或者同時只能關注同一項指標,那么我們將很難做出正確的判斷。
例如,在傳統Web應用環境當中,我們往往會將與頁面加載或者渲染速度指標視為其它組件的性能參照。例如,緩慢的頁面加載速度可能意味著數據庫后端存在故障或者承受的強度過大。
不過這種思考方式明顯有著自己的局限:其假定應用之間的連接并不存在問題。在內部運作的基礎設施當中,我們可以以此為前提進行排查——這種作法非常合理。但在云環境中,問題顯然沒那么單純。
云改變了一切
在云環境內,這種假設不再成立。我們的云服務供應商會隨時變更當前環境,且整個重新配置過程完全超出大家的控制范圍。服務本身就是我們付費所應得的范疇,再無其它!而如果想像內部基礎設施那么租賃完整的云資源,那么成本則會超出承受能力。
事實上,我們之所以將負載交由云環境打理,是因為其能夠提供傳統數據中心所無法企及的容量上限。這意味著底層基礎設施——包括服務運行所在的網絡、硬件乃至環境——始終作為變量存在。
這當然不是壞事,但問題在于衡量眾多獨立變量會帶來巨大挑戰。幸運的是,云環境本身提供了一種能夠切實完成管理任務的辦法:
獲取數據:大多數云服務提供單個指標或者查詢機制,即使您所選擇的供應商不提供相關方案,也可求助于其它廠商。每秒總線信息、存儲操作、計算資源使用量等等都能夠成為把握底層服務動態的線索。
處理數據:
一部分云服務會聚合數據并以易于使用的方式集中提供。大家可以借此隨時檢查數據流量,這也應當成為任何形式的云系統的必要配套方案。
數據可視化:
大多數數據聚合服務都提供多種可視化工具。運維人員可隨后借此討論并向管理層解釋當前運行狀況,并確保一切處于“基準”范圍內。只有把握住這種“正常”狀態,異常問題才能被及時發現。
確保應用生成有價值數據:
應用日志通常分為兩種類型:全面調試與停止發報。確保應用能夠生成有價值且具備可操作性的指標。
不要僅依賴單一來源:
如果大家只使用當前云服務廠商提供的衡量指標,那么恐怕無法保證審計合格。正如良好的財務控制與審計是保障業務成功的關鍵,我們在技術層面需要采取同樣的心態。事實上,大家不妨以懷疑的態度審視一切,并在必要時求助于第三方廠商。
當然,云服務供應商本身往往是最先發現問題的一方。遇到這種情況,我們應當與外部監控廠商交流問題,從而建立更可靠、更及時的衡量體系。