當(dāng)前位置:首頁(yè) > 芯聞號(hào) > 充電吧
[導(dǎo)讀]Joe Moreno在1998年至2007年期間就職于蘋果公司,是蘋果在線商店的一名開發(fā)人員。通過(guò)此文,也可對(duì)蘋果公司的一些產(chǎn)品開發(fā)細(xì)節(jié)有所了解。以下是全文。   當(dāng)我還在蘋果在線商店工作的時(shí)候,我們從來(lái)沒(méi)有對(duì)在線網(wǎng)站

Joe Moreno在1998年至2007年期間就職于蘋果公司,是蘋果在線商店的一名開發(fā)人員。通過(guò)此文,也可對(duì)蘋果公司的一些產(chǎn)品開發(fā)細(xì)節(jié)有所了解。以下是全文。
  當(dāng)我還在蘋果在線商店工作的時(shí)候,我們從來(lái)沒(méi)有對(duì)在線網(wǎng)站做過(guò)負(fù)載測(cè)試。我們也不覺(jué)得需要這么做。然而,當(dāng)每次史蒂夫·喬布斯在演示某個(gè)幻燈片過(guò)程中切換到在線商店時(shí),會(huì)走下臺(tái)來(lái)等待,這是非常有趣的經(jīng)歷。作為事后檢查的一部分,每次在線商店重新上線時(shí),我們都會(huì)問(wèn)自己服務(wù)器的瓶頸在哪里:是CPU、網(wǎng)絡(luò)帶寬、磁盤I/O還是內(nèi)存?雖然準(zhǔn)確預(yù)測(cè)整個(gè)系統(tǒng)在實(shí)際環(huán)境中的行為非常困難,幸運(yùn)的是我們有一整套的測(cè)試策略來(lái)確保在重新啟動(dòng)之前有足夠的測(cè)試。 
 

作者:Joe Moreno

負(fù)載測(cè)試 / Load Testing
  許多公司用負(fù)載測(cè)試來(lái)試驗(yàn)他們的web應(yīng)用程序能夠支持怎樣的負(fù)載。一個(gè)最平常用到的,但是錯(cuò)誤的方式是把web站點(diǎn)上線然后啟動(dòng)負(fù)載測(cè)試。這種方式的問(wèn)題在于,它不會(huì)告訴你web站點(diǎn)從在線狀態(tài)到不能提供服務(wù)這個(gè)過(guò)程中是如何運(yùn)行的。當(dāng)一個(gè)web站點(diǎn)在使用狀態(tài)時(shí)宕機(jī)然后重新啟動(dòng),這時(shí)web站點(diǎn)表現(xiàn)出的行為,一定與負(fù)載測(cè)試狀態(tài)下有很大的區(qū)別。例如,我們發(fā)現(xiàn)在iTunes商店(iTunesStore)第一次啟動(dòng)時(shí),一個(gè)被信任的WebObjects組件不是線程安全的,而這個(gè)問(wèn)題只有在該對(duì)象處于重負(fù)荷情況下才會(huì)出現(xiàn)。
初生牛犢 / Cutting My Teeth
  當(dāng)我第一次加入蘋果在線商店開發(fā)小組時(shí),我和一位經(jīng)驗(yàn)豐富的軟件工程師搭檔,他教會(huì)我如何快速地熟悉代碼庫(kù),構(gòu)建流程以及單元測(cè)試和組件測(cè)試。由于在線商店已經(jīng)上線了,我們只有在對(duì)新代碼進(jìn)行測(cè)試以及搜集數(shù)據(jù)之后才能發(fā)布。
  我的第一項(xiàng)任務(wù)是和搭檔一起實(shí)現(xiàn)一個(gè)在網(wǎng)絡(luò)上用特性表形式搜集產(chǎn)品信息的簡(jiǎn)單web服務(wù)。一般這樣的簡(jiǎn)單web服務(wù)程序只需要一到兩天,而我們倆在師傅的一步步指導(dǎo)下花了一整個(gè)禮拜,通過(guò)結(jié)對(duì)編程方式完成了整個(gè)流程。(雖然我們采用結(jié)對(duì)編程,但是我們使用的是Agile/Scrum,而不是極限編程。每個(gè)開發(fā)小組可以在保證進(jìn)度的前提下使用任何他們達(dá)成共識(shí)的開發(fā)技術(shù)。我服務(wù)的團(tuán)隊(duì)碰巧有幾個(gè)經(jīng)過(guò)訓(xùn)練的scrum大師,他們得到了管理團(tuán)隊(duì)的支持。)
  在實(shí)際開始編寫產(chǎn)品代碼之前,我們需要編寫單元測(cè)試。所有的軟件工程師都被要求先為他們的API編寫單元測(cè)試,這個(gè)一個(gè)很值得學(xué)習(xí)的規(guī)范。(編注:測(cè)試在敏捷當(dāng)中非常重要,參考這篇《敏捷方法中測(cè)試人員的價(jià)值》。)接下來(lái),我們?cè)贓clipse/WOLips上使用WebObjects/Java編寫代碼,與此同時(shí)我們?yōu)閼?yīng)用程序設(shè)下關(guān)鍵的斷點(diǎn),然后在調(diào)試模式下運(yùn)行,這樣我們就可以單步調(diào)試代碼。我見到了有太多在別處工作的軟件工程師,他們不斷地編碼然,就像他們?cè)诓粩嗟赝鶋ι先訓(xùn)|西,然后看看到底會(huì)有什么會(huì)粘在墻上(像碰運(yùn)氣一樣)。
  在我們檢入我們代碼的同時(shí),軟件倉(cāng)庫(kù)會(huì)自動(dòng)構(gòu)建所有的應(yīng)用程序,然后對(duì)它們運(yùn)行單元測(cè)試。如果你的代碼讓這次構(gòu)建失敗,開發(fā)小組的每個(gè)人,包括一到兩位項(xiàng)目經(jīng)理會(huì)受到郵件通知——你就是構(gòu)建失敗的罪魁禍?zhǔn)住?
令牌 / Token
  我們有一段非常特殊的軟件代碼,一次只能由一個(gè)軟件工程師檢出(check out)、編寫(work on)、然后檢入(checkin)。你只有在得到一個(gè)物理令牌時(shí)才能夠接觸到這段代碼。在我們這里,這個(gè)令牌就是一個(gè)DarthTater玩偶,它放在你的工作的格子間或者書架上最顯眼的地方。
搜集度量數(shù)據(jù)/ Gathering Metrics
  一旦我們的服務(wù)編碼完成,沒(méi)有錯(cuò)誤,并且被檢入到代碼倉(cāng)庫(kù)后,我們開始組件測(cè)試并搜集新代碼的度量數(shù)據(jù)。這是另外一個(gè)在新手團(tuán)隊(duì)里被忽略的步驟。我懷疑“搜集度量數(shù)據(jù)”這個(gè)步驟甚至都沒(méi)有被包含在Joel測(cè)試中,因?yàn)镴oelSpolsky的產(chǎn)品是一個(gè)桌面應(yīng)用程序而不是一個(gè)需要重負(fù)載測(cè)試的web程序(或者,也許這個(gè)被隱含在“你有測(cè)試工程師嗎?”這個(gè)步驟里)
  甚至在我們考慮將代碼放到實(shí)時(shí)代碼分支之前,我們就已經(jīng)對(duì)代碼進(jìn)行了數(shù)百萬(wàn)次的請(qǐng)求測(cè)試。在蘋果公司,我們有一個(gè)非常復(fù)雜的緩存算法,根據(jù)我們?cè)O(shè)定的目標(biāo),它可以保存我們需要的任意數(shù)目的記錄。我們是否需要五百個(gè)或是五萬(wàn)個(gè)產(chǎn)品的請(qǐng)求記錄緩存呢?在一次冷啟動(dòng)開始之后,我們是否需要對(duì)指定的產(chǎn)品用緩存來(lái)“熱身”呢?在沒(méi)有任何的請(qǐng)求命中時(shí),我們需要等多久才把一個(gè)產(chǎn)品從緩存中移除并釋放內(nèi)存呢?
  附注一點(diǎn),我們的緩存通常是一個(gè)哈希表。哈希表的優(yōu)點(diǎn)在于它的大O表示法運(yùn)行時(shí)間是常量O(1)。當(dāng)你在一個(gè)面試中被問(wèn)道“什么事最快的查找函數(shù)”時(shí),千萬(wàn)不要說(shuō)“一個(gè)B樹二叉樹”。完美的哈希表通常會(huì)輕松勝出。
調(diào)整并完成 / Tweaking and Done
  我們會(huì)不斷調(diào)整代碼直到我們得到可接受的度量數(shù)據(jù)。我們的測(cè)量數(shù)據(jù)會(huì)對(duì)緩存內(nèi)存消耗多少以及滿足每個(gè)服務(wù)請(qǐng)求/響應(yīng)的時(shí)間長(zhǎng)短進(jìn)行度量。根據(jù)我們的需求,我們會(huì)努力達(dá)到99.7%的服務(wù)請(qǐng)求在35毫秒之內(nèi)返回,95%的請(qǐng)求在10毫秒之內(nèi)返回,沒(méi)有單個(gè)請(qǐng)求超過(guò)50毫秒的響應(yīng)時(shí)間。
  這些測(cè)試在一個(gè)非常接近產(chǎn)品環(huán)境的實(shí)時(shí)數(shù)據(jù)庫(kù)的拷貝中運(yùn)行。這不能完美地指出web應(yīng)用程序一旦在實(shí)際環(huán)境中會(huì)如何執(zhí)行。但是將它變成一個(gè)設(shè)定期望的很好的辦法,這不會(huì)需要很久時(shí)間。
  在我們“疾跑”(Sprint)結(jié)束的時(shí)候,所有這些度量數(shù)據(jù)都會(huì)作為敏捷定義“完成”時(shí)演示的一部分。這時(shí)代碼已經(jīng)準(zhǔn)備就緒可以被檢入質(zhì)量保證的代碼分支,在代碼發(fā)布上線之前還會(huì)進(jìn)行功能測(cè)試。
編注:
  1. 大O表示法:用來(lái)描述算法的時(shí)間復(fù)雜度,O(1)的時(shí)間復(fù)雜度最低
  2. 疾跑(Sprint):是scrum開發(fā)方法的一個(gè)最基本開發(fā)單元

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉