ECI@創(chuàng)新科技 |微服務(wù)的回顧——從Netflix身上我們到底學(xué)到/沒學(xué)到了什么(中)
ECI @HiTech開欄語
【ECI @科技創(chuàng)新】是由ECI@HiTech科技創(chuàng)新專委會(huì)每周從全球精選熱門科技創(chuàng)新主題,幫助科技創(chuàng)新者和初創(chuàng)團(tuán)隊(duì)取得成功!讓我們共同攜手,尋找改變現(xiàn)有游戲規(guī)則的科技創(chuàng)新,激發(fā)人類的智慧和挑戰(zhàn),實(shí)現(xiàn)科技的創(chuàng)新和夢想。這就是科技創(chuàng)新的終極魅力!也是ECI”將創(chuàng)新帶入生活Bring Innovation to Life” 的使命所在!
通常來說,科技的發(fā)展都會(huì)交替經(jīng)歷平臺(tái)期和爆發(fā)期。平臺(tái)期的科技創(chuàng)新更多聚焦于識(shí)別并解決客戶現(xiàn)在的痛點(diǎn),而爆發(fā)期的科技創(chuàng)新更多聚焦于引領(lǐng)并創(chuàng)造客戶未來的需求,劃時(shí)代的偉大科技創(chuàng)新往往誕生于此。
在AWS上用GlobalApache Cassandra替換數(shù)據(jù)中心Oracle
再次發(fā)表演講是在Cassandra峰會(huì)上,主題為“在AWS上用Cassandra取代Oracle數(shù)據(jù)中心”。我們沒有原地等待,沒有被錯(cuò)誤的配置困住,沒有提交問題單,沒有等待許可。我們沒有遇到空間和電力耗盡的情況,也沒有做容量規(guī)劃。我們沒有和IT人員開會(huì),以及其他人們通常會(huì)等待的事情。所有這些都沒有發(fā)生,因?yàn)橐磺卸加葾PI驅(qū)動(dòng),開發(fā)人員可以自我服務(wù)。
我們的問題在于數(shù)據(jù)中心。對(duì)于我們所從事的工作,我們無法以足夠快的速度建造新的數(shù)據(jù)中心。我們需要從Netflix的郵寄DVD模型過渡到流媒體模型,這是一個(gè)指數(shù)級(jí)增長的過程。以下就是其形象的展示,這個(gè)美好的指數(shù)增長大約在一年內(nèi)實(shí)現(xiàn)。
在2010年年初,我們?cè)硎拘枰谀甑字半x開數(shù)據(jù)中心。我們不會(huì)建造新的數(shù)據(jù)中心,因此我們必須行動(dòng)起來。因?yàn)槲覀冾A(yù)測到,如果我們不遷移到云端的話,Netflix將在年底面臨大規(guī)模中斷的風(fēng)險(xiǎn)。這是API調(diào)用率,達(dá)到了37倍的增長。這意味著當(dāng)客戶不再是郵寄DVD,而是每周一兩次調(diào)用API時(shí),他們將不斷地進(jìn)行流媒體播放。由此,流媒體播放的客戶比例迅速增加。
我們通過使用可用區(qū)域在Cassandra中實(shí)現(xiàn)了高效且可靠的數(shù)據(jù)庫系統(tǒng),這些可用區(qū)域?qū)嶋H上相距10公里到100公里。數(shù)據(jù)有三個(gè)副本,它們被充分分隔,以保障數(shù)據(jù)的安全性和可用性。這一切運(yùn)行得非常順暢。
我們還使用相同的模型,探索了整個(gè)世界。這個(gè)模型告訴我們,我們不再受限于單一的數(shù)據(jù)中心,而是可以通過最終一致的Cassandra系統(tǒng),在世界任何角落無障礙地訪問數(shù)據(jù)。這意味著,我們可以隨時(shí)隨地獲取所需的信息。在這張澳大利亞的世界地圖上,我們將夏威夷和澳大利亞置于中心位置,因?yàn)檎嬲匾氖橇私庾约壕嚯x夏威夷有多遠(yuǎn),以便計(jì)劃前往那里度假。
我們做的另一件軟件是“Chaos Monkey”。這是為了確保系統(tǒng)的彈性和穩(wěn)定性。我們真正要做的是設(shè)計(jì)控制,因?yàn)槲覀円獙?duì)所有東西進(jìn)行自動(dòng)縮放,希望能夠更積極地縮小規(guī)模。您可以通過添加實(shí)例來擴(kuò)大規(guī)模,但如果您在發(fā)布新服務(wù)時(shí)要非常小心,否則容易失敗。我們不希望這樣,因此我們希望能夠超級(jí)積極地縮小規(guī)模。我們也希望能夠推出新版本的東西,將流量切換到它上面并關(guān)閉舊版本,而系統(tǒng)只需要重試并繼續(xù)運(yùn)行而不會(huì)注意到。您的客戶也不會(huì)注意到也許一個(gè)單獨(dú)的請(qǐng)求會(huì)慢半秒鐘,但這也會(huì)是大問題。如果您真的想自動(dòng)縮放,您應(yīng)該運(yùn)行“Chaos Monkey”,因?yàn)檫@可以證明您的系統(tǒng)是否能夠應(yīng)對(duì)各種情況。
云原生應(yīng)用程序:哪些方面發(fā)生了改變?
大約18個(gè)月后,也就是2013年初,當(dāng)時(shí)我們已經(jīng)啟動(dòng)了我們的開源計(jì)劃。也就是從這個(gè)時(shí)候開始,我開始使用“云原生”和“微服務(wù)”這兩個(gè)詞。云原生應(yīng)用程序,有什么變化嗎?2006年,EC2發(fā)布。人們用它把舊代碼移植到云上,因?yàn)檫@比找IT人員申請(qǐng)實(shí)例要快。我們開發(fā)的是這些新的反脆弱模式、微服務(wù)、混沌引擎和由短暫組件組成的具有高度可用性的系統(tǒng)。然后我們使用開源平臺(tái),所以這些技術(shù)迅速傳播開來。這是一套全新的開發(fā)模式和工具。企業(yè)對(duì)此感到困惑。初創(chuàng)公司和規(guī)模化的云原生公司,如Uber、Lyft、Airbnb和Netflix等公司都在這樣做。Capital One可能是第一家真正投入資源和嘗試解決這一問題的企業(yè)。Nike也開始嘗試解決這個(gè)問題。但企業(yè)在采用這些技術(shù)方面相當(dāng)緩慢。
通常來說,當(dāng)人們利用云服務(wù)時(shí),他們只是簡單地將應(yīng)用程序服務(wù)器遷移到云端,并將數(shù)據(jù)中心安置在其他地方。這是我們應(yīng)該采用云服務(wù)的方式,因?yàn)槲覀儗?duì)將數(shù)據(jù)存儲(chǔ)在云端持懷疑態(tài)度。
我們使用Cassandra的方法是將所有內(nèi)容分散到三個(gè)區(qū)域。即使我們失去了一個(gè)可用區(qū)域,一切仍然可以正常運(yùn)行。我們對(duì)此進(jìn)行了測試,并證實(shí)它能夠持續(xù)工作。這是一種云原生架構(gòu),其運(yùn)行系統(tǒng)的模式在傳統(tǒng)的數(shù)據(jù)中心中是無法見到的。數(shù)據(jù)的Master副本存儲(chǔ)在云端,它們是動(dòng)態(tài)配置的,且短暫存在。對(duì)我們而言,云原生意味著應(yīng)用程序是為了在云環(huán)境中運(yùn)行并針對(duì)這種環(huán)境進(jìn)行優(yōu)化而構(gòu)建的。我們認(rèn)為CNCF采用了這個(gè)術(shù)語,因此現(xiàn)在的云原生代表的是我們的云原生計(jì)算基金會(huì)。這意味著我們現(xiàn)在使用的是Kubernetes或其他類似的工具,這更多地涉及到操作層面。所以這不是構(gòu)建應(yīng)用程序的方式,而更多的是關(guān)于如何操作應(yīng)用程序。
當(dāng)談到可用性時(shí),一個(gè)關(guān)鍵因素并不是機(jī)器是否能夠保持運(yùn)行,而是當(dāng)需要一臺(tái)機(jī)器時(shí),是否能夠在幾分鐘后在云端使用它。相比之下,在數(shù)據(jù)中心,您可能需要等待數(shù)月才能獲得所需的機(jī)器。可用性的首要目標(biāo)是能夠快速獲得機(jī)器,并且能夠?qū)⑵溥\(yùn)行在各種不同的環(huán)境中,使其具有可用性。我們認(rèn)為AWS即將在新西蘭、以色列以及世界各地的許多不同地方發(fā)布。這是提高可用性的另一個(gè)重要因素。
機(jī)器在許多不同的地方都可用。這些地方的距離足夠遠(yuǎn),如果其中一個(gè)地方出現(xiàn)問題,我們可以使用另一個(gè)地方。這是一個(gè)有趣的點(diǎn)。從開發(fā)的角度來看,我們采用了這些漂亮的反脆弱開發(fā)模式和Hystrix電路斷路器,這是一個(gè)非常有影響力的成功項(xiàng)目。基本上,您調(diào)用前端,前端在這里構(gòu)建一個(gè)良好的隔離層,該隔離層具有后端服務(wù)并具有大量可觀察性,您可以查看正在發(fā)生的情況然后您可以監(jiān)控它。您可以查看實(shí)際發(fā)生的情況-此后端服務(wù)已停止運(yùn)行,我們已經(jīng)停止嘗試調(diào)用它-您應(yīng)該對(duì)此采取一些措施。同時(shí),我們得到了回退機(jī)制,它只是返回一些靜態(tài)內(nèi)容或響應(yīng)的一部分、網(wǎng)站的一部分、網(wǎng)頁的一部分,不會(huì)立即出現(xiàn),因?yàn)楹蠖藳]有正常工作。也許歷史服務(wù)已經(jīng)停機(jī),所以您的租賃歷史暫時(shí)不會(huì)出現(xiàn)。
我們?cè)緲?gòu)想了一部絕佳的動(dòng)畫,描繪了一個(gè)充滿神奇的未來世界,這個(gè)世界失去了視頻,無法填補(bǔ)人們空虛的時(shí)光,成為了破碎流媒體之云下的犧牲品。Netflix的一個(gè)特性在于,它并非生活所必需。如果將它視為一名數(shù)字保姆,人們期望他們的電視機(jī)能夠正常運(yùn)作。電視機(jī)理應(yīng)能夠正常運(yùn)行。它們不應(yīng)該僅在世界的另一端恰好發(fā)生或正在發(fā)生某個(gè)隨機(jī)事件時(shí)才能工作。我們希望讓它感覺像電視機(jī)一樣,只需打開即可使用。您只需觀看電視節(jié)目,無需考慮它正在重新緩沖,也無需關(guān)心世界另一端正在發(fā)生什么事情。您只需盡情享受這一切。
我們稍微探討了一下配置管理。數(shù)據(jù)中心配置管理數(shù)據(jù)庫的狀況實(shí)在令人擔(dān)憂。它們就像是一個(gè)永遠(yuǎn)無法保持一致的數(shù)據(jù)庫的典型案例。可以肯定的是,數(shù)據(jù)中心的實(shí)際狀態(tài)與當(dāng)前CMDB中的狀態(tài)總是存在差異。這是我們能做出的唯一斷言。云服務(wù)是一個(gè)由模型驅(qū)動(dòng)的架構(gòu),它是可靠且完整的,實(shí)際上,你現(xiàn)在可以做一些在傳統(tǒng)數(shù)據(jù)中心里無法完成的任務(wù)。我們創(chuàng)建了一個(gè)名為Edda的系統(tǒng),它記錄了云服務(wù)的歷史數(shù)據(jù),比如服務(wù)的啟動(dòng)時(shí)間、正在執(zhí)行的任務(wù)、版本信息以及實(shí)例的關(guān)閉時(shí)間等。此外,我們還收集了AppDynamics收集的請(qǐng)求流信息。通過這個(gè)系統(tǒng),你有能力查詢整個(gè)基礎(chǔ)設(shè)施的歷史記錄。你可以說,“某個(gè)東西壞了,這里有一個(gè)IP地址和一個(gè)日志文件。”然后,你可以找到所有曾經(jīng)使用過這個(gè)IP地址的實(shí)例,進(jìn)一步找出是哪個(gè)實(shí)例出了問題。你還可以查詢實(shí)例何時(shí)運(yùn)行,何時(shí)停止,以及所有其他相關(guān)信息。或者,如果你進(jìn)行安全審計(jì),你可以查看所有相關(guān)的日志記錄。這種能力非常強(qiáng)大。我不確定人們是否已經(jīng)將這種系統(tǒng)集成到他們的體系結(jié)構(gòu)中。我們?cè)谶@個(gè)系統(tǒng)上做了很多工作,但我還不確定我們是否真正學(xué)到了它的全部意義,但它確實(shí)非常強(qiáng)大。
還有一件事情,我們花費(fèi)了大約一個(gè)小時(shí)來運(yùn)行一些基準(zhǔn)測試配置來試圖找到答案,因此讓Cassandra在48個(gè)實(shí)例上運(yùn)行。大約一個(gè)小時(shí)后,我們放棄了,我們可以每秒處理一百萬個(gè)請(qǐng)求,超過一百萬也沒問題。這已經(jīng)足夠了,遠(yuǎn)遠(yuǎn)超出了我們的需求。看起來它是線性的,然后我們又關(guān)閉了它。這個(gè)基準(zhǔn)配置只存在了大約一個(gè)小時(shí)左右,這讓我感到非常有趣,因?yàn)檫@是一個(gè)無摩擦的基礎(chǔ)設(shè)施實(shí)驗(yàn),你可以去嘗試一些東西。我經(jīng)常遇到那些云環(huán)境被鎖定的人,他們無法嘗試一些東西。這是一件很悲哀的事情。這個(gè)基準(zhǔn)測試是由DataStax使用的,它在互聯(lián)網(wǎng)上被廣泛宣傳。
Netflix開源計(jì)劃
Netflix選擇了開源之路,這頗具深意,因?yàn)殚_源已經(jīng)成為了打造技術(shù)品牌、影響行業(yè)的重要手段。雖然不是第一家采取此舉的公司,但我們的意圖明確,成果也相當(dāng)顯著。我們舉辦了各種競賽,設(shè)計(jì)了獨(dú)特的logo,還定期舉行了聚會(huì)。這些聚會(huì)的參與人數(shù)總是最多,吸引了數(shù)百人前來Netflix了解開源項(xiàng)目的相關(guān)信息。這種開放策略對(duì)我們來說非常有效。我相信,其他公司也從中得到了啟示,第一資本公司就是一個(gè)很好的例子,也有很多其他公司在做類似的事情。
我們?yōu)槭裁匆_源呢?隨著平臺(tái)的不斷發(fā)展,創(chuàng)新已經(jīng)從前沿的領(lǐng)域轉(zhuǎn)變?yōu)槌R姷哪J健N覀冋嬲胍氖亲呦蚬蚕淼哪J剑驗(yàn)槿绻覀兊牟椒コ^了市場的接受度,而市場選擇了不同的方向,我們必須回到主流上來。Netflix在某些情況下確實(shí)稍微偏離了主流。這是一個(gè)認(rèn)真的嘗試,我們?cè)噲D通過與行業(yè)其他部分共享我們的經(jīng)驗(yàn)和方法,使Netflix與整個(gè)行業(yè)保持一致。
這些目標(biāo)構(gòu)成了Netflix開源項(xiàng)目的核心。我們致力于將我們所做的確定為最佳實(shí)踐和標(biāo)準(zhǔn),以推動(dòng)行業(yè)的發(fā)展。通過招聘、留住和吸引最優(yōu)秀的工程師,我們?nèi)〉昧肆钊瞬毮康某晒4送猓覀冞€成功地建立了技術(shù)品牌,這也成為我們今天的驕傲。
從共享的生態(tài)系統(tǒng)中獲益,得到來自外部的貢獻(xiàn),這對(duì)Netflix的成長起到了重要作用。舉個(gè)例子,ZooKeeper中有一些部分是由Netflix開發(fā)的,還有一個(gè)叫做Curator的項(xiàng)目已經(jīng)成為頂級(jí)的Apache項(xiàng)目。這個(gè)項(xiàng)目最初由Netflix創(chuàng)建,后來一位工程師離開了Netflix,但他繼續(xù)致力于這個(gè)項(xiàng)目的開發(fā)。Netflix只需使用這個(gè)項(xiàng)目,不再需要自己去構(gòu)建這些代碼。這也意味著,我們不需要再花費(fèi)時(shí)間和資源去開發(fā)這些功能,因?yàn)槠渌艘呀?jīng)確認(rèn)了這些功能的價(jià)值和優(yōu)勢,并且愿意為我們維護(hù)和更新這些代碼。
我們當(dāng)時(shí)試圖增加更多的使用案例和特性,并修復(fù)一些問題。其中,我們得到的一個(gè)重要教訓(xùn)是部署起來非常困難。一個(gè)關(guān)鍵的內(nèi)部組件是機(jī)器鏡像。我們?cè)趦?nèi)部運(yùn)行的是一個(gè)被篡改過的CentOS版本,它被修改得過于離譜,我們甚至不想分享它。我們?cè)噲D轉(zhuǎn)向標(biāo)準(zhǔn)版本的Ubuntu,同時(shí)嘗試導(dǎo)出所有內(nèi)容。但由于我們沒有最終版本,也沒有內(nèi)部工程資源來構(gòu)建一個(gè)可導(dǎo)出的快速版本,整個(gè)部署過程非常困難,持續(xù)了太長時(shí)間。最終,這個(gè)問題大約在一年后得到了解決,但過程非常艱難。如果你打算構(gòu)建一個(gè)開源項(xiàng)目,一定要考慮部署問題,如何支持它,并且需要一些工程資源來獲得良好的采用率。
Docker容器和微服務(wù)模式
實(shí)際上,2014年發(fā)生了一件具有重大意義的事件,那就是Docker容器的出現(xiàn)并逐漸成為一種主流模式,實(shí)際上實(shí)現(xiàn)了Netflix在構(gòu)建系統(tǒng)時(shí)所采用的大量理念。如果有人問我,人們到底有多關(guān)心微服務(wù)?那么,你們剛剛看到的演講稿中使用的“微服務(wù)”這個(gè)詞,在當(dāng)時(shí)還沒有被廣泛使用。然而,隨著時(shí)間的推移,這個(gè)概念變得越來越流行。2009年,他們認(rèn)為我們的想法瘋狂。2010年,他們說這種做法行不通。2011年,我們成為了無人不曉的獨(dú)角獸企業(yè)。2012年,他們說,好吧,我們?cè)敢鈬L試這樣做。我們無法弄清楚如何實(shí)現(xiàn)這個(gè)目標(biāo)。到了2013年,我們分享了足夠的開源代碼,以至于許多人開始嘗試使用并試圖模仿我們的做法。我認(rèn)為這是非常有影響力的。
在Netflix學(xué)到的教訓(xùn)以及InnovationLoop(創(chuàng)新閉環(huán))
Netflix有哪些重要的經(jīng)驗(yàn)?zāi)兀渴紫龋俣仁侵苿俚年P(guān)鍵。為了快速推向市場并獲取用戶反饋,我們需要消除產(chǎn)品開發(fā)中的所有摩擦。Netflix強(qiáng)調(diào)高度的信任、簡化的流程以及團(tuán)隊(duì)之間的高度配合。團(tuán)隊(duì)之間沒有繁瑣的交接流程,而是通過API進(jìn)行無縫銜接。此外,Netflix的文化注重非差異化的、繁重的工作,同時(shí)利用大量工具實(shí)現(xiàn)簡單有效的模式。
為了達(dá)到業(yè)界領(lǐng)先水平,Netflix采用自助云服務(wù),讓不可能的事情變得瞬間可能。例如,在短短一個(gè)小時(shí)內(nèi)完成每秒一百萬次的寫入基準(zhǔn)測試,這展示了Netflix卓越的技術(shù)實(shí)力和創(chuàng)新能力。
我們推崇的創(chuàng)新循環(huán)包括觀察、定位、決策和行動(dòng)四個(gè)步驟。一旦發(fā)現(xiàn)競爭對(duì)手的行動(dòng)或客戶的痛點(diǎn),我們需要迅速進(jìn)行分析,并將創(chuàng)新轉(zhuǎn)向大數(shù)據(jù)。我們制定計(jì)劃并迅速行動(dòng),通過增量特性構(gòu)建產(chǎn)品,進(jìn)行自動(dòng)部署,啟動(dòng)A/B測試。然后,我們根據(jù)客戶的反饋來衡量產(chǎn)品的受歡迎程度,不斷循環(huán)這個(gè)過程。我們通常每周或每隔幾周就進(jìn)行一次這樣的循環(huán),以實(shí)現(xiàn)新特性或新想法的快速迭代。
非破壞性生產(chǎn)更新
非破壞性生產(chǎn)更新這意味著你可以隨時(shí)在生產(chǎn)環(huán)境中安全地啟動(dòng)新代碼、新版本的代碼,并在生產(chǎn)環(huán)境中進(jìn)行測試,而不會(huì)對(duì)現(xiàn)有系統(tǒng)產(chǎn)生任何破壞。這種做法讓人們感到困惑,他們不明白我們是如何做到的。其實(shí),關(guān)鍵在于使用不變代碼。
舊代碼仍然在服務(wù)中運(yùn)行,當(dāng)你啟動(dòng)新服務(wù)時(shí),會(huì)創(chuàng)建一個(gè)新的服務(wù)組。生產(chǎn)流量會(huì)與舊的服務(wù)組進(jìn)行通信,直到你指示將部分流量路由到新的服務(wù)組。這意味著可以發(fā)布新代碼,但實(shí)際上不必將所有生產(chǎn)客戶流量都切換到新代碼。我們可以在非常詳細(xì)的級(jí)別上進(jìn)行覆蓋,從而創(chuàng)建一個(gè)獨(dú)立的測試環(huán)境,只有開發(fā)人員和質(zhì)量保證人員才能訪問。
通過使用Netflix,我們可以獲得最新的體驗(yàn),并觀察新版本是否有效。一旦確認(rèn)新版本的表現(xiàn)足夠出色,我們會(huì)邀請(qǐng)一組用戶進(jìn)行試用,確保一切都按預(yù)期進(jìn)行,然后最終向全體用戶推出。這就是為什么你不必等待其他人的原因,你不需要獲得任何許可。你正在生產(chǎn)環(huán)境中進(jìn)行測試,你只是發(fā)布了新版本。這種做法是完全安全的。
在Netflix,我們?cè)虿皇褂肅hef和Puppet來更新代碼而受到批評(píng),因?yàn)檫@種方法需要啟動(dòng)新實(shí)例來更新代碼。這確實(shí)引起了一些爭議。然而,最終,這種做法被Docker和容器所采納。服務(wù)之間的版本感知路由是一個(gè)重要的概念,但似乎在實(shí)踐中被遺忘了。我知道有許多微服務(wù)庫可以用于調(diào)用服務(wù)之間沒有內(nèi)置版本感知路由的服務(wù)。
微服務(wù)
我們正在積極降低成本、規(guī)模和變化的風(fēng)險(xiǎn),這一舉措有力地推動(dòng)了各項(xiàng)工作的進(jìn)展。我們可以將項(xiàng)目推送到生產(chǎn)環(huán)境中,并在完全安全的環(huán)境中測試。通過應(yīng)用混沌工程的原則,我們認(rèn)為這樣的步驟將取得成功。由于混沌工程的介入,可以更快地推進(jìn)項(xiàng)目。
當(dāng)時(shí),我們對(duì)微服務(wù)的定義是:這是一種松散耦合、面向服務(wù)的架構(gòu),具有明確的上下文邊界。如果耦合性不夠松散,就無法獨(dú)立部署。如果沒有明確的上下文邊界,就必須充分了解周圍的各個(gè)因素。在此背景下,只需要了解某個(gè)特定服務(wù)的功能,就可以成功地為整個(gè)系統(tǒng)貢獻(xiàn)代碼。
反之,如果你在處理一個(gè)龐大的單體應(yīng)用,就需要對(duì)整個(gè)系統(tǒng)有全面的了解,才能在該應(yīng)用中安全地進(jìn)行任何修改。
如果你發(fā)現(xiàn)自己過度耦合,那說明你沒有創(chuàng)建這些有界上下文。我們使用了倒置的康威定律,通過創(chuàng)建與所需架構(gòu)相符的團(tuán)隊(duì)來實(shí)現(xiàn)這一目標(biāo)。我們通常會(huì)嘗試讓每個(gè)微服務(wù)完成一項(xiàng)任務(wù),聚焦于一個(gè)動(dòng)詞,這樣你就可以明確地說,這個(gè)服務(wù)每秒可以處理100瓦特或1000瓦特。這種設(shè)計(jì)不會(huì)讓微服務(wù)涉及大量不同的任務(wù),從而使得容量規(guī)劃和測試更加容易。例如,如果我有一個(gè)新版本的服務(wù)每秒處理的瓦特?cái)?shù)比舊版本的多,那么測試起來就會(huì)容易得多。
大多數(shù)的服務(wù)是由一名開發(fā)人員獨(dú)立生產(chǎn)的,但同時(shí)也會(huì)有另一名開發(fā)人員與之合作,進(jìn)行代碼審查,以提供必要的支持。為了確保服務(wù)能夠持續(xù)運(yùn)行,你必須讓其他人理解你的代碼。你可以與團(tuán)隊(duì)中的其他人進(jìn)行代碼審查,以便他們可以在你需要離開工作崗位時(shí),接手并支持服務(wù)的正常運(yùn)行。
每個(gè)微服務(wù)都是一個(gè)獨(dú)立的構(gòu)建,我們將其部署在容器中,最初是使用機(jī)器映像中的Tomcat,或者使用Python等其他語言編寫的程序。后來,隨著Docker的出現(xiàn),這種模式得到了更好的復(fù)制和推廣。使用Docker,我們可以輕松地創(chuàng)建和管理容器,實(shí)現(xiàn)服務(wù)的快速部署和擴(kuò)展。
在我們的系統(tǒng)中,所有的數(shù)據(jù)都被復(fù)制到多個(gè)短暫的實(shí)例中。即使Cassandra實(shí)例也是短暫的,但我們有足夠多的實(shí)例來確保數(shù)據(jù)的完整性和可靠性。這意味著,即使你丟失了一臺(tái)機(jī)器,數(shù)據(jù)也會(huì)從其他機(jī)器中重建,從而確保數(shù)據(jù)的完整性。
注:本文內(nèi)容轉(zhuǎn)載于InfoQ文章:
Microservices Retrospective – What We Learned (and Didn’t Learn) from Netflix
(https://www.infoq.com/presentations/microservices-netflix-industry/?itm_source=infoq&itm_medium=popular_widget&itm_campaign=popular_content_list&itm_content=)
ECI Media官方媒體矩陣
聯(lián)系我們
轉(zhuǎn)載請(qǐng)?jiān)谖恼麻_頭和結(jié)尾顯眼處標(biāo)注:作者、出處和鏈接。不按規(guī)范轉(zhuǎn)載侵權(quán)必究。
未經(jīng)授權(quán)嚴(yán)禁轉(zhuǎn)載,授權(quán)事宜請(qǐng)聯(lián)系作者本人,侵權(quán)必究。
本文禁止轉(zhuǎn)載,侵權(quán)必究。
授權(quán)事宜請(qǐng)至數(shù)英微信公眾號(hào)(ID: digitaling) 后臺(tái)授權(quán),侵權(quán)必究。
評(píng)論
評(píng)論
推薦評(píng)論
暫無評(píng)論哦,快來評(píng)論一下吧!
全部評(píng)論(0條)