5

這是一個棘手的問題,前些天我被問到過......我們正在研究一個非常複雜的電話(SIP)應用程序,其中包含混合的C++和PHP代碼以及MySQL數據庫和一些開源組件。您可以在測試之前估算應用程序的性能嗎?

一位電信工程師要求我們估計應用程序的性能(尚未就緒)。他很喜歡'你知道每秒鐘有多少數據包可以通過Linux內核,再加上你可能知道你的應用程序有多快,所以告訴我每秒鐘會有多少電話通過你的東西'。

似乎廢話我,因爲有100萬的情況可能發生(當然,從字面上...)

但是...有沒有估計應用性能的方式(知道它可以運行在硬件,能夠在其上運行標準基準等),然後再進行實際測試?

回答

6

你當然可以限制上限(最大吞吐量)限制的問題。這沒什麼廢話。事實上,不知道這些東西是否意味着對問題採取相當隨意的方式 - 特別是在電話領域。

您可以自己解決問題 - 您必須爲事務完成的最小「工作」或您在應用中執行的任何單位任務?

一些消息來往,一些處理和數據庫命中例如?獲取有關各個部分的信息可以讓您瞭解最快的吞吐量。如果您加載系統,並看到顯著較低的性能,那麼你可能需要時間來找出你在哪裏可能失去吞吐量,低效率的算法,等等

編輯

做這個練習,你需要知道您的應用程序爲每個用例執行的所有步驟。然後您可以確定每個用例的最大吞吐量。在發佈和上線之前,你一定要知道這些東西。

我忽略了最壞的情況分析 - 正如你指出的那樣 - 比較困難。

2

如果你真的要回答這個問題,你可以說這樣的事情:

「我不知道把我的頭頂部,我會估計這個給你,但它需要一定的時間明顯。我的答案的準確性取決於我在計算我的估計時付出了多少努力(IE時間),我應該花多少時間來計算我的估計值?「

把負擔放在他們身上。如果他們真的想要一個準確的答案,他們將不得不讓你建立至少一些可以模擬實際環境的測試應用程序。

1

您可以通過秒殺來衡量效果。您的整個系統可能還沒有工作,但您知道這些部件是如何組裝在一起的。您可以在幾個小時內抽出一些東西,完成與最終應用相同類型的工作,跨越所有圖層,並用它來衡量設計的性能。

切記:原型很寬廣,尖峯很深。

0

在某些領域中的確如此,但除非您是該領域的專家,否則您根本沒有任何想法。例如,我編寫代碼來控制工業機器人。速度受機器人運動的限制,而不受代碼執行速度的限制。知道機器人有多快以及要走多遠,我們可以對「速度」做出相當好的估計。我不知道如何估計你的應用程序的時間。

1

你絕對可以做容量規劃先行,但估計的質量將取決於可用數據的質量。

最佳估計是在測試中構建系統,運行模擬工作負載,然後根據性能要求和工作負載預測容量。這些3形成預測空間 - 3的給定2,可以預測所述第三:

  1. 鑑於性能要求和容量(即硬件)就可以計算出可以處理的工作量。

  2. 鑑於性能要求和工作負載,您可以計算所需的容量(即硬件)。

  3. 鑑於工作量和容量,您可以預測您的預期性能。

1

你應該做估計。估計不會給你正確的答案。但它會讓你思考這個問題。現在聽起來像你的編碼,希望一切都會好起來。或者你處於恐慌模式,並覺得你沒有時間進行估計。

花一些時間考慮一下。分析重要的用例。想想你可能需要的記憶;考慮數據庫訪問;考慮網絡訪問(本地和遠程)。這些會影響系統的性能。讓整個團隊一起做到這一點。

在開發過程中定期測量這些重要用例的系統性能。如果必須的話,模擬組件/其他系統。分析結果。這些與你的估計相比如何?也許組件是內存/數據庫/網絡綁定。也許你需要更多的記憶;少數據庫訪問;更簡單的查詢;緩存。您不必立即做出這些更改。但是,您確實知道您的系統如何運作以及您需要做什麼。

結果:在系統測試時更少令人討厭的驚喜。發佈日期渺茫,恐慌情緒減少。

相關問題