云原生时代, 选择.NET Core
在容器、Kubernetes、DevOps,以及微服務等技術的推動下,2020年云原生勢不可擋。?.NET Core 也非常契合 云原生對應用運行時的不同需求,.NET Core和kubernetes 同年誕生發(fā)展, 2018年kubernetes 已經(jīng)奠定了在容器編排領域的王者地位,2019年越來越多的企業(yè)選擇基于云原生的技術或管理方法,把業(yè)務生于云或遷移到云平臺,從而享受云的高效和持續(xù)的服務能力。幾年前火熱的Spring Cloud面臨Kubernetes的革命,如今.NET Core在云原生方面完成的蛻變:
體積更小:對于微服務分布式架構而言,更小的體積意味著更少的下載帶寬,更快的分發(fā)下載速度,.NET Core 的鏡像體積都很小,alpine的鏡像更小,帶上應用程序通常80M。
啟動速度更快:對于傳統(tǒng)單體應用,啟動速度與運行效率相比不是一個關鍵的指標。原因是,這些應用重啟和發(fā)布頻率相對較低。然而對于需要快速迭代、水平擴展的微服務應用而言,更快的的啟動速度就意味著更高的交付效率,和更加快速的回滾。尤其當你需要發(fā)布一個有數(shù)百個副本的應用時,緩慢的啟動速度就是時間殺手。對于Serverless 應用而言,端到端的冷啟動速度則更為關鍵,即使底層容器技術可以實現(xiàn)百毫秒資源就緒,如果應用無法在 500ms 內(nèi)完成啟動,用戶就會感知到訪問延遲。這里我拿AWS Lambda來舉例,因為各大云廠商都是以AWS是模仿的目標,AWS Lambda中可用的所有語言都是高級的,而不是像Assembler,C / C ++或Objective C那樣。從腳本語言到JavaScript和Python,再到像Java和C#到Go這樣被編譯為二進制文件的托管運行時的語言,所有語言都是他們有自己的長處。在基準測試中,最重要的.NET Core是 冠軍,具體參看https://react-etc.net/entry/aws-lambda-benchmarks-node-js-python-java-c-go-dotnet-core
占用資源更少:運行時更低的資源占用,意味著更高的部署密度和更低的計算成本。.NET Core的 CLR啟動速度非常快,降低啟動時資源消耗,可以減少資源爭搶,更好保障其他應用 SLA。
支持水平擴展:.NET Core 默認更好的支持Docker資源限制,官方團隊也在努力讓.NET Core成為真正的容器運行時,使其在低內(nèi)存環(huán)境中具有容器感知功能并高效運行。隨著內(nèi)存成本的下降和虛擬化的流行,大內(nèi)存配比已經(jīng)成為趨勢。所以我們一般是采用水平擴展的方式,同時部署多個應用副本,在一個計算節(jié)點中可能運行一個應用的多個副本來提升資源利用率。
上面說了.NET Core在云原生方面所完成的蛻變,很多人可能會以Java生態(tài)豐富來說明Java的種種優(yōu)勢,所以這里我想一起來看看十年前李彥宏、馬化騰和馬云對云計算的評價:
站在現(xiàn)在的位置往回看,七年前李彥宏、馬化騰的觀點確實是挺幼稚的。一個犯了商業(yè)判斷上的錯誤,認為用公有云(雖然這個會上談的是云計算,但指的是AWS、阿里云這樣的公有云)方式賺點錢會比較累,商業(yè)價值不大;一個犯了技術判斷上的錯誤, 認為要大規(guī)模地,像水和電那樣提供計算資源,技術上要做到?jīng)]這么快,需要時間。?但是公有云此后的高速發(fā)展,即證明了自身的巨大的商業(yè)價值,也證明了現(xiàn)有技術的能力和潛力。
經(jīng)過8年的發(fā)展,公有云已經(jīng)不僅僅像李彥宏說的,支撐一些互聯(lián)網(wǎng)應用這么簡單,而是巨大的,充滿希望和想象的平臺。現(xiàn)在我們所說的云原生已經(jīng)不局限于AWS,阿里云,騰訊云這樣的公有云,也不是僅僅局限于私有云,而是我們在開始設計應用的時候就考慮到應用將來是運行在云環(huán)境里面的,要充分利用云資源的優(yōu)點。但從不同的角度,你能夠看到這個平臺不一樣的威力。
馬化騰說云計算難做, 短期內(nèi)很難做好的觀點,雖說太悲觀, 但也是說出了廣大后臺程序猿的心聲。?從個人研發(fā)的經(jīng)歷而言, 我們有兩種完全不一樣的開發(fā),一種是單機軟件的開發(fā),另一種是分布式后臺開發(fā)。單機軟件開發(fā), 更多的是專注于業(yè)務本身, 計算和存儲資源的獲取很輕松地搞定、模塊間通信無比簡潔美好根本不用操什么心,見過大量的.NET程序員開發(fā)的都是這種單機軟件開發(fā),他們的系統(tǒng)做個集群都難;而分布式后臺開發(fā),在計算資源、存儲資源或業(yè)務邏輯單元在做了 “分” 這個操作后, 就變得無比揪心,你會發(fā)現(xiàn)做后臺的業(yè)務簡單,但做一個穩(wěn)定高性能的架構難,做一個能夠扛住海量用戶和請求,還能夠動態(tài)生長以應對業(yè)務變化需求的后臺更是難上加難。
海量后臺服務研發(fā)方法論方面在這個世界上也有騰訊海量服務之道和Google 的另一套后臺哲學:
騰訊對后臺開發(fā)的理解是這樣的:放棄建立一個統(tǒng)一模型,按照這個模型去套各種業(yè)務,就能夠為業(yè)務建立一個完善的架構,而且這個架構能夠適應業(yè)務后續(xù)的發(fā)展。?而是用動態(tài)生長的眼光,以小步快跑的方式,用柔性的手段去處理和和各種分布式問題周旋,最終成功支撐業(yè)務向前發(fā)展。
Google的另一套后臺哲學:根據(jù)自身業(yè)務抽象出幾大基礎后臺系統(tǒng)(比如GFS、BigTable、Spanner、Borg、Tensorflow 等), 支撐業(yè)務的開發(fā),從而業(yè)務可以專注于自身邏輯, 不需要關注底層分布式細節(jié),這個對技術人要求就非常高,微軟也是這樣的一個套路。由于我沒有在Google呆過,對Google不太了解,只能從Google 在10幾年的引領技術潮流的技術做個概括。這里說說kubernetes吧,早在2003年google 就在運行容器,當時的容器調(diào)度系統(tǒng)叫做Borg,到后面的Omega,向Linux內(nèi)核貢獻 CGroup【CGroup全稱Linux Control Group, 是Linux內(nèi)核的一個功能,用來限制,控制與分離一個進程組群的資源(如CPU、內(nèi)存、磁盤輸入輸出等)。這個項目最早是由Google的工程師在2006年發(fā)起(主要是Paul Menage和Rohit Seth),最早的名稱為進程容器(process containers)。在2007年時,因為在Linux內(nèi)核中,容器(container)這個名詞太過廣泛,為避免混亂,被重命名為cgroup,并且被合并到2.6.24版的內(nèi)核中】,2014年開源kubernetes項目,這十多年來google一直在容器中運行所有產(chǎn)品。具體參見《Borg、Omega和Kubernetes:谷歌十幾年來從這三個容器管理系統(tǒng)中得到的經(jīng)驗教訓》
?
這兩套方法論,目標相同,但是思路相反。個人認為, 能夠解決問題,幫助業(yè)務往前走的發(fā)展都是好方法,除此之外, 并沒有一個標準能夠用來評判哪個好哪個不好。?兩種典型的后臺價值觀,分別支撐起排名前幾的兩家互聯(lián)網(wǎng)公司,就足以說明其成功之處。但是從中我們可以看出, 做后臺特別是海量服務的后臺之難。?由此不難理解馬化騰所說, 需要等到阿凡達的時代,像水和電一樣的云計算才能夠實現(xiàn)。
時代的潮流滾滾向前,我現(xiàn)在來到了云原生時代,在容器化的世界里,Kubernetes是環(huán)境的管理和部署引擎。使用Kubernetes的最基本功能,用戶就可以輕松地在物理硬件或者虛擬機上調(diào)度并且運行應用程序。Kubernetes的更多高級用法讓開發(fā)人員可以徹底擺脫主機為中心的世界,而進入容器為中心的環(huán)境里。
應用程序是如今大多數(shù)業(yè)務的生命線。公司需要快速的部署和高質量的應用程序。這些需求正是開發(fā)人員轉向容器的原因。隨著容器的發(fā)展,Kubernetes平臺有很多的可能性,但是規(guī)模大了的話它也很難管理。云原生時代一定要擁抱,這是云原生時代給予.NET Core的機會,我希望大家能夠抓住。
說到這里,這里特別要和你分享一件事情是2018年的11月我有幸參觀訪問了肖偉宇所在的公司校寶在線,當時我也是剛從騰訊離職從事.NET Core的咨詢服務工作,當時他們正是在進行.NET向.NET Core遷移的關鍵時期,他們同時處在阿里巴巴大本營的杭州(在最近我做的一個調(diào)查中很多杭州兄弟都提到了這一點),而且當時阿里巴巴已經(jīng)投資了校寶在線,坊間一直流傳著這么一個梗:被阿里巴巴投資的公司都轉向了Java,可想而知,校寶在線作為杭州地區(qū)最大的一家.NET技術公司 的兄弟們面臨多大的壓力,在經(jīng)過了一年多時間的探索,肖偉宇作為校寶在線的架構師帶領.NET兄弟成功走向.NET Core云原生的道路,這是非常值得分享的一件事情,而且難能可貴的是肖偉宇把這個探索道路上的艱難險阻總結提煉成這樣一門視頻課程。這里我非常推薦大家購買肖偉宇結合自己的經(jīng)驗精心提煉的視頻課程。
【新書推薦】《ASP.NET Core微服務實戰(zhàn):在云環(huán)境中開發(fā)、測試和部署跨平臺服務》 帶你走近微服務開發(fā)
總結
以上是生活随笔為你收集整理的云原生时代, 选择.NET Core的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解惑小微企业信息化系统上云的顾虑
- 下一篇: WebApi管理和性能测试工具WebAp