博客

申辦奧運的5條建議

作者

斯科特•摩爾

客戶工程總監

世界級運動員在為奧運會進行訓練時的性能,以及在為產品發布做準備時對應用程序的性能進行工程設計時的性能,都具有一些有趣的特征。在這篇博客中,我想分享一些基本的指導原則,這些原則將幫助您的應用程序強大地完成。

效率,而不僅僅是速度

並不是所有的奧運會項目都是速度比賽。在很多其他領域,獲勝取決於力量或敏捷性。並不是所有的項目在體能要求上都是一樣的,也不是所有的項目都關注同一種能力。效率是共同的主線。無論你是在斜坡上滑雪還是舉重,通常情況下,完成任務的效率越高,得分就越高。當涉及到應用程序時,也是如此。

很多時候,作為一種活動的性能工程都是關於測量某些東西有多快,或者它可以調到多快。然而,為了速度而速度會導致其他問題。我聽到許多客戶說他們的主要目標是在持續集成管道中實現性能測試的自動化和可重複。構建這種自動化從而使其成為一種更快的測試方式本身並沒有價值。它是關於以自動化的方式盡快獲得性能反饋。如果這種快速、自動化的測試CI管道沒有發現性能問題,但您的組織仍然在生產中與性能問題作鬥爭,那該怎麼辦?也許你自動化的東西讓你跑得這麼快並不是正確的事情。

如果讓事情更快實際上是一個失敗,會發生什麼?如果由於代碼中的重要驗證沒有意外地包含在最新的構建中,所以時間變得更快了,那又會怎樣呢?時間改進了,但是缺少驗證檢查意味著可能丟失關鍵數據。在這種情況下,更快並不代表更好。

與其關注速度,不如關注效率。這意味著減少計算機所擅長的工作量和重複性任務。這並不能取代在軟件開發生命周期的關鍵交叉點進行手工評審的需要。理解代碼的人仍然需要驗證結果。這還意味著充分利用每一種資源的潛力,同時控製基礎設施運營成本,保持雲賬單較低。查看被測試係統的所有方麵,並確定如何最有效地使用每個組件。這將幫助您開始創建和維護Olympian應用程序。

觀察和監控

你有沒有注意到運動員需要監控的所有東西?速度、心率、體脂率等?他們為什麼要這樣做?來確定他們的健康狀況那奧運會的統計數據呢?關於一項運動的每一種可能的指標都可以在幾分鍾內在網上得到。為什麼?監督和決定運動員的表現。這揭示了它如何影響整個運動。

需要對應用程序進行監視,以確定運行狀況和性能。最終用戶體驗可以通過合成流程來計時,合成流程每隔幾分鍾運行一次,並報告頁麵時間。真實用戶監控可以對廣泛用戶之間的實際實時會話進行計時,以確定特定用戶類型或地理區域是否存在性能問題。基礎設施監視可以判斷任何係統資源是否運行不足、是否被限製或是否拋出錯誤。可以解析日誌以查看各個請求的響應時間。

可以分析代碼以了解每個函數的重量,可以分析數據庫以了解每個數據請求的開銷有多高。可以監視網絡,以確定是否有足夠的帶寬來處理請求的數量。監視建立在微服務和容器上的調製解調器應用程序需要額外的跳與跳之間的遙測。每次發出請求時,從服務器到用戶的路徑可能不同,一個小時前使用的容器甚至可能不存在,因為應用程序是彈性的。

在所有這些情況下,度量的內容對於找到性能問題的根本原因和整個係統的健康狀況非常重要。僅僅使用性能測試工具在不進行監視的情況下在係統上產生負載並不是有價值的實踐。您可能會確定哪些用戶時間較高,但不知道原因。

任何性能測試工具的價值都是能夠為業務提供有意義的結果,而這些結果來自包含關鍵指標的圖表。這些指標來自所使用的監視。您可能會過度監視到影響係統本身性能的程度,因此找到正確的平衡非常重要。即便如此,仍然有大量的數據,可能需要特殊的專業知識來理解這些數據。

一些產品實際上使用人工智能和機器學習來幫助實現這一點,但人類的專業知識仍然是必要條件。要確定應用程序的運行狀況和性能,您要考慮什麼?

清洗白軟幹酪

在吉姆·柯林斯的《從優秀到偉大》一書中,他講述了戴夫·斯科特的故事——他連續六次贏得鐵人三項比賽。當被問及成功的秘訣時,他將其歸因於對細節的關注。戴夫甚至願意把他的白軟幹酪洗幹淨,去掉多餘的脂肪再吃。參加最高水平比賽的運動員們一點也不覺得奇怪。不惜一切代價。想想運動員為了減少運動中的摩擦而穿的特殊服裝。對細節的關注有時就意味著輸贏的差別。

現代應用程序可能很複雜,需要注意細節。在部署前的最後一刻對20%的應用程序進行性能測試將無法有效降低生產部署的風險。

對幾個關鍵指標的簡單監視可能無助於在客戶之前發現應用程序瓶頸。性能必須從一開始就設計到產品中,性能需要是一個連續的,而不是一個特定的事件。與傳統APM工具相比,可能需要可觀察性工具來精確定位故障點。它可能需要使用aiop來快速瀏覽所有詳細數據。

這說起來容易做起來難,要讓一台運轉良好的機器運轉起來,需要一段旅程和對細節的關注。為了在盡可能早的階段獲得績效反饋,你願意走多遠?從應用程序中擠出最後的10%可能需要花費很大的努力。當客戶轉換的成本較低時(這意味著他們可以輕鬆地點擊一個按鈕去其他地方),對細節的關注可能是留住或失去該客戶的區別。

從一開始就看到結局

許多運動員在成功之前就已經預見到了自己的成功。由於反複和不懈的訓練,他們在腦海中一遍又一遍地重溫著比賽的步驟,直到他們看到自己在奧運賽場上拿著獎牌站在終點線上。一些金牌的最大贏家在訓練中,每次考慮放棄時,他們的腦海中都能看到最終的結果。這是加強他們自決的一項重要行動。他們必須從一開始就看到結局。

我們都有過這樣的經曆:有人在用電腦為我們處理一筆交易時,聽到這樣的話:“對不起,今天電腦很慢。”最終用戶的印象是應用程序或係統質量很差。他們不關心所有的代碼是否獨立地快速運行,或者數據庫是否以毫秒為單位返回數據。他們不在乎在服務器上花了多少錢。如果他們看到紡車或屏幕花了太長時間才返回他們需要的信息,終端用戶的體驗就會很差。當參與軟件開發過程的所有涉眾都明白,每一塊拚圖都很重要,每一個領域都可能影響應用程序性能的好壞時,這有助於激勵他們在每個階段進行優化。即使在軟件開發的最初階段,也要記住最終用戶,這樣才能確保最好的體驗。我們都要從一開始就看到結局。

追求金牌,而不是銅牌

為了贏,你必須玩得贏。奧林匹克運動員為他們的那一刻訓練多年,在那一刻,一切都在關鍵時刻,在比賽的那一刻,一切都意味著一切。他們訓練和犧牲所有的時間,月,年,不是為了第三名。

想要在績效競賽中獲勝的公司需要有充滿激情的員工,他們生活、吃飯、呼吸著績效測試的紀律。性能工程師從來不相信“足夠好”就是足夠好,即使業務是這樣的。他們從未完成分析、測試或監控。總有另一個優化要做。他們一直在學習,表演成為一個持續的過程。

盡管保持照明對任何企業的成功都是必不可少的,但沒有創新就不會興旺發達。這意味著傾聽客戶的意見,並盡可能減少他們的勞動。它意味著跳出思維定勢,想出新方法來完成舊任務。

像Netflix這樣的公司並不從事性能測試或工程業務,但他們為性能社區提供了大量值得探索的新領域(混沌工程、火焰圖等),因為他們可以進行創新。無論以何種標準衡量,這家公司都做得相當不錯。你是否抓住每一個創新的機會,以不同的方式做事情,以使你的應用程序值得一試?

*最初發表於SD倍

作者:

斯科特•摩爾

Baidu
map