世界級運動員在為奧運會進行訓練時的表現,以及在為產品發布做準備時設計應用程序的表現,都有一些有趣的特點。在這個博客中,我想分享一些基本的指導原則,這些原則將有助於使你的應用程序更強大。

效率,而不僅僅是速度

並不是每一項奧林匹克運動都是速度賽跑。在很多其他領域,勝利與力量或敏捷有關。就物理需求而言,並非所有事件都是相同的,也並非所有事件都關注同一種能力。效率是共同的主線。無論你是滑下斜坡還是舉起重物,通常任務執行的效率越高,得分越高。當涉及到應用程序時,也是如此。

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

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

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

觀察和監控

你注意到運動員必須注意的所有事情了嗎?速度、心率、體脂比等?他們為什麼這樣做?來確定他們的健康狀況那奧運會的統計數據呢?關於一項運動的每一種可能的指標都可以在幾分鍾內被追蹤並在網上找到。為什麼?監測和確定運動員的表現。這揭示了它是如何影響整個運動的。

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

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

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

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

一些產品實際上使用人工智能和機器學習來幫助實現這一點,但仍需要人類的專業知識。要確定應用程序的運行狀況和性能,您需要查看哪些內容?

清洗白幹酪

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

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

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

這說起來容易做起來難,需要一段旅程和對細節的關注,才能讓一台運轉良好的機器運轉起來。你願意在盡可能早的階段得到性能反饋到什麼程度?從應用程序中擠出最後的10%可能需要花費很大的時間。當客戶轉換的成本很低時(這意味著他們可以很容易地通過點擊按鈕轉移到其他地方),對細節的關注可能是留住或失去客戶的區別。

從開始看結束

許多運動員在成功之前就已經看到了自己的勝利。由於重複和無情的訓練,他們一遍又一遍地在腦海中重溫事件的步驟,直到他們看到自己在到達奧林匹克賽場之前,拿著獎牌站在終點線上。一些最大的金牌得主每次在訓練中考慮放棄時,腦海中都看到了最終的結果。這是增強他們自決權的重要練習。他們必須從頭看到結局。

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

追求金牌,而不是銅牌

要想贏,你就必須為了贏而玩。奧林匹克運動員經過多年的訓練,就是為了那一刻,那一刻,一切都岌岌可危,比賽的一切都意味著一切。他們沒有為了獲得第三名而訓練和犧牲所有的時間、月、年。

想要在性能競賽中獲勝的公司都有充滿激情的員工,他們生活、飲食和呼吸都要遵守性能測試的紀律。性能工程師從不相信“足夠好”就是足夠好,即使企業是這樣。他們永遠不會完成分析、測試或監視。總是有另一個優化要做。他們總是在學習,表現成為一個持續的過程。

盡管對任何企業來說,保持活力是成功的必要條件,但沒有創新就不會繁榮。這意味著傾聽客戶的意見,盡可能地減少他們的工作量。它意味著跳出思維定式,想出完成舊任務的新方法。

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