「Cloud Native Infrastructure」讀書(shū)筆記

這是假期讀的第二本書(shū)插掂,以下是對(duì)本書(shū)的閱讀的內(nèi)容的一些總結(jié):

就 Cloud native 這個(gè)詞來(lái)說(shuō)贝咙,已經(jīng)被市場(chǎng)人員到處在用了,就跟 Microservice 一樣,很難清晰地去定義到底什么是 Cloud native疏咐。在本書(shū)中,作者提到的 Cloud native 其實(shí)包含了兩個(gè)部分的內(nèi)容偿荷,一個(gè)是 Cloud native 的基礎(chǔ)設(shè)施(Cloud native infrastructure)檐春,另一個(gè)是 Cloud native 的應(yīng)用(Cloud native application)。作者對(duì)于 Cloud native infrastructure 的定義是:

Cloud native infrastructure is infrastructure that is hidden behind useful abstractions, controlled by APIs, managed by software, and has the purpose of running applications. Running infrastructure with these traits gives rise to a new pattern for managing that infrastructure in a scalable, efficient way.

所謂的 Cloud native 的基礎(chǔ)設(shè)施就是當(dāng)我們的基礎(chǔ)設(shè)施(大量的 VM/Docker肥惭,復(fù)雜的網(wǎng)絡(luò)盯仪,各種各樣的儲(chǔ)存等等)變的非常復(fù)雜和龐大的時(shí)候,通過(guò)人力是無(wú)法高效地進(jìn)行運(yùn)維的务豺,在這樣的大規(guī)模下磨总,我們應(yīng)該盡量地去避免人工介入,而是需要有一套軟件來(lái)幫助我們更好地去管理我們的基礎(chǔ)設(shè)施笼沥,可以讓運(yùn)行在這套基礎(chǔ)設(shè)施上 Cloud native 的應(yīng)用可以非常方便地被運(yùn)維蚪燕,部署,監(jiān)控等等奔浅。那么怎么去設(shè)計(jì)管理 Cloud native 的基礎(chǔ)設(shè)施的系統(tǒng)呢馆纳,作者提到了幾個(gè)點(diǎn),其中包括系統(tǒng)的自舉汹桦,API 的設(shè)計(jì)等等鲁驶,但是我覺(jué)得其中最重要的一點(diǎn)是 Reconciler Pattern,關(guān)于這個(gè) Pattern舞骆,書(shū)中提到了四個(gè)原則:

  • Use a data structure for all inputs and outputs.
  • Ensure that the data structure is immutable.
  • Keep the resource map simple.
  • Make the actual state match the expected state.

其中最后一點(diǎn)和 Reconciler Pattern 的關(guān)系最大钥弯,這個(gè)也是 Kubernetes 中的方式,我們往 Kubernetes 中去提交一個(gè) Spec督禽,比如要求一個(gè)應(yīng)用的實(shí)例的數(shù)量應(yīng)該是 4脆霎,那么 Kubernetes 就會(huì)盡可能地去保證這個(gè)應(yīng)用的實(shí)例的數(shù)量是 4,如果一個(gè)實(shí)例 Crash 了狈惫,它就馬上新起一個(gè)實(shí)例睛蛛。這就是所謂的 Reconciler Pattern,盡量讓實(shí)際的狀態(tài)可以和期望的狀態(tài)匹配上。

Reconciler Pattern 在設(shè)計(jì)上非常大的一個(gè)優(yōu)勢(shì)就是它是聲明式的忆肾,而不是反應(yīng)式的荸频。用戶(hù)要做的是按照系統(tǒng)提供出的 API,直接告訴系統(tǒng)你想要什么客冈,比如說(shuō)旭从,我想要一個(gè)應(yīng)用的實(shí)例的數(shù)量保持在 4 個(gè),系統(tǒng)就去考慮各種情況郊酒,讓你的應(yīng)用的數(shù)量保持在 4 個(gè)遇绞。而反應(yīng)式的話(huà),則是監(jiān)聽(tīng)系統(tǒng)的事件燎窘,比如你的應(yīng)用的某個(gè)實(shí)例 Crash 了摹闽,然后你監(jiān)聽(tīng)到了這個(gè)事件之后,就調(diào)用系統(tǒng)的 API 去新創(chuàng)建一個(gè)實(shí)例褐健。顯然付鹿,對(duì)于用戶(hù)來(lái)說(shuō),聲明式的方式要簡(jiǎn)單地很多蚜迅,不容易出錯(cuò)舵匾。而反應(yīng)式則要求每一個(gè)應(yīng)用都去監(jiān)聽(tīng)系統(tǒng)的事件,不但侵入到了應(yīng)用谁不,也很容易出錯(cuò)坐梯。

在上面的 Reconciler Pattern 的四個(gè)原則中,第二點(diǎn)讓數(shù)據(jù)結(jié)構(gòu)是不可變的這一點(diǎn)也是非常重要的刹帕,但是我不是很明白這個(gè)點(diǎn)和 Reconciler Pattern 具體的關(guān)系在哪里吵血?這個(gè)原則是說(shuō)如果我們要修改一個(gè)數(shù)據(jù)結(jié)構(gòu),我們實(shí)際上不是修改它偷溺,而是新建一個(gè)新的蹋辅,然后把原來(lái)的標(biāo)記成過(guò)期,這樣的好處是挫掏,我們可以保留數(shù)據(jù)結(jié)構(gòu)中間的各種版本侦另,當(dāng)需要看下當(dāng)前的 Infra 有哪些區(qū)別的,就可以把這些版本直接拿出來(lái)對(duì)比尉共,非常方便地就可以回答線(xiàn)上環(huán)境到底發(fā)生了什么樣的變更褒傅。

有了 Cloud native 的基礎(chǔ)設(shè)施,我們還要有 Cloud native 的應(yīng)用運(yùn)行在上面袄友,那么作為基礎(chǔ)設(shè)施樊卓,我們還應(yīng)該給應(yīng)用到底提供什么樣的能力呢,書(shū)中提到了八點(diǎn):

  • Runtime and isolation(這里的 isolation 是指資源的 isolation杠河,比如 CPU,Memory,Storage 等等)
  • Resource allocation and scheduling
  • Environment isolation(這里的 isolation 指的是環(huán)境的 isolation券敌,比如 dev唾戚,test,staging待诅,product)
  • Service discovery
  • State management(Readiness, Liveness)
  • Monitoring and logging
  • Metrics aggregation
  • Debugging and tracing

我們可以看到叹坦,上面的八個(gè)點(diǎn)中其實(shí)下面非常多的都是原來(lái)傳統(tǒng)的中間件在干的一些事情,而在 Cloud native 的基礎(chǔ)設(shè)施中卑雁,這些中間件正在往下沉募书,直接成為基礎(chǔ)設(shè)施的一部分,為應(yīng)用提供能力测蹲。而且在 CNCF 中莹捡,上面的八個(gè)點(diǎn)基本上都有一個(gè)對(duì)應(yīng)的產(chǎn)品對(duì)應(yīng):

  • Runtime and isolation: containers, rkt
  • Resource allocation and scheduling: kubernetes
  • Environment isolation: kubernetes
  • Service discovery: kubernetes
  • State management: kubernetes
  • Monitoring and logging: Prometheus, Fluentd
  • Metrics aggregation: Prometheus
  • Debugging and tracing: OpenTracing, Jaeger

除了上面的八個(gè)點(diǎn)之外,我個(gè)人認(rèn)為應(yīng)該還加上一個(gè)點(diǎn)扣甲,就是 Network Resilient篮赢,這可以極大程度地解決應(yīng)用之間的網(wǎng)絡(luò)通信的問(wèn)題,這個(gè)正是 Service Mesh 所提供的能力琉挖,在 CNCF 里面對(duì)應(yīng)的產(chǎn)品是 Envoy(奇怪 istio 怎么還沒(méi)有進(jìn)入 CNCF)启泣。

總結(jié)來(lái)說(shuō),本書(shū)的作者基本上把設(shè)計(jì)一個(gè) Cloud native infrastructure 所需要做的事情都講了一遍示辈,包括上面沒(méi)有提到的測(cè)試等等寥茫,大部分的內(nèi)容其實(shí)就是 Kubernetes 目前已經(jīng)做到的一些事情,如果你對(duì) Kubernetes 的設(shè)計(jì)已經(jīng)非常清楚了矾麻,那么這本書(shū)對(duì)你的價(jià)值可能不大纱耻,如果對(duì) Kubernetes 的設(shè)計(jì)并不熟悉,那么相信你可以從這本書(shū)里面學(xué)到不少東西射富。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膝迎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子胰耗,更是在濱河造成了極大的恐慌限次,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柴灯,死亡現(xiàn)場(chǎng)離奇詭異卖漫,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)赠群,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)羊始,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人查描,你說(shuō)我怎么就攤上這事突委“芈保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵匀油,是天一觀(guān)的道長(zhǎng)缘缚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)敌蚜,這世上最難降的妖魔是什么桥滨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮弛车,結(jié)果婚禮上齐媒,老公的妹妹穿的比我還像新娘。我一直安慰自己纷跛,他們只是感情好喻括,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著忽舟,像睡著了一般双妨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上叮阅,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天刁品,我揣著相機(jī)與錄音,去河邊找鬼浩姥。 笑死挑随,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勒叠。 我是一名探鬼主播兜挨,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼眯分!你這毒婦竟也來(lái)了拌汇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤弊决,失蹤者是張志新(化名)和其女友劉穎噪舀,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體飘诗,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡与倡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昆稿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺座。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溉潭,靈堂內(nèi)的尸體忽然破棺而出净响,到底是詐尸還是另有隱情少欺,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布馋贤,位于F島的核電站狈茉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掸掸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一蹭秋、第九天 我趴在偏房一處隱蔽的房頂上張望扰付。 院中可真熱鬧,春花似錦仁讨、人聲如沸羽莺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)盐固。三九已至,卻和暖如春丈挟,著一層夾襖步出監(jiān)牢的瞬間刁卜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工曙咽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蛔趴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓例朱,卻偏偏與公主長(zhǎng)得像孝情,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子洒嗤,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理箫荡,服務(wù)發(fā)現(xiàn),斷路器渔隶,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,522評(píng)論 25 707
  • 心事入瑤琴羔挡, 無(wú)人會(huì)弦音。 孤標(biāo)難自棄派撕, 對(duì)影獨(dú)沉吟婉弹。
    竹心夢(mèng)話(huà)閱讀 78評(píng)論 0 0
  • 周六的即興舞蹈課上镀赌,老師和一位同學(xué)互動(dòng),結(jié)束后問(wèn)我們他們之間后來(lái)進(jìn)行不下去的問(wèn)題在哪里际跪,我們沒(méi)看出來(lái)商佛,他說(shuō)因?yàn)槟俏?..
    涵予張閱讀 269評(píng)論 2 3
  • 上周出去聽(tīng)課喉钢,結(jié)果手機(jī)內(nèi)存不夠,還是請(qǐng)別人幫忙錄的像良姆〕λ洌回來(lái)就想,我要買(mǎi)個(gè)手機(jī)u盤(pán)玛追,這樣相當(dāng)于多了一個(gè)擴(kuò)容的大內(nèi)存呢...
    金明啊閱讀 114評(píng)論 0 0