亞馬遜是如何進(jìn)行軟件開發(fā)的?
發(fā)布時(shí)間:2022-12-15閱讀次數(shù):2368
亞馬遜是如何進(jìn)行軟件開發(fā)的呢?如果你確實(shí)對(duì)這個(gè)話題感興趣,不妨邀請(qǐng)三五好友,訂上幾個(gè)披薩,然后一起坐下來觀看這個(gè)對(duì)Ken Exner的精彩訪問,他是AWS開發(fā)者工具部的部門經(jīng)理。這里著重強(qiáng)調(diào)Ken來自工具部,是因?yàn)楫吘姑恳粋€(gè)行業(yè)的進(jìn)步都需要更好的開發(fā)工具。
本訪問強(qiáng)調(diào)了三個(gè)關(guān)鍵主題:細(xì)化團(tuán)隊(duì)、自動(dòng)化和以客戶為導(dǎo)向。
關(guān)鍵思路:
通過細(xì)胞分裂的方式來實(shí)現(xiàn)規(guī)模增長(zhǎng)。團(tuán)隊(duì)以單個(gè)服務(wù)為單位分解成更小的團(tuán)隊(duì)。EC2一開始也只不過是七八個(gè)人的小團(tuán)隊(duì)。
上述引文很好地體現(xiàn)了這三個(gè)主題,實(shí)際上,它也是AWS能夠笑傲公共云市場(chǎng)的關(guān)鍵因素。亞馬遜根據(jù)客戶需求,從開發(fā)底層不斷分拆出新的團(tuán)隊(duì),從而增長(zhǎng)了其自身規(guī)模。
如果你想要參考一個(gè)實(shí)例,不妨收聽一下重型網(wǎng)絡(luò)433:深入AWS中轉(zhuǎn)網(wǎng)關(guān)。這個(gè)講座詳細(xì)介紹了一個(gè)復(fù)雜的AWS功能(中轉(zhuǎn)網(wǎng)關(guān))是如何從客戶需求發(fā)展而來的。
隨著顧客需求的不斷增大,AWS也在不斷推出更多的產(chǎn)品,不知不覺AWS已經(jīng)走在了公共云行業(yè)的前列。
下面是整個(gè)采訪的一些總結(jié):
亞馬遜喜歡細(xì)化團(tuán)隊(duì)。過去亞馬遜內(nèi)部只有一個(gè)統(tǒng)一的組織和軟件架構(gòu)(perl/mason/c++),但隨著規(guī)模的擴(kuò)大這個(gè)模式很難再發(fā)揮作用,于是他們將這個(gè)架構(gòu)按照單獨(dú)服務(wù)的形式進(jìn)行了重構(gòu),整個(gè)組織也全部分拆成了小于十人的小團(tuán)隊(duì)。團(tuán)隊(duì)本身是完全獨(dú)立的,他們提供一個(gè)端到端的服務(wù),并且負(fù)責(zé)所有服務(wù)相關(guān)的工作:與客戶接觸、開發(fā)、測(cè)試以及后續(xù)的技術(shù)支持等。
亞馬遜鐘愛自動(dòng)化。亞馬遜開發(fā)部門幾乎自動(dòng)化了所有事情:構(gòu)建、發(fā)布以及部署。每一次提交的變更都自動(dòng)推送到生產(chǎn)環(huán)境,這一開始很令大家擔(dān)心,但其實(shí)無非就是把手工做的工作自動(dòng)化了而已,使其每次都以相同的方式執(zhí)行。為確保證生產(chǎn)環(huán)境正常進(jìn)行,我們?cè)谧詣?dòng)化過程中增加了很多不同的測(cè)試:集成測(cè)試、基于瀏覽器和網(wǎng)絡(luò)的測(cè)試以及負(fù)載測(cè)試等;我們也監(jiān)測(cè)了自動(dòng)化的整個(gè)過程。結(jié)果表明,通過自動(dòng)化我們可以更頻繁更及時(shí)地推出更新,從而可以做到更多的、質(zhì)量更好的發(fā)布。
亞馬遜實(shí)現(xiàn)了滾動(dòng)式部署。部署一直是一個(gè)很打擊人的事情,不論是預(yù)生產(chǎn)還是在生產(chǎn)部署,我們需要找出每一次失敗的原因。對(duì)此,亞馬遜內(nèi)部實(shí)現(xiàn)了滾動(dòng)式部署。首先將服務(wù)部署一個(gè)AZ中的一臺(tái)機(jī)器上,如果部署失敗,則回滾本次操作;部署成功,則部署到另一個(gè)AZ,進(jìn)而擴(kuò)展到更多的AZ,更多的地區(qū);一旦發(fā)現(xiàn)問題,則回滾到前一個(gè)可正常工作的版本。
亞馬遜推崇安全為先的開發(fā)模式。開發(fā)人員需要像安全工程師一樣思考,這是亞馬遜文化的一部分。工程師同時(shí)也必須是開發(fā)人員、操作人員、架構(gòu)師、測(cè)試人員和安全專家,為此亞馬遜為開發(fā)者提供了學(xué)習(xí)所有技能的機(jī)會(huì)。羅伯特·海萊應(yīng)該很喜歡這種模式,畢竟他主張人類應(yīng)該掌握盡可能多的技能。在亞馬遜DevOps也稱作DevSecsOps,因?yàn)榘踩呀?jīng)完全融入到了整個(gè)全棧開發(fā)流程。
開發(fā)人員需要為新項(xiàng)目架構(gòu)和安全模型負(fù)責(zé)。安全模型由安全工程師進(jìn)行審查。每個(gè)開發(fā)人員都需要負(fù)責(zé)自己代碼的安全隱患,因?yàn)樗麄冸x問題最近,所以也最有可能發(fā)現(xiàn)問題;正式開發(fā)中,代碼提交會(huì)被審查,同事在提交之前也需要靜態(tài)分析并給予反饋;構(gòu)建過程中,也存在自動(dòng)靜態(tài)分析;最終發(fā)布流程,會(huì)有更多的檢查,也會(huì)有金絲雀監(jiān)視器對(duì)部署進(jìn)行全方位測(cè)試。
檢查無處不在,整個(gè)生產(chǎn)環(huán)節(jié)處處都有檢查。亞馬遜為此制定了各種不同的政策。如果我們可以檢查一個(gè)流程,那么我們就可以確定它是否遵循了最佳實(shí)踐。而如果我們能夠描述這個(gè)最佳實(shí)踐,那大家就可以針對(duì)流程的方方面面制定規(guī)則。作為一個(gè)組織領(lǐng)導(dǎo)者,我們可以為團(tuán)隊(duì)制定規(guī)則,例如每個(gè)新提交必須達(dá)到70%的單元測(cè)試代碼覆蓋率才能部署。我們也有針對(duì)整個(gè)AWS部門的規(guī)則,例如不能同時(shí)部署到所有區(qū)域(特殊情況下可以,詳情見相關(guān)信息)。我們需要使用規(guī)則來阻止那些錯(cuò)誤的做法。規(guī)則在團(tuán)隊(duì)級(jí)別執(zhí)行、也可以在部門或公司級(jí)別。這種檢查能夠避免大家犯一些常見的錯(cuò)誤。亞馬遜通過多年的實(shí)踐經(jīng)驗(yàn)積累,已經(jīng)建立了一個(gè)非常有效的工作流程,避免了開發(fā)上的很多彎路,開發(fā)人員不必再走試錯(cuò)和汲取教訓(xùn)這一艱辛之路了。通過對(duì)這個(gè)最佳實(shí)踐的自動(dòng)化實(shí)現(xiàn),亞馬遜保證了每次都能最優(yōu)地完成全部工作流程。
團(tuán)隊(duì)中的開發(fā)人員對(duì)架構(gòu)負(fù)責(zé),而不再由架構(gòu)師來完成。一旦團(tuán)隊(duì)有了一個(gè)架構(gòu),就由架構(gòu)師或首席工程師對(duì)其評(píng)估。首席工程師的職責(zé)是審查和培訓(xùn),而不是設(shè)計(jì)架構(gòu)。安全方面也是如此,安全工程師的角色不是設(shè)計(jì)安全模型,而是審查開發(fā)人員創(chuàng)建的安全模型。測(cè)試也是如此。亞馬遜花費(fèi)了很多時(shí)間在內(nèi)部培訓(xùn)上,因?yàn)樗麄兿M_發(fā)人員能夠主導(dǎo)一切。
亞馬遜需要領(lǐng)導(dǎo)者時(shí)刻做好表率作用。我們知道在亞馬遜運(yùn)營(yíng)很重要,這是因?yàn)槲覀兛吹筋I(lǐng)導(dǎo)者的確很重視它。要想員工認(rèn)真對(duì)待某件事情,領(lǐng)導(dǎo)者就必須先認(rèn)真對(duì)待。例如,每個(gè)團(tuán)隊(duì)都必須在周會(huì)上展示他們當(dāng)前的工作安排,每一個(gè)細(xì)節(jié)都需要給出解釋。
最好的計(jì)劃方式來自底層開發(fā)。直接開發(fā)產(chǎn)品的團(tuán)隊(duì)也最接近客戶。他們知道客戶的需求,因此應(yīng)該由他們告訴亞馬遜該做什么。亞馬遜每年需要提交兩個(gè)文檔OP1和OP2(即Operating Plan運(yùn)營(yíng)計(jì)劃)。每個(gè)開發(fā)組都需要提交一份關(guān)于下一年計(jì)劃的6頁文檔。在計(jì)劃書中,團(tuán)隊(duì)需要列明所需要的常規(guī)資源和新增加資源,并注明資源用途。這6頁商業(yè)計(jì)劃書將會(huì)自下而上呈現(xiàn)給公司各級(jí)組織。經(jīng)理們會(huì)從所有團(tuán)隊(duì)計(jì)劃書中歸納出一份新的6頁文檔,并上報(bào)給他們的管理層。最終報(bào)告會(huì)一直上交到貝佐斯手中(CEO),在做出最終決策后,資源下發(fā)給各個(gè)團(tuán)隊(duì)。
管理層需要發(fā)揮監(jiān)督作用。盡管最接近客戶的團(tuán)隊(duì)往往能夠提供最好的創(chuàng)意,但這些創(chuàng)意需要管理層的仲裁和判斷。
每個(gè)團(tuán)隊(duì)都有目標(biāo)考核。公司會(huì)根據(jù)團(tuán)隊(duì)計(jì)劃分配相應(yīng)資源,整個(gè)過程會(huì)被跟蹤管理。每個(gè)團(tuán)隊(duì)都被認(rèn)為是一個(gè)創(chuàng)業(yè)公司,而管理層則是董事會(huì),他們通過審查和衡量目標(biāo)進(jìn)度來管理所有團(tuán)隊(duì)。
團(tuán)隊(duì)可以有專家。這些專家可以有不同的技能組合,像一個(gè)Web開發(fā)、SE(系統(tǒng)工程師)、PM(項(xiàng)目管理)、文檔編寫者甚至是營(yíng)銷人員。
每個(gè)團(tuán)隊(duì)都是獨(dú)立的,這也增加了溝通和達(dá)成共識(shí)的難度。由于很難及時(shí)溝通,亞馬遜通常會(huì)存在兩個(gè)甚至多個(gè)相同的產(chǎn)品計(jì)劃,但這總比沒有計(jì)劃要好,畢竟這仍在可控風(fēng)險(xiǎn)內(nèi),可以隨后加以修正,但最好不要拖延計(jì)劃執(zhí)行。團(tuán)隊(duì)一致性上則通過內(nèi)部重構(gòu)來解決,公司會(huì)創(chuàng)建另一個(gè)團(tuán)隊(duì)和服務(wù)來處理這些額外的責(zé)任。
你可以說服任何一個(gè)團(tuán)隊(duì)去協(xié)助你的計(jì)劃,前提是你能夠說服他們。在年度規(guī)劃過程中,公司性決策則是由上向下驅(qū)動(dòng)。例如,如果公司要進(jìn)入一個(gè)新的區(qū)域,每個(gè)團(tuán)隊(duì)必須為此做好計(jì)劃。
當(dāng)看到一個(gè)公司高層在解釋其公司的軟件開發(fā)流程時(shí),我總覺得很奇怪。作為一個(gè)從業(yè)多年的個(gè)人開發(fā)者,我發(fā)現(xiàn)管理層其實(shí)并不需要知道工作是如何實(shí)現(xiàn)的。讓我驚訝的是,根據(jù)下面reddit的討論思路,很多來自亞馬遜的員工也同意我這個(gè)觀點(diǎn)。
Mjr00:需要更正一下,我們可以在一天內(nèi)部署到所有地區(qū),但這只限于盡快修復(fù)一個(gè)關(guān)鍵bug的情況,另外這也需要副總裁的批準(zhǔn),因此這只發(fā)生在極少數(shù)情況下。然而,真正有趣的不是修復(fù)bug而是修復(fù)后的事:你需要挖掘所有日志和數(shù)據(jù)來解釋發(fā)生了什么、為什么發(fā)生、為什么沒有被更早地檢測(cè)到,以及如何確保以后不再發(fā)生等。然后你要準(zhǔn)備一份報(bào)告,又被稱為"錯(cuò)誤更正"(COE),如果夠幸運(yùn),這份文件只會(huì)被你的主管審查和批準(zhǔn);但如果運(yùn)氣不好,你很有可能要在工程組會(huì)上把這份報(bào)告展示給Charlie Bell和Andy Jassy,他們可是會(huì)把它撕成碎片的,更糟糕的是這一切會(huì)被所有參會(huì)人看到,甚至在網(wǎng)上直播。
靈集科技打造本地生活類小程序
十種軟件開發(fā)模型整理
軟件開發(fā)公司的UI/UX設(shè)計(jì)師是什么?有啥區(qū)別?
云醫(yī)互聯(lián)SASS解決方案
九大類企業(yè)管理軟件助力企業(yè)數(shù)字化轉(zhuǎn)型
智慧醫(yī)療:創(chuàng)新驅(qū)動(dòng),引領(lǐng)醫(yī)療健康未來
企業(yè)為什么要做定制化的軟件,找哪家公司好?
內(nèi)蒙古網(wǎng)站建設(shè),打開大眾對(duì)您的“第一印象”
開發(fā)企業(yè)官網(wǎng)有什么作用??jī)?nèi)蒙古網(wǎng)站建設(shè)總結(jié)了兩點(diǎn)
全面分析小程序商城