云架构师进阶攻略(1)
此文已由作者劉超授權(quán)網(wǎng)易云社區(qū)發(fā)布。
歡迎訪問網(wǎng)易云社區(qū),了解更多網(wǎng)易技術(shù)產(chǎn)品運(yùn)營經(jīng)驗。
?
一、架構(gòu)的三個維度和六個層面
????????? ? ?
1.1、三大架構(gòu)
在互聯(lián)網(wǎng)時代,要做好一個合格的云架構(gòu)師,需要熟悉三大架構(gòu)。
第一個是IT架構(gòu),其實(shí)就是計算,網(wǎng)絡(luò),存儲。這是云架構(gòu)師的基本功,也是最傳統(tǒng)的云架構(gòu)師應(yīng)該首先掌握的部分,良好設(shè)計的IT架構(gòu),可以降低CAPEX和OPEX,減輕運(yùn)維的負(fù)擔(dān)。數(shù)據(jù)中心,虛擬化,云平臺,容器平臺都屬于IT架構(gòu)的范疇。
?
第二個是應(yīng)用架構(gòu),隨著應(yīng)用從傳統(tǒng)應(yīng)用向互聯(lián)網(wǎng)應(yīng)用轉(zhuǎn)型,僅僅搞定資源層面的彈性還不夠,常常會出現(xiàn)創(chuàng)建了大批機(jī)器,仍然撐不住高并發(fā)流量。因而基于微服務(wù)的互聯(lián)網(wǎng)架構(gòu),越來越成為云架構(gòu)師所必需的技能。良好設(shè)計的應(yīng)用架構(gòu),可以實(shí)現(xiàn)快速迭代和高并發(fā)。數(shù)據(jù)庫,緩存,消息隊列等PaaS,以及基于SpringCloud和Dubbo的微服務(wù)框架,都屬于應(yīng)用架構(gòu)的范疇。
?
第三個是數(shù)據(jù)架構(gòu),數(shù)據(jù)成為人工智能時代的核心資產(chǎn),在做互聯(lián)網(wǎng)化轉(zhuǎn)型的同時,往往進(jìn)行的也是數(shù)字化轉(zhuǎn)型,并有戰(zhàn)略的進(jìn)行數(shù)據(jù)收集,這就需要云架構(gòu)師同時又大數(shù)據(jù)思維。有意識的建設(shè)統(tǒng)一的數(shù)據(jù)平臺,并給予數(shù)據(jù)進(jìn)行數(shù)字化運(yùn)營。搜索引擎,Hadoop,Spark,人工智能都屬于數(shù)據(jù)架構(gòu)的范疇。
?
1.2、六個層面
?
上面的三個維度是從人的角度出發(fā)的,如果從系統(tǒng)的角度出發(fā),架構(gòu)分六個層次。
? ? ? ???
第一個層次是基礎(chǔ)設(shè)施層,在數(shù)據(jù)中心里面,會有大量的機(jī)架,大量的服務(wù)器,并通過交換機(jī)和路由器將服務(wù)器連接起來,有的應(yīng)用例如Oracle是需要部署在物理機(jī)上的。為了管理的方便,在物理機(jī)之上會部署虛擬化,例如Vmware,可以將對于物理機(jī)復(fù)雜的運(yùn)維簡化為虛擬機(jī)靈活的運(yùn)維。虛擬化采取的運(yùn)維方式多是由運(yùn)維部門統(tǒng)一管理,當(dāng)一個公司里面部門非常多的時候,往往要引入良好的租戶管理,基于Quota和QoS的資源控制,基于VPC的網(wǎng)絡(luò)規(guī)劃等,實(shí)現(xiàn)從運(yùn)維集中管理到租戶自助使用模式的轉(zhuǎn)換,托生于公有云的OpenStack在這方面做的是比較好的。隨著應(yīng)用架構(gòu)越來越重要,對于標(biāo)準(zhǔn)化交付和彈性伸縮的需求越來越大,容器最為軟件交付的集裝箱,可以實(shí)現(xiàn)基于鏡像的跨環(huán)境遷移,Kubernetes是容器管理平臺的事實(shí)標(biāo)準(zhǔn)。
?
第二個層次是數(shù)據(jù)層,也即一個應(yīng)用的中軍大營,如果是傳統(tǒng)應(yīng)用,可能會使用Oracle,并使用大量的存儲過程,有大量的表聯(lián)合查詢,成本也往往比較高。但是對于高并發(fā)的互聯(lián)網(wǎng)應(yīng)用,需要進(jìn)行微服務(wù)的拆分,數(shù)據(jù)庫實(shí)例會比較多,使用開源的Mysql是常見的選擇,大量的存儲過程和聯(lián)合查詢往往會使得微服務(wù)無法拆分,性能會比較差,因而需要放到應(yīng)用層去做復(fù)雜的業(yè)務(wù)邏輯,數(shù)據(jù)庫表和索引的設(shè)計非常重要。當(dāng)并發(fā)量比較大的時候,需要實(shí)現(xiàn)橫向擴(kuò)展,就需要基于分布式數(shù)據(jù)庫,也是需要基于單庫良好的表和索引設(shè)計。對于結(jié)構(gòu)比較靈活的數(shù)據(jù),可以使用MongoDB數(shù)據(jù)庫,橫向擴(kuò)展能力比較好。對于大量的聯(lián)合查詢需求,可以使用ElasticSearch之類的搜索引擎來做,速度快,更加靈活。
?
第三個層次是中間件層,因為數(shù)據(jù)庫層往往需要保證數(shù)據(jù)的不丟失以及一些事務(wù),因而并發(fā)性能不可能非常大,所以我們經(jīng)常說,數(shù)據(jù)庫是中軍大營,不能所有的請求都到這里來,因而需要一層緩存層,用來攔截大部分的熱點(diǎn)請求。Memcached適合做簡單的key-value存儲,內(nèi)存使用率比較高,而且由于是多核處理,對于比較大的數(shù)據(jù),性能較好。但是缺點(diǎn)也比較明顯,Memcached嚴(yán)格來講沒有集群機(jī)制,橫向擴(kuò)展完全靠客戶端來實(shí)現(xiàn)。另外Memcached無法持久化,一旦掛了數(shù)據(jù)就都丟失了,如果想實(shí)現(xiàn)高可用,也是需要客戶端進(jìn)行雙寫才可以。Redis的數(shù)據(jù)結(jié)構(gòu)比較豐富,提供持久化的功能,提供成熟的主備同步,故障切換的功能,從而保證了高可用性。另外微服務(wù)拆分以后,有時候處理一個訂單要經(jīng)過非常多的服務(wù),處理過程會比較慢,這個時候需要使用消息隊列,讓服務(wù)之間的調(diào)用變成對于消息的訂閱,實(shí)現(xiàn)異步處理。RabbitMQ和Kafka是常用的消息隊列,當(dāng)事件比較重要的時候,會結(jié)合數(shù)據(jù)庫實(shí)現(xiàn)可靠消息隊列。
?
第四個層次是基礎(chǔ)服務(wù)層,有的時候成為中臺層,將通用的能力抽象為服務(wù)對外提供原子化接口。這樣上層可以根據(jù)業(yè)務(wù)需求,通過靈活的組合這些原子化接口,靈活的應(yīng)對業(yè)務(wù)需求的變化,實(shí)現(xiàn)能力的復(fù)用,以及數(shù)據(jù)的統(tǒng)一管理,例如用戶數(shù)據(jù),支付數(shù)據(jù),不會分散到各個應(yīng)用中。另外基礎(chǔ)服務(wù)層稱為應(yīng)用和數(shù)據(jù)庫和緩存的一個分界線,不應(yīng)該所有的應(yīng)用都直接連數(shù)據(jù)庫,一旦出現(xiàn)分庫分表,數(shù)據(jù)庫遷移,緩存選型改變等,影響面會非常大,幾乎無法執(zhí)行。如果將這些底層的變更攔截在基礎(chǔ)服務(wù)層,上層僅僅使用基礎(chǔ)服務(wù)層的接口,這樣底層的變化會對上層透明,可以逐步演進(jìn)。
?
第五個層次是業(yè)務(wù)服務(wù)層,或者組合服務(wù)層,大部分的業(yè)務(wù)邏輯都是在這個層面實(shí)現(xiàn),業(yè)務(wù)邏輯比較面向用戶,因而會經(jīng)常改變,所以需要組合基礎(chǔ)服務(wù)的接口進(jìn)行實(shí)現(xiàn)。在這一層,會經(jīng)常進(jìn)行服務(wù)的拆分,實(shí)現(xiàn)開發(fā)獨(dú)立,上線獨(dú)立,擴(kuò)容獨(dú)立,容災(zāi)降級獨(dú)立。微服務(wù)的拆分不應(yīng)該是一個運(yùn)動,而應(yīng)該是一個遇到耦合痛點(diǎn)的時候,不斷解決,不斷演進(jìn)的一個過程。微服務(wù)拆分之后,有時候需要通過分布式事務(wù),保證多個操作的原子性,也是在組合服務(wù)層來實(shí)現(xiàn)的。
?
第六個層次是用戶接口層,也即對終端客戶呈現(xiàn)出來的界面和APP,但是卻不僅僅是界面這么簡單。這一層有時候稱為接入層。在這一層,動態(tài)資源和靜態(tài)資源應(yīng)該分離,靜態(tài)資源應(yīng)該在接入層做緩存,使用CDN進(jìn)行緩存。也應(yīng)該UI和API分離,界面應(yīng)該通過組合API進(jìn)行數(shù)據(jù)拼裝。API會通過統(tǒng)一的API網(wǎng)關(guān)進(jìn)行統(tǒng)一的管理和治理,一方面后端組合服務(wù)層的拆分對APP是透明的,一方面當(dāng)并發(fā)量比較大的時候,可以在這一層實(shí)現(xiàn)限流和降級。
?
為了支撐這六個層次,在上圖的左側(cè)是一些公共能力。
·????? 持續(xù)集成和持續(xù)發(fā)布是保證微服務(wù)拆分過程中的快速迭代,以及變更后保證功能不變的,不引入新的Bug。
·????? 服務(wù)發(fā)現(xiàn)和服務(wù)治理是微服務(wù)之間互相的調(diào)用,以及調(diào)用過程中出現(xiàn)異常情況下的熔斷,限流,降級策略。
·????? 大數(shù)據(jù)和人工智能是通過收集各個層面的數(shù)據(jù),例如用戶訪問數(shù)據(jù),用戶下單數(shù)據(jù),客服詢問數(shù)據(jù)等,結(jié)合統(tǒng)一的中臺,對數(shù)據(jù)進(jìn)行分析,實(shí)現(xiàn)智能推薦。
·????? 監(jiān)控與APM是基礎(chǔ)設(shè)施的監(jiān)控和應(yīng)用的監(jiān)控,發(fā)現(xiàn)資源層面的問題以及應(yīng)用調(diào)用的問題。
?
作為一個云架構(gòu)師還是很復(fù)雜的,千里之行,始于足下,讓我們慢慢來。
?
二、了解云計算的歷史演進(jìn)與基本原理
在一頭扎進(jìn)云計算的汪洋大海之前,我們應(yīng)該先有一個全貌的了解,有人說了解一個知識的起點(diǎn),就是了解他的歷史,也就是知道他是如何一步一步到今天的,這樣如此龐大的一個體系,其實(shí)是逐步加進(jìn)來的,這樣的知識體系對我們來說,就不是一個冷冰冰的知識網(wǎng),而是一個有血有肉的人,我們只要沿著演進(jìn)的線索,一步一步摸清楚他的脾氣就可以了。
?
如何把云計算講的通俗易懂,我本人思考了半天,最終寫下了下面這篇文章。
?
終于有人把云計算、大數(shù)據(jù)和人工智能講明白了!
?
在這里,我把核心的要點(diǎn)在這里寫一下:
?
第一:云計算的本質(zhì)是實(shí)現(xiàn)從資源到架構(gòu)的全面彈性。所謂的彈性就是時間靈活性和空間靈活性,也即想什么時候要就什么時候要,想要多少就要多少。
資源層面的彈性也即實(shí)現(xiàn)計算、網(wǎng)絡(luò)、存儲資源的彈性。這個過程經(jīng)歷了從物理機(jī),到虛擬化,到云計算的一個演進(jìn)過程。
????????? ? ?
架構(gòu)層面的彈性也即實(shí)現(xiàn)通用應(yīng)用和自有應(yīng)用的彈性擴(kuò)展。對于通用的應(yīng)用,多集成為PaaS平臺。對于自己的應(yīng)用,通過基于腳本的Puppet, Chef, Ansible到基于容器鏡像的容器平臺CaaS。
????????? ? ?
第二:大數(shù)據(jù)包含數(shù)據(jù)的收集,數(shù)據(jù)的傳輸,數(shù)據(jù)的存儲,數(shù)據(jù)的處理和分析,數(shù)據(jù)的檢索和挖掘等幾個過程。
????????? ? ?
當(dāng)數(shù)據(jù)量很小時,很少的幾臺機(jī)器就能解決。慢慢的,當(dāng)數(shù)據(jù)量越來越大,最牛的服務(wù)器都解決不了問題時,怎么辦呢?這時就要聚合多臺機(jī)器的力量,大家齊心協(xié)力一起把這個事搞定,眾人拾柴火焰高。
?
第三:人工智能經(jīng)歷了基于專家系統(tǒng)的計劃經(jīng)濟(jì),基于統(tǒng)計的宏觀調(diào)控,基于神經(jīng)網(wǎng)絡(luò)的微觀經(jīng)濟(jì)學(xué)三個階段。
????????? ? ?
三、開源軟件是進(jìn)階的利器
?
架構(gòu)師除了要掌握大的架構(gòu)和理論之外,指導(dǎo)落地也是必備的技能,所謂既要懂設(shè)計模式,也要懂代碼。那從哪里去學(xué)習(xí)這些良好的,有借鑒意義的,可以落地的架構(gòu)實(shí)踐呢?
?
這個世界上還是有很多有情懷的大牛的,尤其是程序員里面,他們喜歡做一件什么事情呢?開源。很多軟件都是有閉源就有開源,源就是源代碼。當(dāng)某個軟件做的好,所有人都愛用,這個軟件的代碼呢,我封閉起來只有我公司知道,其他人不知道,如果其他人想用這個軟件,就要付我錢,這就叫閉源。但是世界上總有一些大??床粦T錢都讓一家賺了去。大牛們覺得,這個技術(shù)你會我也會,你能開發(fā)出來,我也能,我開發(fā)出來就是不收錢,把代碼拿出來分享給大家,全世界誰用都可以,所有的人都可以享受到好處,這個叫做開源。
?
非常建議大家了解,深入研究,甚至參與貢獻(xiàn)開源軟件,因為收益匪淺。
?
第一:通過開源軟件,我們可以了解大牛們的架構(gòu)原則,設(shè)計模式。
?
其實(shí)咱們平時的工作中,是很難碰到大牛的,他可能是你渴望而不可及的公司的員工,甚至在國外,你要想進(jìn)這種公司,不刷個幾年題目,面試個N輪是進(jìn)不去的。即便進(jìn)去了,他可能是公司的高層,每天很忙,不怎么見得到他,就算當(dāng)面討教,時間也不會很長,很難深入交流。也有的大牛會選擇自主創(chuàng)業(yè),或者是自由職業(yè)者,神龍見首不見尾,到了大公司都見不到。
?
但是感謝互聯(lián)網(wǎng)和開源社區(qū),將大牛們拉到了我們身邊,你可以訂閱郵件組,可以加入討論群,可以看到大牛們的設(shè)計,看到很多人的評論,提問,還有大牛的回答,可以看到大牛的設(shè)計也不是一蹴而就完美的,看到逐漸演進(jìn)的過程,等等。這些都是能夠幫助我們快速提升水平的地方,有的時候,拿到一篇設(shè)計,都要查資料看半天,一開始都可能好多的術(shù)語都看不懂,沒關(guān)系肯下他,當(dāng)你看blueprints越來越順暢的時候,你就進(jìn)步了。
?
第二:通過開源軟件,我們可以學(xué)習(xí)到代碼級的落地實(shí)踐。
?
有時候我們能看到很多大牛寫的書和文章,也能看到很多理論的書籍,但是存在一個問題是,理論都懂,但是還是做不好架構(gòu)。這是因為沒有看到代碼,所有的理論都是空中樓閣,當(dāng)你到了具體的代碼設(shè)計層面,那些學(xué)會的設(shè)計模式,無法轉(zhuǎn)化為你自己的實(shí)踐。
?
好在開源軟件的代碼都是公開的,凝結(jié)了大牛的心血,也能夠看到大牛在具體落地時候的取舍,一切那么真實(shí),看得見,摸得著。通過代碼進(jìn)行學(xué)習(xí),配合理論知識,更容易獲得第一手的經(jīng)驗,并且在自己做設(shè)計和寫代碼的時候,馬上能夠映射到可以參考的場景,讓我們在做自己的系統(tǒng)的時候,少走彎路。
?
第三:通過開源軟件,我們可以加入社區(qū),和其他技術(shù)人員在同一背景下共同進(jìn)步
?
大牛我們往往不容易接觸到,正面討論技術(shù)問題的時間更是難能可貴,但是沒有關(guān)系,開源軟件構(gòu)建了一個社區(qū),大家可以在一起討論,你是怎么理解的,別人是怎么理解的,越討論越交流,越明晰,有時候和比你經(jīng)驗稍微豐富一點(diǎn)的技術(shù)人員交流,可能比直接和大牛對話更加有直接作用。大牛的話可能讓你消化半天,依然不知所云,大??赡苡X得很多普通人覺得的難點(diǎn)是顯而易見的,不屑去解釋。但是社區(qū)里面的技術(shù)人員,可能和你一樣慢慢進(jìn)步過來的,知道哪些點(diǎn)是當(dāng)年自己困惑的,如果踩過這一個個的坑,他們一點(diǎn)撥,你就會豁然開朗。
?
而且每個人遇到的具體情況不同,從事的行業(yè)不同,客戶的需求不同,因而軟件設(shè)計的時候考慮的因素不同,大牛是牛,但是不一定能夠遇到和你一樣的場景,但是社區(qū)里面,有你的同行業(yè)的,背景相近的技術(shù)人員,你們可以討論出符合你們特定場景的解決方案。
?
第四:通過開源軟件,我們作為個人,比較容易找到工作
?
我們面試的時候,常常遇到的問題是,怎么能夠把在原來工作中自己的貢獻(xiàn),理解,設(shè)計,技術(shù)能力。其實(shí)我發(fā)現(xiàn)很多程序員不能很好的做的這一點(diǎn),所以造成很多人面試很吃虧。原因之一是背景信息不對稱,例如原來面臨的業(yè)務(wù)上很難的問題,面試官由于不理解背景,而且短時間解釋不清楚,而輕視候選人的水平,我也遇到過很多面試官才聽了幾分鐘,就會說,這不挺簡單的,你這樣這樣不就行了,然后徹底否定你們一個團(tuán)隊忙了三年的事情。原因之二是很多有能力的程序員不會表達(dá),導(dǎo)致真正寫代碼的說不明白,可能原來在公司里面一個績效非常好,一個績效非常差,但是到了面試官那里就拉平了。原因之三是新的公司不能確定你在上家公司做的工作,到這一家都能用的,例如你做的工作有30%是和具體業(yè)務(wù)場景相關(guān)的,70%是通用技術(shù),可能下家公司只會為你的通用技術(shù)部分買單。
?
開源軟件的好處就是,參與的人所掌握的技能都是通的,而且大家在同一個上下文里面對話,面試官和候選人之間的信息差比較少。掌握某個開源軟件有多難,不用候選人自己說,大家心里都有數(shù)。
?
對于很多技術(shù)能力強(qiáng),但是表達(dá)能力較弱的極少數(shù)人員來講,talk is cheap, show me the code,代碼呈上去,就能夠表現(xiàn)出實(shí)力來了,而且面試官也不需要根據(jù)短短的半個小時了解一個人,可以做很多背景調(diào)查。
?
另外由于掌握的技術(shù)的通用的,你到下一家公司,馬上就能夠上手,幾乎不需要預(yù)熱時間,對于雙方都有好處。
?
第五:通過開源軟件,我們作為招聘方,比較容易招到相應(yīng)人員。
?
如果在創(chuàng)業(yè)公司待過的朋友會了解到創(chuàng)業(yè)公司招人很難,人員流失很快,而且創(chuàng)業(yè)公司往往對于開發(fā)進(jìn)度要求很快,因為大家都在搶時間。因而開源軟件對于招聘方來講,也是好消息。首先創(chuàng)業(yè)公司沒辦法像大公司一樣,弄這么多的技術(shù)大牛,自己完全落地一套自己的體系,使用開源軟件快速搭建一套平臺先上線是最好的選擇。其次使用開源軟件,會使得招聘相對容易,市場上火的開源軟件會有大批的從業(yè)者,參與各種論壇和社區(qū),比較容易挖到人。最后,開源軟件的使用使得新人來了之后沒有預(yù)熱時間,來了就上手,保證開發(fā)速度。
?
那如何快速上手一款開源軟件呢?我寫了一篇文章
?
如何快速上手一款開源軟件
?
在這篇文章中,我總結(jié)了九個步驟。
?
·????? 一、手動安裝起來,一定要手動
·????? 二、使用一下,推薦XXX in Action系列
·????? 三、讀文檔,讀所有的官方文檔,記不住,看不懂也要讀下來
·????? 四、了解核心的原理和算法,推薦XXX?the definitive guide系列
·????? 五、看一本源碼分析的書,會讓你的源碼閱讀之旅事半功倍
·????? 六、開始閱讀核心邏輯源代碼
·????? 七、編譯并Debug源代碼
·????? 八、開發(fā)一個插件,或者對組件做少量的修改
·????? 九、大量的運(yùn)維實(shí)踐經(jīng)驗和面向真實(shí)場景的定制開發(fā)
?
所以做一個云架構(gòu)師,一定不能脫離代碼,反而要不斷的擁抱開源軟件。
?
四、了解Linux基礎(chǔ)知識
?
作為一個云架構(gòu)師,首要的一點(diǎn),就是要熟悉Linux的基礎(chǔ)知識,基本原理了。
說到操作系統(tǒng),一般有三個維度,一個是桌面操作系統(tǒng),一個是移動操作系統(tǒng),一個是服務(wù)器操作系統(tǒng)。
?
Stack Overflow Developer Survey 2018有這樣一個統(tǒng)計,對于開發(fā)人員來說,桌面操作系統(tǒng)的排名是Windows,MacOS,Linux,所以大部分人平時的辦公系統(tǒng)都是windows。
????????? ? ?
當(dāng)然因為辦公的原因,平時使用windows的比較多,所以在學(xué)校里,很多同學(xué)接觸到的操作系統(tǒng)基本上都是Windows,但是一旦從事計算機(jī)行業(yè),就一定要跨過Linux這道坎。
?
根據(jù)今年W3Techs的統(tǒng)計,對于服務(wù)器端,Unix-Like OS占到的比例為近70%。所謂Unix-Like OS 包括下圖的Linux,BSD等一系列。
????????? ? ?
????????? ? ?
從這個統(tǒng)計可以看出,隨著云計算的發(fā)展,軟件SaaS化,服務(wù)化,甚至微服務(wù)化,大部分的計算都是在服務(wù)端做的,因而要成為云架構(gòu)師,就必須懂Linux。
?
隨著移動互聯(lián)網(wǎng)的發(fā)展,客戶端基本上以Android和iOS為主,下圖是Gartner的統(tǒng)計。Android是基于Linux內(nèi)核的。因而客戶端也進(jìn)入了Linux陣營,很多智能終端,智能設(shè)備等開發(fā)職位,都需要懂Linux的人員。
????????? ? ?
學(xué)習(xí)Linux主要包含兩部分,一個是怎么用,一個是怎么編程,背后原理是什么。
?
對于怎么用,上手的話,推薦《鳥哥的Linux私房菜》,按著這個手冊,就能夠?qū)W會基本的Linux的使用,如果再深入一點(diǎn),推薦《Linux系統(tǒng)管理技術(shù)手冊》,磚頭厚的一本書,是Linux運(yùn)維手邊必備。
?
對于怎么編程,上手的話,推薦《UNIX環(huán)境高級編程》,有代碼,有介紹,有原理,如果對內(nèi)核的原理感興趣,推薦《深入理解LINUX內(nèi)核》。
?
Linux的架構(gòu)如下圖
????????? ? ?
我們知道,一臺物理機(jī)上有很多的硬件,最重要的是CPU,內(nèi)存,硬盤,網(wǎng)絡(luò),但是一個物理機(jī)上要跑很多的程序,這些資源應(yīng)該給誰用呢?當(dāng)然是大家輪著用,誰也別獨(dú)占,誰也別餓死。為了完成這件事情,操作系統(tǒng)的內(nèi)核就起到了大管家的作用,將硬件資源分配給不同的用戶程序使用,并且在適當(dāng)?shù)臅r間將資源拿回來,再分配給其他的用戶進(jìn)程,這個過程稱為調(diào)度。
?
操作系統(tǒng)的功能之一是系統(tǒng)調(diào)用
?
當(dāng)用戶程序想請求資源的時候,需要調(diào)用操作系統(tǒng)的系統(tǒng)調(diào)用接口,這是內(nèi)核和用戶態(tài)程序的分界線,就像你要打車,要通過打車軟件的界面,下發(fā)打車指令一樣,這樣打車軟件才會給你調(diào)度一輛車。
?
操作系統(tǒng)的功能之二是進(jìn)程管理
?
當(dāng)一個用戶進(jìn)程運(yùn)行的時候,內(nèi)核為他分配的資源,總要有一個數(shù)據(jù)結(jié)構(gòu)保存,哪些資源分配給了這個進(jìn)程。分配給這個進(jìn)程的資源往往包括打開的文件,內(nèi)存空間等。
? ? ? ??? ? ?
操作系統(tǒng)的功能之三是內(nèi)存管理
?
每個進(jìn)程有獨(dú)立的內(nèi)存空間,內(nèi)存空間是進(jìn)程用來存放數(shù)據(jù)的,就像一間一間的倉庫。為了進(jìn)程使用方便,每個進(jìn)程內(nèi)存空間,在進(jìn)程的角度來看都是獨(dú)立的,也即都是從0號倉庫,1號倉庫,一直到N號倉庫,都是獨(dú)享的。但是從操作系統(tǒng)內(nèi)核的角度來看,當(dāng)然不可能獨(dú)享,而是大家共享,M號倉庫只有一個,你用他就不能用,這就需要一個倉庫調(diào)度系統(tǒng),將用戶進(jìn)程的倉庫號和實(shí)際使用的倉庫號對應(yīng)起來,例如進(jìn)程1的10號倉庫,對應(yīng)到真實(shí)的倉庫是110號,進(jìn)程2的20號倉庫,對應(yīng)到真實(shí)的倉庫是120號。
?
操作系統(tǒng)功能之四是文件系統(tǒng)
?
對于Linux來講,很多東西都是文件,例如進(jìn)程號回對應(yīng)一個文件,建立一個網(wǎng)絡(luò)連接也對應(yīng)一個文件。文件系統(tǒng)多種多樣,為了能夠統(tǒng)一適配,有一個虛擬文件系統(tǒng)的中間層VFS。
?
操作系統(tǒng)功能之五是設(shè)備管理
?
設(shè)備分兩種,一種是塊設(shè)備,一種是字符設(shè)備,例如硬盤就是塊設(shè)備,可以格式化為文件系統(tǒng),再如鼠標(biāo)和鍵盤的輸入輸出是字符設(shè)備。
?
操作系統(tǒng)功能之六是網(wǎng)絡(luò)管理
?
其實(shí)對于Linux來講,網(wǎng)絡(luò)也是基于設(shè)備和文件系統(tǒng)的,但是由于網(wǎng)絡(luò)有自己的協(xié)議棧,要遵循TCP/IP協(xié)議棧標(biāo)準(zhǔn)。
?
? ? ? ??? ? ?
對于Linux的基礎(chǔ)知識方面,我寫了幾篇文章如下。
?
圖說Linux進(jìn)程
圖說Linux進(jìn)程之二
圖說Linux進(jìn)程之三
圖解Linux文件系統(tǒng)
圖解Linux系統(tǒng)調(diào)用
Linux的虛擬文件系統(tǒng)VFS
圖解Linux的Socket
?
五、了解數(shù)據(jù)中心和網(wǎng)絡(luò)基礎(chǔ)知識
?
云平臺當(dāng)然會部署在數(shù)據(jù)中心里面,由于數(shù)據(jù)中心里面的硬件設(shè)備也是非常專業(yè)的,因而很多地方機(jī)房部門和云計算部門是兩個部門,但是作為一個云架構(gòu)師,需要和機(jī)房部門進(jìn)行溝通,因而需要一定的數(shù)據(jù)中心知識,在數(shù)據(jù)中心里面,最難搞定的是網(wǎng)絡(luò),因而這里面網(wǎng)絡(luò)知識是重中之重。
?
下面這個圖是一個典型的數(shù)據(jù)中心圖。
????????? ? ?
最外層是Internet Edge,也叫Edge Router,也叫Border Router,它提供數(shù)據(jù)中心與Internet的連接。
?
第一層core network,包含很多的core switches
?
·????? Available Zone同Edge router之間通信
·????? Available Zone之間的通信提供
·????? 提供高可用性連接HA
·????? 提供Intrusion Prevention Services
·????? 提供Distributed Denial of Service Attack Analysis and Mitigation
·????? 提供Tier 1 Load Balancer
?
第二層也即每個AZ的最上層,我們稱為Aggregation layer。
第三層是access layer,就是一個個機(jī)架的服務(wù)器,用接入交換機(jī)連接在一起。
這是一個典型的三層網(wǎng)絡(luò)結(jié)構(gòu),也即接入層、匯聚層、核心層三層。
對于數(shù)據(jù)中心,我寫了幾篇文章
?
數(shù)據(jù)中心長啥樣?
高可用性的幾個級別
當(dāng)客戶在說要安全的時候,客戶在想什么?
?
除了數(shù)據(jù)中心以外,哪怕是做應(yīng)用架構(gòu),對于網(wǎng)絡(luò)的了解也是必須的。
云架構(gòu)說到底是分布式架構(gòu),既然是分布式,就是去中心化的,因而就需要系統(tǒng)之間通過網(wǎng)絡(luò)進(jìn)行互通,因而網(wǎng)絡(luò)是作為大規(guī)模系統(tǒng)架構(gòu)繞不過去的一個坎。
對于網(wǎng)絡(luò)的基本原理,推薦書籍《計算機(jī)網(wǎng)絡(luò)-嚴(yán)偉與潘愛民譯》,《計算機(jī)網(wǎng)絡(luò):自頂向下方法》。
對于TCP/IP協(xié)議棧的了解,推薦書籍《TCP/IP詳解》,《The TCP/IP Guide》
對于網(wǎng)絡(luò)程序設(shè)計,推薦書籍《UNIX網(wǎng)絡(luò)編程》
如果你想了解網(wǎng)絡(luò)協(xié)議棧的實(shí)現(xiàn),推薦書籍《深入理解LINUX網(wǎng)絡(luò)內(nèi)幕》
這里還自我推薦一下本人寫的極客時間專欄《趣談網(wǎng)絡(luò)協(xié)議》。
極客時間《趣談網(wǎng)絡(luò)協(xié)議》:小說一樣的網(wǎng)絡(luò)協(xié)議入門課
?
其中有個綜合場景,串起來所有的網(wǎng)絡(luò)協(xié)議。
用雙十一的故事串起碎片的網(wǎng)絡(luò)協(xié)議(下)
用雙十一的故事串起碎片的網(wǎng)絡(luò)協(xié)議(中)
用雙十一的故事串起碎片的網(wǎng)絡(luò)協(xié)議(上)
????????? ? ?
六、基于KVM了解計算虛擬化
當(dāng)物理機(jī)搭建完畢之后,接下來就是基于物理機(jī)上面搭建虛擬機(jī)了。
?
沒有了解虛擬機(jī)的同學(xué),可以在自己的筆記本電腦上用VirtualBox或者Vmware創(chuàng)建虛擬機(jī),你會發(fā)現(xiàn),很容易就能在物理機(jī)的操作系統(tǒng)之內(nèi)再安裝多個操作系統(tǒng),通過這種方式,你可以很方便的在windows辦公系統(tǒng)之內(nèi)安裝一個Linux系統(tǒng)。從而保持LInux系統(tǒng)的持續(xù)學(xué)習(xí)。
?
? ? ? ??? ? ?
前面講linux操作系統(tǒng)的時候,說到操作系統(tǒng),就是整個系統(tǒng)的管家。應(yīng)用程序要申請資源,都需要通過操作系統(tǒng)的系統(tǒng)調(diào)用接口,向操作系統(tǒng)內(nèi)核申請將CPU,內(nèi)存,網(wǎng)絡(luò),硬盤等資源分配給他。
?
這時候你會發(fā)現(xiàn),虛擬機(jī)也是物理機(jī)上的一個普通進(jìn)程,當(dāng)虛擬機(jī)內(nèi)部的應(yīng)用程序申請資源的時候,需要向虛擬機(jī)的操作系統(tǒng)請求。然而虛擬機(jī)的操作系統(tǒng)自己本身也沒有權(quán)限操作資源,因而又需要像物理機(jī)的操作系統(tǒng)申請資源。這中間要多一次翻譯的工作,完成這件事情的稱為虛擬化軟件。例如上面說的VirtualBox和Vmware都是虛擬化軟件。
?
但是多一層翻譯,就多一層性能損耗,如果虛擬機(jī)里面的每一個操作都要翻譯,都不能直接操作硬件,性能就會差很多,簡直沒辦法用,于是就出現(xiàn)了上圖中的硬件輔助虛擬化,也即通過硬件的特殊配置,例如VT-x和VT-d等,讓虛擬機(jī)里面的操作系統(tǒng)知道,他不是一個原生的操作系統(tǒng)了,是一個虛擬機(jī)的操作系統(tǒng),不能按照原來的模式操作資源了,而是通過特殊的驅(qū)動以硬件輔助的方式抄近道操作物理資源。
?
剛才說的是桌面虛擬化,也就是在你的筆記本電腦上,在數(shù)據(jù)中心里面,也可以使用Vmware進(jìn)行虛擬化,但是價格比較貴,如果規(guī)模比較大,會采取開源的虛擬化軟件qemu-kvm。
????????? ? ?
對于qemu-kvm來說,和上面的原理是一樣的,其中qemu的emu是emulator的意思,也即模擬器,就是翻譯的意思。KVM是一個可以使用CPU的硬件輔助虛擬化的方式,而網(wǎng)絡(luò)和存儲的,需要通過特殊的virtio的方式,提供高性能的設(shè)備虛擬化功能。
要了解虛擬化的基本原理,推薦書籍《系統(tǒng)虛擬化——原理與實(shí)現(xiàn)》
要了解KVM,推薦兩本書籍《KVM Virtualization Cookbook》和《Mastering KVM Virtualization》。
另外KVM和qemu的官方文檔也是必須要看的,還有Redhat的官網(wǎng)很多文章非常值得學(xué)習(xí)。
對于虛擬化方面,我寫了以下的文章。
我是虛擬機(jī)內(nèi)核我困惑?!
Qemu,KVM,Virsh傻傻的分不清
裸用KVM創(chuàng)建虛擬機(jī),體驗virtualbox為你做的10件事情
KVM虛擬機(jī)鏡像那點(diǎn)兒事,qcow2六大功能,內(nèi)部快照和外部快照有啥區(qū)別?
KVM半虛擬化設(shè)備virtio及性能調(diào)優(yōu)最佳實(shí)踐
我的虛擬機(jī)掛了!怎么把鏡像里面的數(shù)據(jù)找回來?
不僅Docker有鏡像,KVM也有多種方式操作鏡像
?
七、基于Openvswitch了解網(wǎng)絡(luò)虛擬化
?
當(dāng)虛擬機(jī)創(chuàng)建出來了,最主要的訴求就是要能上網(wǎng),他能訪問到網(wǎng)上的資源,如果虛擬機(jī)里面部署一個網(wǎng)站,也希望別人能夠訪問到他。
這一方面依賴于qemu-KVM的網(wǎng)絡(luò)虛擬化,將網(wǎng)絡(luò)包從虛擬機(jī)里面?zhèn)鞑サ教摂M機(jī)外面,這需要物理機(jī)內(nèi)核轉(zhuǎn)換一把,形成虛擬機(jī)內(nèi)部的網(wǎng)卡和虛擬機(jī)外部的虛擬網(wǎng)卡。
?
另外一方面就是虛擬機(jī)的網(wǎng)絡(luò)如何能夠連接到物理網(wǎng)絡(luò)里面。物理網(wǎng)絡(luò)常常稱為underlay network,虛擬網(wǎng)絡(luò)常常稱為overlay network,從物理網(wǎng)絡(luò)到虛擬網(wǎng)絡(luò)稱為網(wǎng)絡(luò)虛擬化,能非常好的完成這件事情的是一個叫Openvswitch的虛擬交換機(jī)軟件。
????????? ? ?
Openvswitch會有一個內(nèi)核驅(qū)動,監(jiān)聽物理網(wǎng)卡,可以將物理網(wǎng)卡上收到的包拿進(jìn)來。虛擬機(jī)創(chuàng)建出來的外部的虛擬網(wǎng)卡也可以添加到Openvswitch上,而Openvswitch可以設(shè)定各種的網(wǎng)絡(luò)包處理策略,將網(wǎng)絡(luò)包在虛擬機(jī)和物理機(jī)之間進(jìn)行傳遞,從而實(shí)現(xiàn)了網(wǎng)絡(luò)虛擬化。
????? ????? ?
對于Openvswitch,我主要是通過官方文檔進(jìn)行研究,寫下了這個系列。
?
Openvswitch的入門篇
通俗說Openvswitch
?
Openvswitch的操作篇
玩轉(zhuǎn)Openvwitch第一站:Manager和SSL
玩轉(zhuǎn)Openvwitch第二站:Bridge和Controller
玩轉(zhuǎn)Openvwitch第四站:Bridge和Mirror
玩轉(zhuǎn)Openvwitch第五站:Port和VLAN
玩轉(zhuǎn)Openvwitch第六站:Port和Bond
玩轉(zhuǎn)Openvwitch第七站:Port和QoS
玩轉(zhuǎn)Openvswitch第八站:Interface和Tunnel (下)
玩轉(zhuǎn)Openvswitch第八站:Interface和Tunnel (上)
玩轉(zhuǎn)Openvswitch第十站:Flow Table
玩轉(zhuǎn)Openvswitch之綜合篇
?
Openvswitch的代碼分析篇
Openvswitch總體架構(gòu)與代碼結(jié)構(gòu)
從Openvswitch代碼看網(wǎng)絡(luò)包的旅程
相關(guān)閱讀:云架構(gòu)師進(jìn)階攻略(2)
云架構(gòu)師進(jìn)階攻略(3)
?
網(wǎng)易云計算基礎(chǔ)服務(wù)深度整合了 IaaS、PaaS 及容器技術(shù),提供彈性計算、DevOps 工具鏈及微服務(wù)基礎(chǔ)設(shè)施等服務(wù),幫助企業(yè)解決 IT、架構(gòu)及運(yùn)維等問題,使企業(yè)更聚焦于業(yè)務(wù),是新一代的云計算平臺,點(diǎn)擊可免費(fèi)試用。
相關(guān)文章:
【推薦】?從瀏覽器或者Webview 中喚醒APP
總結(jié)
以上是生活随笔為你收集整理的云架构师进阶攻略(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【5G核心网】 free5gc Hand
- 下一篇: linux smb nfs iscsi,