你真的知道如何定義性能要求么?

【編者按】本文作者是 Nikita Salnikov Tarnovski易稠,是 plumbr 的聯(lián)合創(chuàng)始人缸废,作為一名高級開發(fā)者,他同時也是一位應(yīng)用性能調(diào)優(yōu)的專家缩多,擁有多年的性能調(diào)優(yōu)經(jīng)驗呆奕。本文中他通過常見的性能需求誤區(qū)經(jīng)驗养晋,分享應(yīng)該如何去設(shè)定實際的性能需求目標(biāo),本文系 OneAPM 工程師編譯呈現(xiàn)梁钾。

以下為譯文:

「這個應(yīng)用跑得太慢绳泉,你能讓它快起來嗎?」

——企業(yè)老板這樣說道

如果你是個經(jīng)驗豐富的工程師姆泻,對這種場景肯定不陌生零酪,一聽到這種話,整個脊椎不寒而栗拇勃。筆者一直強(qiáng)調(diào)用「測量不猜測」的觀點處理性能優(yōu)化問題四苇。這意味著你要先明確經(jīng)理所指的「快」是什么。如果沒有這個定義方咆,你可能永遠(yuǎn)都會困在優(yōu)化周期中月腋,因為每個重大應(yīng)用總能在某些方面得到改進(jìn),從而提高速度瓣赂。

現(xiàn)實生活中榆骚,性能并非是亟待解決的唯一任務(wù);為了提供最有價值的產(chǎn)品煌集,我們應(yīng)該知道什么時候應(yīng)該停止性能優(yōu)化妓肢。更重要的是,我們應(yīng)該清楚地知道我們的性能目標(biāo)是什么苫纤,并有一個明確的規(guī)劃去實現(xiàn)之碉钠。

錯誤定義的性能需求

相對之前,企業(yè)老板在表達(dá)軟件功能需求上已經(jīng)有所進(jìn)步卷拘。但在功能性需求之外——比如應(yīng)用的可用性喊废、兼容性或性能——老板心里其實完全沒底。這個空白常常用「確保它夠快」這種模棱兩可的話恭金,或者與下面類似的要求表達(dá)出來:

  • 系統(tǒng)內(nèi)95%的業(yè)務(wù)操作必須在 5 秒內(nèi)得到響應(yīng)

  • 系統(tǒng)必須支持 100 個并發(fā)用戶

乍一看這些要求操禀,你可能會覺得沒那么糟。不再一直念叨著「快快快」横腿,你現(xiàn)在至少有了一個明確的目標(biāo)颓屑,對吧?事實證明耿焊,上面的目標(biāo)甚至比「快快快」的念叨更加糟糕揪惦。雖然它包含了一些可以設(shè)為終極目標(biāo)的具體數(shù)據(jù);但實際情況下罗侯,上述兩點要求最多只能作為提出更好優(yōu)化問題的基礎(chǔ)器腋。下面解釋這些要求的錯誤之處。

95%的業(yè)務(wù)操作必須在5秒內(nèi)得到響應(yīng)

剩下的五個百分點要怎么辦?如果將響應(yīng)時間設(shè)為10秒纫塌,這個目標(biāo)是否切合實際呢诊县?連接超時也可以嗎?其實措左,你應(yīng)該避免將時間設(shè)定為唯一目標(biāo)依痊,而是設(shè)置一個可接受的延遲分布范圍。這個要求的另一個問題是怎披,它將所有的操作等同化胸嘁。如果有95%的操作在4.9秒內(nèi)反應(yīng),就萬事大吉了么凉逛?即便這些操作的速度還可以更快性宏?以下面這些操作為例:

  1. 顯示我當(dāng)前的賬戶余額:這個操作每天被執(zhí)行數(shù)百萬次,也是每個零售客戶與銀行互動的第一個問題状飞。
  2. 顯示2015年的所有交易:每天僅有少數(shù)用戶執(zhí)行該操作毫胜。

顯然,你需要區(qū)別對待不同的操作昔瞧,對第一個操作有更高要求指蚁,而第二次操作可以有更寬松的要求。因此自晰,你應(yīng)該為每個操作類型設(shè)置可接受的延遲時間分布,而不是對所有操作一視同仁稍坯。

你還應(yīng)該將延遲需求與加載/吞吐量需求聯(lián)系起來酬荞。因此在進(jìn)行性能測量時,應(yīng)該找出系統(tǒng)中的負(fù)載瞧哟,并發(fā)掘有多少其他操作可以同時執(zhí)行混巧。然后用這些信息來構(gòu)建延遲需求。

精確延遲測量的層勤揩。是在終端用戶的環(huán)境中進(jìn)行響應(yīng)時間測量呢 (比如咧党,瀏覽器呈現(xiàn)響應(yīng)時或一個安卓應(yīng)用更新結(jié)果時)?還是當(dāng)最后一個字節(jié)從服務(wù)器端發(fā)送后進(jìn)行測量呢陨亡?

大多數(shù)軟件總是可以優(yōu)化得更快傍衡,問題是它在經(jīng)濟(jì)上是否可行。

最后负蠕,你應(yīng)該確定哪些操作完全不用擔(dān)心延遲蛙埂。批處理作業(yè)和異步流程就是很好的例子。每月運行的批處理任務(wù)需要兩個小時來計算最終的信用卡余額遮糖,不應(yīng)該視為違反了5秒閾值绣的。完整的會計 CSV 報表通過電子郵件發(fā)送得等到10分鐘后,屬于異步編譯,也不應(yīng)該視作違反標(biāo)準(zhǔn)屡江。

系統(tǒng)必須支持100個并發(fā)用戶

設(shè)想一個網(wǎng)站有100個用戶在線芭概,每次點擊靜態(tài)圖像都通過 CDN 進(jìn)行呈現(xiàn)需要10秒時間——我打賭你閉著眼睛就能構(gòu)建出這樣一個系統(tǒng)。但是惩嘉,100個用戶同時在網(wǎng)站上編碼 4K 視頻文件則要另當(dāng)別論了谈山。

當(dāng)考慮真實并發(fā)性時,事情從模糊不清變得毫無意義宏怔,比如將「100個并發(fā)用戶」翻譯成「100次由100個線程并發(fā)處理的操作」奏路。假設(shè)每一個這樣的操作需要10秒的處理時間,那么系統(tǒng)的吞吐量就是每秒10次操作臊诊。如果現(xiàn)在將操作時間減少十倍鸽粉,每個操作只需1秒鐘,你就已經(jīng)將吞吐量提高到100次操作/秒抓艳。然而触机,你并未實現(xiàn) 「100個真實并發(fā)用戶」的要求,只是并發(fā)處理10個操作玷或,這意味著你未能滿足性能要求儡首。

其實,在表達(dá)用戶的具體行為時偏友,應(yīng)該避免「并發(fā)用戶」或任何類似的術(shù)語蔬胯,要求應(yīng)該更加明確,盡量將這些描述轉(zhuǎn)化為可以模擬所需負(fù)載的負(fù)載測試位他。

需要注意氛濒,筆者并非建議你測量吞吐量。這其實沒多大用鹅髓,因為現(xiàn)實生活中的應(yīng)用通常是多功能的舞竿、應(yīng)用于動態(tài)的狀況。所以很難明確表達(dá)出吞吐量的性能目標(biāo)(每小時的操作量)窿冯。但是骗奖,如果一個應(yīng)用被特定設(shè)計為只實現(xiàn)一個功能,例如發(fā)票支付醒串,那么执桌,設(shè)置類似于「1000個發(fā)票/分鐘」的吞吐量目標(biāo),是非常好的可測量的具體目標(biāo)厦凤。

容量規(guī)劃

容量規(guī)劃是你應(yīng)該精確指定的另一重要性能需求鼻吮。你的團(tuán)隊是有望實現(xiàn)上文提到的目標(biāo)——數(shù)據(jù)庫中容納一萬個帳戶和一千萬個事務(wù)?或者期望系統(tǒng)滿足一百萬個賬戶和十億交易這些條件较鼓?請明確系統(tǒng)中儲存的數(shù)據(jù)量椎木。

別忘了明確有關(guān)基礎(chǔ)設(shè)施的經(jīng)濟(jì)約束违柏。你是否準(zhǔn)備使用價值 500美元/月的 AWS 實現(xiàn)你的性能要求?或者你能財大氣粗地在32核和幾 TBs 容量的高端配置上部署解決方案香椎?知道這些問題的答案可以幫助你了解基礎(chǔ)設(shè)施能承受的性能目標(biāo)漱竖。所以在確定性能需求之前,你應(yīng)該明確基礎(chǔ)設(shè)施的限制畜伐。

在制定性能需求時馍惹,還應(yīng)該考慮客戶的網(wǎng)絡(luò)帶寬限制。網(wǎng)絡(luò)帶寬是否能接受對操作發(fā)送幾個 MBs 來回的要求玛界?移動應(yīng)用固然使用廣泛万矾,但你不能指望每個客戶都使用全能的 4G 網(wǎng)絡(luò),所以應(yīng)該構(gòu)建一組離線操作慎框,可以在本地進(jìn)行處理良狈,從而將流量從兆字節(jié)轉(zhuǎn)換為千字節(jié)。

結(jié)論

本文所描述的各個方面還不夠完整笨枯。在可伸縮性和可用性方面薪丁,還有許多性能方面的考慮,可以引導(dǎo)你進(jìn)一步完善需求馅精。即便如此严嗜,你應(yīng)該更仔細(xì)地審視模糊的性能需求,列舉出能落實到現(xiàn)實需要的問題洲敢。和企業(yè)老板合作制定可測量的具體目標(biāo)漫玄。否則,你就沒有真正的目標(biāo)去實現(xiàn)并衡量結(jié)果沦疾。

通過這個過程称近,也可以了解相關(guān)的成本。企業(yè)老板總是渴望更詳細(xì)地了解成本哮塞!如果你還記得,大多數(shù)軟件總是可以優(yōu)化得更快凳谦,問題是它在經(jīng)濟(jì)上是否可行忆畅。從企業(yè)所有者的角度來看,他們自然想讓所有操作都盡可能快尸执。但只有當(dāng)我們了解了實現(xiàn)目標(biāo)的成本限制家凯,才能設(shè)置更為現(xiàn)實的期望。

OneAPM 是應(yīng)用性能管理領(lǐng)域的新興領(lǐng)軍企業(yè)如失,能幫助企業(yè)用戶和開發(fā)者輕松實現(xiàn):緩慢的程序代碼和 SQL 語句的實時抓取绊诲。想閱讀更多技術(shù)文章,請訪問 OneAPM 官方博客褪贵。
本文轉(zhuǎn)自 OneAPM 官方博客

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掂之,一起剝皮案震驚了整個濱河市抗俄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌世舰,老刑警劉巖动雹,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跟压,居然都是意外死亡胰蝠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門震蒋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茸塞,“玉大人,你說我怎么就攤上這事查剖〖嘏埃” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵梗搅,是天一觀的道長禾唁。 經(jīng)常有香客問我,道長无切,這世上最難降的妖魔是什么荡短? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮哆键,結(jié)果婚禮上掘托,老公的妹妹穿的比我還像新娘。我一直安慰自己籍嘹,他們只是感情好闪盔,可當(dāng)我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辱士,像睡著了一般泪掀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颂碘,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天异赫,我揣著相機(jī)與錄音,去河邊找鬼头岔。 笑死塔拳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的峡竣。 我是一名探鬼主播靠抑,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼适掰!你這毒婦竟也來了颂碧?” 一聲冷哼從身側(cè)響起荠列,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稚伍,沒想到半個月后弯予,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡个曙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年锈嫩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垦搬。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡呼寸,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出猴贰,到底是詐尸還是另有隱情对雪,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布米绕,位于F島的核電站瑟捣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏栅干。R本人自食惡果不足惜迈套,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碱鳞。 院中可真熱鬧桑李,春花似錦、人聲如沸窿给。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崩泡。三九已至禁荒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間角撞,已是汗流浹背圈浇。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留靴寂,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓召耘,卻偏偏與公主長得像百炬,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子污它,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,331評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理剖踊,服務(wù)發(fā)現(xiàn)庶弃,斷路器,智...
    卡卡羅2017閱讀 134,716評論 18 139
  • 性能既是客觀指標(biāo)德澈,諸如響應(yīng)時間歇攻、吞吐量等技術(shù)指標(biāo);又是實際參與者的主觀感受梆造。 1 性能測試 性能測試是性能優(yōu)化的前...
    deniro閱讀 1,362評論 2 15
  • 小米在手機(jī)界的地位,不言而喻忽肛。小米這種大公司村砂,待遇可想而知,很多人擠破頭顱都想進(jìn)去屹逛。早前础废,雷軍就在個人的微博上發(fā)布...
    編程獅W3Cschool閱讀 4,263評論 0 1
  • 最近一直被手機(jī)所困擾。當(dāng)然我是指智能手機(jī)罕模,可以做在電腦上所做的一切评腺。在智能手機(jī)時代,每天看手機(jī)的時間比看書的時間長...
    worldlyf閱讀 279評論 0 0