在容器、Kubernetes、DevOps,以及微服務(wù)等技術(shù)的推動下,2020年云原生勢不可擋。 .NET Core 也非常契合 云原生對應(yīng)用運(yùn)行時的不同需求,.NET Core和kubernetes 同年誕生發(fā)展, 2018年kubernetes 已經(jīng)奠定了在容器編排領(lǐng)域的王者地位,2019年越來越多的企業(yè)選擇基于云原生的技術(shù)或管理方法,把業(yè)務(wù)生于云或遷移到云平臺,從而享受云的高效和持續(xù)的服務(wù)能力。幾年前火熱的Spring Cloud面臨Kubernetes的革命,如今.NET Core在云原生方面完成的蛻變:
體積更?。簩τ谖⒎?wù)分布式架構(gòu)而言,更小的體積意味著更少的下載帶寬,更快的分發(fā)下載速度,.NET Core 的鏡像體積都很小,alpine的鏡像更小,帶上應(yīng)用程序通常80M。
啟動速度更快:對于傳統(tǒng)單體應(yīng)用,啟動速度與運(yùn)行效率相比不是一個關(guān)鍵的指標(biāo)。原因是,這些應(yīng)用重啟和發(fā)布頻率相對較低。然而對于需要快速迭代、水平擴(kuò)展的微服務(wù)應(yīng)用而言,更快的的啟動速度就意味著更高的交付效率,和更加快速的回滾。尤其當(dāng)你需要發(fā)布一個有數(shù)百個副本的應(yīng)用時,緩慢的啟動速度就是時間殺手。對于Serverless 應(yīng)用而言,端到端的冷啟動速度則更為關(guān)鍵,即使底層容器技術(shù)可以實(shí)現(xiàn)百毫秒資源就緒,如果應(yīng)用無法在 500ms 內(nèi)完成啟動,用戶就會感知到訪問延遲。這里我拿AWS Lambda來舉例,因為各大云廠商都是以AWS是模仿的目標(biāo),AWS Lambda中可用的所有語言都是高級的,而不是像Assembler,C / C ++或Objective C那樣。從腳本語言到JavaScript和Python,再到像Java和C#到Go這樣被編譯為二進(jìn)制文件的托管運(yùn)行時的語言,所有語言都是他們有自己的長處。
占用資源更少:運(yùn)行時更低的資源占用,意味著更高的部署密度和更低的計算成本。.NET Core的 CLR啟動速度非??欤档蛦訒r資源消耗,可以減少資源爭搶,更好保障其他應(yīng)用 SLA。
支持水平擴(kuò)展:.NET Core 默認(rèn)更好的支持Docker資源限制,官方團(tuán)隊也在努力讓.NET Core成為真正的容器運(yùn)行時,使其在低內(nèi)存環(huán)境中具有容器感知功能并高效運(yùn)行。隨著內(nèi)存成本的下降和虛擬化的流行,大內(nèi)存配比已經(jīng)成為趨勢。所以我們一般是采用水平擴(kuò)展的方式,同時部署多個應(yīng)用副本,在一個計算節(jié)點(diǎn)中可能運(yùn)行一個應(yīng)用的多個副本來提升資源利用率。