摘要:剛才聽了謝樂冰的演講我覺得很多東西和我們的思路非常像,從我回國到現(xiàn)在大概有一年多的時間。在看來,一個業(yè)務(wù)應(yīng)用應(yīng)該是分層的,每一層都是一個所謂的服務(wù),剛才謝樂冰講的所謂服務(wù)化和異步化,不會把這些東西從前到頭攪在一起,這樣非常難以擴展。
本文是數(shù)人云深圳技術(shù)分享課上Coding CTO 孫宇聰?shù)难葜v實錄,小數(shù)帶你走近這位詼諧幽默的大牛,領(lǐng)略他深入的見解和豐富的實踐經(jīng)驗。
非常感謝今天有這個機會,數(shù)人云的CEO是我前同事王璞,他原來是Google的,我是在Google云計算部門,我們合作非常緊密。
創(chuàng)業(yè)也是非常好的機會,Coding是關(guān)注于開發(fā)者、生產(chǎn)力、效率。數(shù)人云會關(guān)注真正從代碼到研發(fā)、落地,這一系列的事情,這簡直就是絕配。剛才聽了謝樂冰的演講我覺得很多東西和我們的思路非常像,從我回國到現(xiàn)在大概有一年多的時間。我一直在改造Coding原來的業(yè)務(wù)、架構(gòu),包括新業(yè)務(wù)的架構(gòu)設(shè)計。對我來講他講的很多東西我們已經(jīng)實踐過了,只不過采用的方法可能不太一樣,用名詞來說就是殊途同歸,條條大路通羅馬。
今天我從研發(fā)的角度講一講,把一個所謂的代碼變成無服務(wù)、無狀態(tài)、分布式,我們是怎么想的。我們很遺憾的是跟他不是一同開始,我們沒利用他們的東西,現(xiàn)在我們也非常想能夠把我們這些經(jīng)驗和他們的經(jīng)驗結(jié)合起來,給大家提供一個完整的,從開發(fā)一直到最后的體驗。
個人介紹——從Google到Coding先吹吹牛,介紹一下我自己。我原來在Google,2007年加入的Google,2009年去的Google美國總部。我去了以后參加兩個大項目,一個項目是YouTube國內(nèi)不存在的視頻網(wǎng)站,當(dāng)年經(jīng)歷了YouTube爆發(fā)式增長的階段,從無到有的過程,這個經(jīng)歷是值得一提的。應(yīng)該是2010年左右,當(dāng)時YouTube每個月的上傳量已經(jīng)超過1個PB,這個數(shù)字目前沒幾個人達到。我們建了CDN網(wǎng)絡(luò),當(dāng)時我們有一萬個節(jié)點,10000臺機器,都是部署在每個SP自己的機房里,當(dāng)時的峰值流量就達到10T,一回國都是2M的小水管,當(dāng)時流量是10個TbpS,可能80%的流量都是小貓視頻,大家上YouTube最多的事是看小貓視頻。
后來轉(zhuǎn)到Google cloud platform,當(dāng)時做的主要是Google所有內(nèi)部百萬臺服務(wù)器的運維服務(wù),要管理機器從工廠造出來那一刻,接上電源以后,然后安裝、部署,包括運行軟件,最后都要銷毀,當(dāng)時兩個團隊20人,管全球100多萬臺機器,我們不是管機器的,是讓系統(tǒng)管機器。
后來國內(nèi)炒的很火的Borg,Omega,Google所有的任務(wù)都是集中在這兩個任務(wù)分發(fā)系統(tǒng)上,Borg已經(jīng)很牛了,Omega又很牛,但是不幸的是Omega已經(jīng)早就被cancel了。Omega這伙人寫B(tài)org寫煩了,就想重寫一下,這幫人寫了大概兩三年,最后沒能解決什么實際問題。這個事情在Google內(nèi)部結(jié)果是不太好的,就被cancel了。更搞笑的是,寫Omega這伙人一看公司不讓我寫了,我改成寫Kubernetes。原班人馬寫Kubernetes,把這個思想帶過去,重新用go又寫了一遍。市面上的容器化管理平臺又有幾個,我的看法是Kubernetes現(xiàn)在不是很靠譜,起碼現(xiàn)在不是很靠譜,大家就知道選什么好了。
回國以后,我們主要干了Coding這個事,主要是做了所謂的眾包平臺,可以讓需求方在上面找到程序員做事,程序員也可以接到私活,有點像軟件行業(yè)的房屋中介。
Coding基于終端業(yè)務(wù)是碼市,用張老板的話說讓自由人自由連接,需求方找到程序員,程序員找到需求方。我們開發(fā)針對很多程序員的生產(chǎn)力工具,我回國以后最大的感受,國內(nèi)的程序員是太敬業(yè)了,比國外敬業(yè)多,我們早上10點多公司,下午3點多就回家了,國內(nèi)的程序員什么時候干過這個事,996,10、10、7,都干過的。很多時候老板招程序員是來干活,他一是不關(guān)心你用什么工具干活,二是不關(guān)心你怎么干的,效率高不高。我們是給程序員提供好的工具,提高生產(chǎn)力,解放生產(chǎn)力,讓成程序員效率提高。
基于這個我們做了項目管理、代碼倉庫、在線開發(fā)的WebIDE、演示平臺。很多東西目前還是秘密,但是我們也秘密研發(fā)中,今年下半年很多東西要上線。
Google Borg——Millions Job Every Day今天主題主要是講Borg和Coding的實踐。Google的Borg系統(tǒng)是什么東西?Google Borg系統(tǒng)是整個公司的任務(wù)分發(fā)系統(tǒng),你在Google里面寫程序必須在Borg這個平臺上運行,怎么做到的?你買不到機器,公司不給你批錢買機器,必須從Borg買資源。當(dāng)一個東西成為一個公司標(biāo)準(zhǔn)的時候就好辦了,否則你永遠是買一臺機器瞎配一下,永遠所做不到所謂的PaaS,或平臺化。
Google的數(shù)據(jù)中心,或者說它的架構(gòu)層面是什么樣的?它也非常簡單,Google有幾個名詞可以解釋一下,首先是Google的機器,每一臺都是沒有外殼的機器,因為外殼對Google來說一點用沒有,因為它要求隨時可以操作。所有這些機器組成一排,很多排的機器組成所謂的集群,兩三個集群組成所謂的數(shù)據(jù)中心,數(shù)據(jù)中心放在一起就組成一個園區(qū)。
為什么說這件事?Google的一大理念是分層或分區(qū),相當(dāng)于從上到下都是一個經(jīng)過頂層設(shè)計的狀態(tài),不會是說有的公司是從前到后都攪在一起,你要說我做一個業(yè)務(wù),業(yè)務(wù)從買機器到布線,到供電,都是連在一起的,全都是一個部門搞的,這樣搞出來的東西可能效率稍微高一點點,但是復(fù)雜度高非常難以擴展。Google分層的理念和容器化的理念一樣,容器化本身是要分層,只有分層才能降低復(fù)雜度,每一層都給每一層提供不同的接口。這個是每一排機器是連到一個供電設(shè)備上,每一個集群,每一個Cluster是一個完整的Borg Cluster,好幾個數(shù)據(jù)中心有好幾個Borg Cluster。給應(yīng)用開發(fā)者提供了一個穩(wěn)定、抽象的平臺,你不用擔(dān)心我具體找哪臺機器,而是把任務(wù)運行到哪個集群中,然后自動在集群中給你分配資源,這是Google的生產(chǎn)環(huán)境是這樣的組織過程。
當(dāng)Google一個請求來的時候,Google都涉及到哪些東西,一直到最后的服務(wù)層涉及到什么條件和環(huán)節(jié)。Google有所謂的B2、B4,可以理解為一個是公有網(wǎng)絡(luò),一個是私有網(wǎng)絡(luò)。B2是和各大運營商接的網(wǎng)絡(luò),B4是數(shù)據(jù)中心的骨干網(wǎng)。數(shù)據(jù)包從ISP,或從用戶直接到達Google數(shù)據(jù)中心以后一定會進入Borg Cluster,所有任務(wù)都在Borg Cluster這個集群里。Borg里運行了GFE,GFE它相當(dāng)于一個前端,有GSLB是負載均衡系統(tǒng),告訴用戶你應(yīng)該訪問哪些機器,或者是怎么樣,這個請求到達應(yīng)用程序的后端,存儲層讀數(shù)據(jù),最后反饋給用戶。
在Google看來,一個業(yè)務(wù)應(yīng)用應(yīng)該是分層的,每一層都是一個所謂的服務(wù),剛才謝樂冰講的所謂服務(wù)化和異步化,不會把這些東西從前到頭攪在一起,這樣非常難以擴展。把整個的所有流程切片以后,每一層都可以橫向擴展,處理很多應(yīng)用,效率也非常高。這就是Google做分布式,就是靠一層層切分,每一層都有不同的團隊負責(zé),這層和那層有明確的接口,接口是異步的,非常清晰的,所以才能大規(guī)模擴張。
今天講的重點是Google的Borg是干什么用的,Borg內(nèi)部架構(gòu)是什么樣?首先里面有幾個比較大的東西,第一個東西就是所謂的Borg master,有五個方框,因為實際就是跑在5臺機器上的。Borg master是基于所謂的Paxos協(xié)議,把一個狀態(tài)可以安全地復(fù)制到5個機器上,只要5個機器有3個正常工作,這個集群就能正常工作,這就是Borg master,把集群的所謂狀態(tài),什么東西運行在什么地方,一個任務(wù)運行幾份,運行在哪,什么狀態(tài),都記在Borg master上。Borg Master有對應(yīng)的Borglet,就是Borg slave,運行在集群的小節(jié)點上執(zhí)行任務(wù)的東西, Borg master負責(zé)發(fā)指令,Borg slave負責(zé)執(zhí)行。Google這個模型運行十年多,每一個集群大概有10000臺機器,這個模型是經(jīng)過驗證的,每一個集群里開始是10000,后來漲到30000-50000臺機器,這個規(guī)模是非常可觀的。
還有Scheduler,選擇每個機器去運行,這個細節(jié)就不說了。和用戶的接口,Borg有個所謂的config,config就是你寫了一下我現(xiàn)在有一個東西要運行,這個東西有什么運行條件,通過工具推到Borg Master上,Borg Master給你安排一個機器,如果這個機器突然間掛了,就可以把任務(wù)遷到別的機器上運行。Borg Cluster的模式,給上層的應(yīng)用提供了一個接口,你只要告訴我你運行什么,我不關(guān)心你具體運行在哪。大家可以看Google特別吹牛的文章,我們每個月有20億的任務(wù)在運行,實際上有很多任務(wù)是運行1秒就崩潰,然后又重新運行,里面數(shù)據(jù)有點浮高。但是這個模型是Google經(jīng)過實踐得出的,因為開發(fā)者真的不關(guān)心具體的機器是哪個,只關(guān)心我需要2G內(nèi)存,一個CPU,塞到機器上跑就可以了,不關(guān)心機器上還運不運行其他的東西。
理都懂,城會玩,臣妾做不到——土制一些吧Borg模型比較難,Borg Master也是Google內(nèi)部工具。我回國以后遇到最大的問題,這些東西都玩不了,就得土制。因為你沒有一個完整的解決方案做這個事,我們自己得把這個東西搭起來。搭起來得需要一些東西,分為三大塊,第一大塊是所謂的Run time,這解決容器化的運行時環(huán)境。二是在Run time運行就得涉及到鏡像,或鏡像分發(fā)的機制,有一個東西要運行,可以把它運行到某一個機器上。最后是有Orchestration,就是編排系統(tǒng),即有一個人,一個程序,決定這個東西運行在什么地方,然后是下載鏡像,然后去執(zhí)行。在2015年初的時候發(fā)現(xiàn),目前符合這個模式的東西就是Docker,我們先試試Docker什么樣。
2015年上半年,基本上大上半年的時間,我們搞了所謂的Docker化,最開始我們內(nèi)部使用的都是一個所謂單機部署,每個人都要自己拷貝這樣的文件,然后執(zhí)行命令。我們后來搞了一個Docker化,Docker化的結(jié)果是,所有的代碼打包成了Docker Image。Docker生產(chǎn)環(huán)境有自己的私有Registry,用Docker container運行代碼。最后還寫了生產(chǎn)環(huán)境的容器編排系統(tǒng),這個做得很爛,沒有數(shù)人云做得好,但是勉強解決了我們手動執(zhí)行的一些問題。搞完這個東西以后,我們發(fā)現(xiàn)Docker到處是坑。
小姐身子丫鬟命——Docker Engine (Runtime)然后我來講講填了哪些坑。Docker daemon,也就是運行時,當(dāng)時大家覺得很厲害,一開始都說你用容器必須用Docker,后來發(fā)現(xiàn)Docker daemon不是唯一的一個啟動容器的途徑,跟以前搞的都是一回事。Docker daemon會遇到一個問題,任何人用Docker第一天都發(fā)現(xiàn),Docker 里面沒有init,daemon也沒有reap子進程,如果程序fork很多進程,會在系統(tǒng)中出現(xiàn)很多僵尸進程,最終導(dǎo)致 docker daemon 出現(xiàn)問題,國內(nèi)目前也沒有把這個問題解決。每次跑一個Docker程序的時候都要擔(dān)心,我們會擔(dān)心這個Docker有沒有處理好僵尸進程的問題。二是Docker后面的存儲系統(tǒng)沒有一個靠譜的,用AUFS,很多垃圾文件不清理,我從事軟件開發(fā)這么多年從來沒有過,很少見,大部分都是已經(jīng)打包好的程序,不會占用很多磁盤iNode。最新版OverlayFS產(chǎn)生一些死鎖還有崩潰,BTRfs也是。當(dāng)時我們對人生產(chǎn)生了懷疑,為什么我們要自找這么多事,我們原來跑得好好的,為什么搞到Docker上來,遇到了一些新問題。我們甚至把Docker daemon改成Open SSH,但Docker daemon和Open SSH其實是一回事,就是提供遠程命令執(zhí)行的工具。你也可以理解為一個木馬,發(fā)一個指令就跑一個程序,而且跑的還有問題,我們不如直接SSH連接上運行這個程序,都比這個靠譜,當(dāng)時很難受。后來Docker daemon本質(zhì)上是一個所謂的系統(tǒng)工具,它不停地掃描系統(tǒng)中的文件路徑,進入這個狀態(tài)。它有兩個問題,一是原子性操作的問題,你Docker刪除一堆事,要刪目錄,調(diào)一堆系統(tǒng)API,任何一個地方出現(xiàn)問題都會造成垃圾,造成系統(tǒng)死鎖。Docker daemon一重啟,別的肯定也會要重啟,對我的個人聲譽在團隊里造成很大的影響。
Docker daemon有很多問題,Docker是當(dāng)時可選的東西,給我們帶來好處,但是隨之而來的也有一些問題。Docker團隊自己也意識到有問題,后來美國的神仙打一下架,覺得我們同意搞一個所謂的OCI,它成立了一個標(biāo)準(zhǔn),就產(chǎn)生了一個Runc的東西,Runc就是一個具體執(zhí)行container的東西,Docker一聽說這個東西就趕緊把代碼捐出來,給了Runc,好處是他對代碼很熟悉,趕緊搞了一個containerD,是grpc warpper,通過grpc訪問的一個服務(wù),最后用戶還保證Docker不變。對Docker來說OCI像毒藥,逼著他吃,但是吃完也對他本身造成威脅。對最終用戶是好事,如果我們發(fā)現(xiàn)Docker不靠譜,就直接用containerd交流,如果containerd也不靠譜,就繞過去讓他和Runc交流,你不再綁在一個Docker。跟虛擬化是一樣的,以前大家覺得虛擬化就是Vmware,必須得用Vmware的一套東西才能看得見?,F(xiàn)在分層,先有KVM,然后有QEMU和containerD差不多,再上面有Openstack。和Google的東西一樣,把邏輯分層,不再是一團,從上到下捅到底,每一層都被替換,靈活性更高、性能也會更好。
雞肋的Docker Image——一個不那么圓的輪子而后我們又發(fā)現(xiàn)Docker Image本身也不怎么樣,最后大家的評論是非常雞肋。Docker Image就是一個壓縮包,如果你想把一個東西傳給另一個人打一個包壓縮一下發(fā)過去,是一樣的,Image又能分層,又能節(jié)省傳輸,這個東西都是扯淡,因為我們內(nèi)網(wǎng)一秒好幾百M,省出10M的磁盤空間對我們來說是省幾毫秒。Docker Image來自于DockerFile,Dockerfile有一些表面問題,首先是不會寫,這個東西是他自己發(fā)明的,對于開發(fā)者來說,這個東西對你是有學(xué)習(xí)障礙的東西。你學(xué)習(xí)過程中蕩滌了你的靈魂,又開始懷疑人生。所以用Docker就經(jīng)常懷疑人生,你覺得以前學(xué)的東西都不好使了,用了一段時間以后發(fā)現(xiàn)這些都是騙人的,你要干的事還是一樣。Docker的核心問題,或者是Image核心問題一是編譯代碼,二是打包成鏡像發(fā)出去。怎么編譯,怎么打包,這兩件事是完全分開的,不應(yīng)該攙在一起。你下次寫Docker Image的時候,發(fā)現(xiàn)寫DockerFile,既做編譯,又做打包,恭喜你,你已經(jīng)成功地給自己挖很多坑,運行的時候發(fā)現(xiàn)打包一次需要好幾小時,下載一堆東西,最后打包的鏡像好幾十G,這些事情我們都干過。我們第一個鏡像是打包完3G多,當(dāng)時我們震驚了,這么辛苦寫了這么多的代碼嗎,運行程序就達到3G。
Coding 實踐1:Build&Package&Run最后我們理解了,你要做好一個事情,Build和Package要分家,先Build好代碼,再把編譯的結(jié)果賽到Image運行,Build要靈活,要針對你的所有系統(tǒng)來做,你的代碼是什么樣就應(yīng)該怎么Build,你要寫Java,最后產(chǎn)生一個結(jié)果是Java包,如果不是就說明你的代碼寫得有問題,你應(yīng)該在這個問題上解決,最后就產(chǎn)生Java包,Package就是把Java和Java包放在一起運行。
Coding最后的Dockerfile就三行,第一行是from某個基礎(chǔ)鏡像,一個Java運行時,第二行是add某個Java包,第三是CMD運行。DockerFile基本上我們處于雞肋狀態(tài),用它還可以利用它去推代碼,這部分功能還是有點用的。但是真正用DockerFile,我們不會用它做復(fù)雜邏輯。
把Build和Package分開,我們用的所有編程語言都已經(jīng)把編譯工具搞好,所有的編譯工具都能產(chǎn)生一個多帶帶的包。我們嘗試用DockerFile同時解決build和package這兩個問題,真是沒事找事。你用Docker的時候發(fā)現(xiàn)我干了一堆事,看起來很牛,但是實際效果并不好。作為程序員得審視這個問題,就是能不能產(chǎn)生價值,如果不產(chǎn)生價值你是在給Docker打工,盲目跟從Docker,他說這么干就這么干,他如果改了你這些東西就浪費了。如果你抓住本質(zhì),Docker怎么改對你就沒有影響。
Package的構(gòu)成我們還是用的Docker image的方式,寫了三行,一是Java的運行時環(huán)境,二是Java包,三是怎么運行Java,這是所謂的Package。后來發(fā)現(xiàn)三行太多,應(yīng)該寫兩行,他讓我們寫一行就寫一行。為什么第三行不用寫,Java程序執(zhí)行起來都一樣,都是Java -jar這些東西,你要加一些參數(shù)。不會寫到Image里會發(fā)現(xiàn),Java調(diào)一下內(nèi)存要重新打包嗎?太不合理了。最后CMD就不寫了,Docker直接執(zhí)行,在配置文件里執(zhí)行?;旧纤械姆?wù),要么是三行,要么是兩行。
Coding實踐2:去其糟粕,取其精華在使用的過程中我們發(fā)現(xiàn),Docker有很多花里胡哨的東西,結(jié)果卻是什么也沒用,我們用的是非常簡單的,就把Docker當(dāng)成容器。為什么呢?第一點你看到大部分文章講Docker作為公有云平臺我們應(yīng)該如何使用Docker,這是國內(nèi)公司的通病。搞Docker的部門大部分是公司的運維部門,國內(nèi)的運維部門沒有權(quán)限改代碼,只能改自己的平臺,作為公司的平臺部門得提供各種SDN的服務(wù),研發(fā)人員根本不需要這東西,如果你沒有SDN,就是主機,就是host網(wǎng)絡(luò)模式,給你分配一個端口,保證你的端口是可用的,這個就行了,以前Borg就是這樣,Google搞了十年,每個開發(fā)的人都知道,我們啟動的時候得找一下本地端口什么樣,要么可以配置,要么可以自動尋找一個可用端口。Docker來了說你不用干這個事,我給你一個IP,給你一個80,你永遠可以訪問這個。但是他沒有做到,做了很多后面的東西,SDN,各種打包,性能很差,這個事一般他不告訴你,當(dāng)你上了賊船以后,為什么我們的程序性能這么差。他說困難是暫時的,面包會有的,未來兩年這個性能就提高了。我說未來兩年我們程序都不用了,早就換了,這個明顯是不合理的。
經(jīng)常有人問我你們用Docker這么多,怎么解決共享存儲的問題。我說我們沒有共享存儲,以前是什么樣還是什么樣。很多程序,共享存儲一是要改代碼,或者說有一個很牛的,我們能夠申請一個文件系統(tǒng),自動掛載上面。后來我們發(fā)現(xiàn)這個東西沒有一個有用的,對我們來說沒有區(qū)別。我們的編程模型還是針對本地服務(wù),我們在編程的時候已經(jīng)考慮到如果本地文件不存在怎么辦,遷移數(shù)據(jù)怎么辦,我們都有現(xiàn)成的解決方案,為什么要換,我們還是用Host模型。數(shù)據(jù)就是寫在機器上,如果你要遷移這臺機器,如果這個東西有狀態(tài),你就應(yīng)該處理這個狀態(tài),而不是運維部門幫你解決處理狀態(tài)的問題,這是公司里效率最低的方式,它得跟運維部門協(xié)調(diào),我們要遷移了,運維部門說我?guī)湍惆褦?shù)據(jù)拷過去,這個是不行的。
Docker有一個更大的坑,我把這個東西都轉(zhuǎn)成Docker運行,你一看時區(qū)都是GMT時區(qū),有種到了愛爾蘭的感覺,所有的log時間對不上了。Docker沒告訴你,主機里的locale,你的編碼設(shè)置、時區(qū)設(shè)置,每個用戶passwd都是用的默認(rèn)的設(shè)置。這給我們造成很大困擾。每一個打包的人得關(guān)心到底是什么樣,到底怎么正確設(shè)置時區(qū),密碼這些東西。后來我們直接就mount,跟主機一樣,如果今天這個程序運行在中國的一臺主機上,他就應(yīng)該用這臺主機的模式。我們用容器,很多時候變成我們真的只關(guān)心,第一是運行時的版本,第二是代碼的版本,只有這兩個東西是會變的,其他東西都是跟著主機一起走,這個模型是最簡單,最有利于推廣云計劃、分布式計算的。
不管你做不做容器都應(yīng)該往幾個方向努力,一是所謂的對生產(chǎn)環(huán)境的管理模式。寵物式管理和放牛式管理,寵物式管理是你搞一臺機器,給這個機器起好聽的名,很多公司有專門的機器叫數(shù)據(jù)庫,這個機器有特殊的人調(diào)試。突然有一天這個機器掛了,你得把這個機器修好,這是寵物式管理,你得把這個東西修好,不修好整個業(yè)務(wù)就停了,數(shù)據(jù)庫是最典型的。除了數(shù)據(jù)庫外我們采用的所有管理方式都是放牛式管理,你放一百頭牛,有一只牛吃完口吐白沫倒下了,你的第一反應(yīng)不是你的牛吃病了,一定是咔,然后再拿一頭新牛過來,如果做到這一點很多事就很簡單。你隨時保證資源,保證有一百頭牛在跑就行了。
二是在國內(nèi)公有云平臺上,最依賴的還是靜態(tài)手動資源配置。因為我們大部分業(yè)務(wù)都是所謂的daemon job,服務(wù)型任務(wù),你的東西一啟動它就要一直運行,占用一定的數(shù)量的內(nèi)存,一定數(shù)量的CPU,就持續(xù)提供服務(wù)。所以這個東西要遷移對你沒有任何好處,可能能夠提高你資源利用率,如果你搞一臺新機器把這個東西分過去。但是同樣的,你在這也是用CPU,那也是用CPU,對你來說花錢一樣花。所以很多時候動態(tài)調(diào)配在daemon job是沒意義的,除非不停地有機器掛,公有云虛擬化了,已經(jīng)減少了很多這方面的問題。我們最關(guān)心的是留出足夠的富裕量,搞出冗余,不受任何一個多帶帶虛擬機的影響。動態(tài)調(diào)配對我們意義不大,動態(tài)調(diào)配唯一有用的地方是你有批處理、周期性任務(wù),他運行時間比較短,你又不關(guān)心在什么地方運行,這是容器平臺截然不同的兩個的使用場景,這兩個應(yīng)用場景可能有不同的方案解決。
Coding 實踐3:工具化、代碼化、半自動化最后得出的結(jié)論,算我提出的一個口號,怎么樣能夠減輕你運維的壓力,或提高你開發(fā)的效率。你是要把所有做的事情,所有需要人力參與的事情工具化、代碼化、半自動化,完全自動化這個事很難,涉及到你要通過實踐積累,把各種各樣的邊緣情況考慮到?,F(xiàn)在對我們來說,80%的是半自動化,執(zhí)行的時候不出錯,很快地執(zhí)行。這是我們所謂開發(fā)編排系統(tǒng)的主要目標(biāo)。在一個公司里什么任務(wù)運行在什么機器上,很多時候存在開發(fā)人員的腦袋里,比如數(shù)據(jù)庫的IP是什么,你如果能想起來,這就說明你們公司的代碼化不夠。代碼化把人才知道的東西都寫到機器里,對我來說不關(guān)心數(shù)據(jù)庫的IP是什么,我只要知道它的域名找到對應(yīng)的機器連接就行了。
對我們的生產(chǎn)環(huán)境,第一什么東西跑在什么機器上,怎么連接。二是搞出常用的屬性管理,比如名字是什么,端口是什么,有什么特點。三是我們仿照Google搞了一個Jobs/Tasks的抽象層,Google里面最大的抽象層,你一個任務(wù)可以有多個副本在運行,這個任務(wù)今天跑5個副本,明天跑100個,這個集群可以直接搞定,我們把這個概念抄過來,相當(dāng)于每一個任務(wù)都有2-3個Tasks。最后把數(shù)據(jù)寫進代碼化的配置文件里時,你發(fā)現(xiàn)集群可以復(fù)制,你在這個集群上可以跑,在那個集群上只要調(diào)調(diào)資源的對應(yīng)關(guān)系,具體跑在什么地方,你就會發(fā)現(xiàn)這個就是所謂的可復(fù)制集群,你本地也可以跑一套,在生產(chǎn)環(huán)境、配置文件都可以跑一套。這是最關(guān)鍵的點,不管你怎么干,你最后都要干一個類似的事,就是把生產(chǎn)環(huán)境代碼化。
接下來,基于剛才的知識搞了一個小工具,這些工具是提供原子性的操作。up是啟動,down是干掉,rollingupdate是一個個更新,保證每個更新完了可以啟動進行下一個更新,對研發(fā)來說就需要這個東西,他們都理解。你說我有一個網(wǎng)易UI頁面,你點鼠標(biāo),他很不理解,他不知道產(chǎn)生什么事情。任何一個集群管理系統(tǒng),就是要設(shè)置所謂的接口,你要提供一些原子化、半自動操作,去協(xié)助開發(fā)者達到他想要干的事,這是所謂的編排系統(tǒng)最應(yīng)該提供的東西。
后來我們應(yīng)該有一個所謂的diff,運行過程中怎么有配置的改變,改變要看一下先改什么,然后再真正應(yīng)用這些改變。后來又搞了網(wǎng)頁系統(tǒng),可以用網(wǎng)頁看,以前連網(wǎng)頁都沒有,后來覺得還是不太方便。在網(wǎng)頁系統(tǒng),以前連網(wǎng)頁都沒有,上可以直接看log,甚至遠程登在某個容器進行操作。這是最小的功能機,最有用的。
Coding實踐總結(jié)最后總結(jié)一下,第一點,想要把容器化、或想要把分布式系統(tǒng)做好,你要定死接口,放手實現(xiàn),對你來說只需要三個接口,build、package、run,能滿足效果,能運行就行了,每個項目都有不同的需求,不可能強求它完全一致。
第二個,生產(chǎn)環(huán)境容器化。很多業(yè)務(wù)有本地依賴,不能挪動。但是最好的情況,第一,你一定要做到軟件把它包起來,你軟件用到的所有資源、所有的文件都是集中在container這個里面的,不會用到別人的東西,中間不會產(chǎn)生交集,這是包起來第一步。這一步很難,很多應(yīng)用配置文件都寫在系統(tǒng)的不同地方,這個機器上可以跑,那個機器跑不起來,只有包起來才能挪動,別的東西能正常訪問,這是最重要的。如果這兩個東西都做成以后,這個東西做成可復(fù)制,可以延伸、可以擴展、可以復(fù)制,這就是容器化做好了。
針對DEVOPS實現(xiàn)代碼化、工具化,最后實現(xiàn)自動化就行了。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/26589.html
摘要:分享實錄云計算技術(shù)源于互聯(lián)網(wǎng)公司,現(xiàn)在云計算已經(jīng)是下一代企業(yè)級的發(fā)展趨勢。如何做云計算一直是云計算技術(shù)的領(lǐng)導(dǎo)者。互聯(lián)網(wǎng)公司的快速發(fā)展,已經(jīng)印證了云計算技術(shù)和云原生應(yīng)用相比傳統(tǒng)構(gòu)架的巨大優(yōu)勢。 今天小數(shù)又給大家?guī)硪黄韶洕M滿的分享——來自KVM社區(qū)線上群分享的實錄,分享嘉賓是數(shù)人云CEO王璞,題目是《云計算與 Cloud Native》。這是數(shù)人云在KVM社區(qū)群分享的第一彈,之后還有數(shù)...
摘要:曾為美國谷歌集群管理組核心成員,主要參與開發(fā)集群管理系統(tǒng)。保證系統(tǒng)升級軟硬件錯誤等均能及時被發(fā)現(xiàn)并處理,谷歌集群能小時不間斷工作。關(guān)于集群管理經(jīng)驗,首先一定要專注于持久的運維自動化工具開發(fā)。 本文僅用于學(xué)習(xí)和交流目的,不得用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/art... 訪談嘉賓: 鄧德源, 才云科技CT...
摘要:曾為美國谷歌集群管理組核心成員,主要參與開發(fā)集群管理系統(tǒng)。保證系統(tǒng)升級軟硬件錯誤等均能及時被發(fā)現(xiàn)并處理,谷歌集群能小時不間斷工作。關(guān)于集群管理經(jīng)驗,首先一定要專注于持久的運維自動化工具開發(fā)。 本文僅用于學(xué)習(xí)和交流目的,不得用于商業(yè)目的。非商業(yè)轉(zhuǎn)載請注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/art... 訪談嘉賓: 鄧德源, 才云科技CT...
摘要:馬拉松會匹配每個和提供的資源,然后通過將任務(wù)下發(fā)下去。對外暴露的就是負載均衡的某個服務(wù),后面自動將流量轉(zhuǎn)發(fā)到某個容器的端口上。還有一直辦法是用內(nèi)網(wǎng)的,這個會維護現(xiàn)有的容器列表端口,并且返回任意一個的端口,頁實現(xiàn)了負載均衡和服務(wù)發(fā)現(xiàn)功能。 演講嘉賓 數(shù)人云COO 謝樂冰 在德國工作十年,回國后加入惠普電信運營商部門,擁有多年項目經(jīng)驗和創(chuàng)業(yè)公司工作經(jīng)驗。在數(shù)人云負責(zé)產(chǎn)品售前和運營,專注行...
摘要:平臺上的微服務(wù)架構(gòu)應(yīng)用再來看一下我眼中的基于當(dāng)前最流行的微服務(wù)架構(gòu)的設(shè)計是什么樣的,即我們平臺上要運行的典型應(yīng)用是什么樣的。 showImg(https://segmentfault.com/img/remote/1460000010900878); 8月19日的數(shù)人云Container Meetup上,張龍老師做了《基于Kubernetes的PaaS平臺的設(shè)計和思考》的精彩分享,分別...
閱讀 1808·2021-11-23 09:51
閱讀 1268·2021-11-18 10:02
閱讀 962·2021-10-25 09:44
閱讀 2098·2019-08-26 18:36
閱讀 1619·2019-08-26 12:17
閱讀 1145·2019-08-26 11:59
閱讀 2746·2019-08-23 15:56
閱讀 3350·2019-08-23 15:05