云原生才是「吞噬世界」的那條大魚(yú)...
過(guò)去的一整年里,云原生(Cloud Native)無(wú)疑是云計(jì)算領(lǐng)域最熱的熱點(diǎn)。但一年過(guò)去了,到現(xiàn)在位置仍然很少有人能說(shuō)清到底什么是云原生,網(wǎng)上的科普也都是寫(xiě)的云里霧里,看完仍然是似懂非懂...
這期的「SFKP • 計(jì)算機(jī)百科」,我們就來(lái)嘗試著理清云原生的概念、特性以及應(yīng)用場(chǎng)景,幫助你得出心中「云原生」的定義。
云原生的概念
名詞解析:云原生 Cloud Native
Cloud Native 翻譯為云原生,是 Matt Stine 提出的一個(gè)概念,它是一個(gè)思想的集合,包括 DevOps、持續(xù)交付、微服務(wù)、敏捷基礎(chǔ)設(shè)施、康威定律等,以及根據(jù)商業(yè)能力對(duì)公司進(jìn)行重組。Cloud Native既包含技術(shù)也包含管理,可以說(shuō)是一系列Cloud技術(shù)、企業(yè)管理方法的集合。(Via.百度百科)
「云原生」這個(gè)詞其實(shí)也不是沒(méi)爹沒(méi)娘的孩子,最早由 Pivotal(一家位于美國(guó)加州的計(jì)算機(jī)軟件公司)在 2013 年提出。2015 年,這家公司的 Matt Stine 在《遷移到云原生架構(gòu)》一書(shū)中定義了符合云原生架構(gòu)的幾個(gè)特征:12 因素、微服務(wù)、自敏捷架構(gòu)、基于 API 協(xié)作、扛脆弱性;
到了 2017 年,Matt Stine 在接受媒體采訪的時(shí)候又將云原生架構(gòu)歸納為模塊化、可觀察、可部署、可測(cè)試、可替換、可處理這六項(xiàng)特質(zhì);
而 Pivotal 最新官網(wǎng)對(duì)云原生概括為4個(gè)要點(diǎn):DevOps+持續(xù)交付+微服務(wù)+容器。
2015 年,云原生計(jì)算基金會(huì)(CNCF)成立,他們最初把云原生定義為:容器化封裝 + 自動(dòng)化管理 + 面向微服務(wù);
到了2018年,CNCF又更新了云原生的定義,把服務(wù)網(wǎng)格(Service Mesh)和聲明式 API 給加了進(jìn)來(lái),變成了現(xiàn)在的版本:不可變基礎(chǔ)設(shè)施、容器、服務(wù)網(wǎng)格、微服務(wù)、聲明式 API。
可見(jiàn),云原生的概念確實(shí)是在不斷變化的,并且哪怕都是權(quán)威機(jī)構(gòu),對(duì)于云原生的概念和定義也是有所區(qū)別的。
但這些其實(shí)并不重要,因素在不斷變化,根本原因是實(shí)現(xiàn)云原生的方式在不斷變化。上面提到的這些因素都是實(shí)現(xiàn)云原生的方式,但有了他們也未必就一定是云原生,沒(méi)有他們不一定就不能實(shí)現(xiàn)云原生。
又但是,既然我們?cè)谟懻撌裁词窃圃蔷椭荒芑诂F(xiàn)階段的發(fā)展情況來(lái)分析。綜合各權(quán)威機(jī)構(gòu)和組織的說(shuō)法,微服務(wù)、容器、DevOps 和持續(xù)交付這四個(gè)因素是必不可少的,我們今天就著重分析一下這四項(xiàng):
1. 微服務(wù)
微服務(wù) (Microservices) 是一種軟件架構(gòu)風(fēng)格,它是以專(zhuān)注于單一責(zé)任與功能的小型功能區(qū)塊 為基礎(chǔ),利用模塊化的方式組合出復(fù)雜的大型應(yīng)用程序,各功能區(qū)塊使用與語(yǔ)言無(wú)關(guān)的 API 集相互通信。
幾乎每個(gè)云原生的定義都包含微服務(wù),微服務(wù)的核心方法是切割,從而解決我們軟件開(kāi)發(fā)中一直追求的低耦合 + 高內(nèi)聚的問(wèn)題,也讓未來(lái)的系統(tǒng)變更具有彈性。
2. 容器
容器化為微服務(wù)提供實(shí)施保障,起到應(yīng)用隔離作用。優(yōu)勢(shì)是每個(gè)服務(wù)都被無(wú)差別地封裝在容器里,可以被無(wú)差別地管理和維護(hù)。現(xiàn)在比較流行的工具是 Docker 和 Kubernetes。
Docker 是一個(gè)開(kāi)源項(xiàng)目,讓?xiě)?yīng)用程序部署在軟件貨柜下的工作可以自動(dòng)化進(jìn)行,借此在 Linux 操作系統(tǒng)上,提供一個(gè)額外的軟件抽象層,以及操作系統(tǒng)層虛擬化的自動(dòng)管理機(jī)制。Docker 也是目前應(yīng)用最為廣泛的容器引擎,在思科谷歌等公司的基礎(chǔ)設(shè)施中大量使用。
而 Kubernetes 是由谷歌建立的,它是一個(gè)允許自動(dòng)化部署、管理和伸縮容器的工具,并且提供了一些強(qiáng)大的功能,例如容器之間的負(fù)載均衡,重啟失敗的容器以及編排容器使用的存儲(chǔ)。
容器為云原生應(yīng)用程序增加了更多優(yōu)勢(shì)。使用容器可以將微服務(wù)及其所需的所有配置、依賴(lài)關(guān)系和環(huán)境變量移動(dòng)到全新的服務(wù)器節(jié)點(diǎn)上,而無(wú)需重新配置環(huán)境,這樣就實(shí)現(xiàn)了強(qiáng)大的可移植性。
3. DevOps
DevOps (Development 和 Operations 的組合詞) 是一種重視軟件開(kāi)發(fā)人員和 IT 運(yùn)維技術(shù)人員之間溝通合作的文化、運(yùn)動(dòng)或慣例。透過(guò)自動(dòng)化「軟件交付」和「架構(gòu)變更」的流程,來(lái)使得構(gòu)建、測(cè)試、發(fā)布軟件能夠更加地快捷、頻繁和可靠。
DevOps 的出現(xiàn)是由于軟件行業(yè)日益清晰地認(rèn)識(shí)到,為了按時(shí)交付軟件產(chǎn)品和服務(wù),開(kāi)發(fā)部門(mén)和運(yùn)維部門(mén)必須緊密合作。
當(dāng)企業(yè)或者項(xiàng)目有良好的溝通效率,才可以有更大的生產(chǎn)力。DevOps 的引入能對(duì)產(chǎn)品交付、測(cè)試、功能開(kāi)發(fā)和維護(hù)(包括──曾經(jīng)罕見(jiàn)但如今已屢見(jiàn)不鮮的──“熱補(bǔ)丁”)起到意義深遠(yuǎn)的影響。
4. 持續(xù)交付
持續(xù)交付(英語(yǔ):Continuous delivery,縮寫(xiě)為 CD),是一種軟件工程手法,讓軟件產(chǎn)品的產(chǎn)出過(guò)程在一個(gè)短周期內(nèi)完成,以保證軟件可以穩(wěn)定、持續(xù)的保持在隨時(shí)可以釋出的狀況。它的目標(biāo)在于讓軟件的建置、測(cè)試與釋出變得更快以及更頻繁。這種方式可以減少軟件開(kāi)發(fā)的成本與時(shí)間,減少風(fēng)險(xiǎn)。
持續(xù)交付的常見(jiàn)體現(xiàn)就是在不影響用戶(hù)使用服務(wù)的前提下,頻繁把新功能發(fā)布給用戶(hù)使用。
要做到這點(diǎn)非常非常難,一般的要求是做到不誤時(shí)開(kāi)發(fā)、不停機(jī)更新,這就要求開(kāi)發(fā)版本和穩(wěn)定版本并存,需要很多流程和工具支撐。
有時(shí)候,持續(xù)交付也與持續(xù)部署混淆。持續(xù)部署意味著所有的變更都會(huì)被自動(dòng)部署到生產(chǎn)環(huán)境中。持續(xù)交付意味著所有的變更都可以被部署到生產(chǎn)環(huán)境中,但是出于業(yè)務(wù)考慮,可以選擇不部署。
如果要實(shí)施持續(xù)部署,必須先實(shí)施持續(xù)交付。
云原生和本地部署的區(qū)別
了解了云原生的概念,我們?cè)賮?lái)看看云原生和本地部署的區(qū)別。
真正的云化不僅僅是基礎(chǔ)設(shè)施和平臺(tái)的變化,應(yīng)用也需要做出改變,在架構(gòu)設(shè)計(jì)、開(kāi)發(fā)方式、部署維護(hù)等各個(gè)階段和方面都基于云的特點(diǎn),重新設(shè)計(jì),從而建設(shè)全新的云化的應(yīng)用,即云原生應(yīng)用。
這里,我們引用阿里巴巴高級(jí)技術(shù)專(zhuān)家醬油(花名)發(fā)表的一篇文章中的分析:
- 本地部署的傳統(tǒng)應(yīng)用往往采用 C/C++、企業(yè)級(jí) Java 編寫(xiě),而云原生應(yīng)用則需要用以網(wǎng)絡(luò)為中心的 Go、Node.js 等新興語(yǔ)言編寫(xiě)。
- 本地部署的傳統(tǒng)應(yīng)用可能需要停機(jī)更新,而云原生應(yīng)用應(yīng)該始終是最新的,需要支持頻繁變更,持續(xù)交付,藍(lán)綠部署。
- 本地部署的傳統(tǒng)應(yīng)用無(wú)法動(dòng)態(tài)擴(kuò)展,往往需要冗余資源以抵抗流量高峰,而云原生應(yīng)用利用云的彈性自動(dòng)伸縮,通過(guò)共享降本增效。
- 本地部署的傳統(tǒng)應(yīng)用對(duì)網(wǎng)絡(luò)資源,比如 IP、端口等有依賴(lài),甚至是硬編碼,而云原生應(yīng)用對(duì)網(wǎng)絡(luò)和存儲(chǔ)都沒(méi)有這種限制。
- 本地部署的傳統(tǒng)應(yīng)用通常人肉部署手工運(yùn)維,而云原生應(yīng)用這一切都是自動(dòng)化的。
- 本地部署的傳統(tǒng)應(yīng)用通常依賴(lài)系統(tǒng)環(huán)境,而云原生應(yīng)用不會(huì)硬連接到任何系統(tǒng)環(huán)境,而是依賴(lài)抽象的基礎(chǔ)架構(gòu),從而獲得良好移植性。
- 本地部署的傳統(tǒng)應(yīng)用有些是單體(巨石)應(yīng)用,或者強(qiáng)依賴(lài),而基于微服務(wù)架構(gòu)的云原生應(yīng)用,縱向劃分服務(wù),模塊化更合理。
可見(jiàn),要轉(zhuǎn)向云原生應(yīng)用需要以新的云原生方法開(kāi)展工作,也就是我們?cè)诟拍钪刑岬降模何⒎?wù)、容器、DevOps 和持續(xù)交付等。
「吞噬世界」的云原生
這個(gè)圖大家一定熟悉又陌生。
2011 年,馬克·安德森說(shuō):“軟件正在吞噬世界”;三年后 Jonathan Bryce 又補(bǔ)充說(shuō):“世界的一切源于開(kāi)源”;再之后,業(yè)內(nèi)普遍認(rèn)同“云計(jì)算已改變了天空的顏色”;但現(xiàn)在云計(jì)算概念又被清晰細(xì)分,“云原生”才是那條最大的魚(yú)。
既然云原生這么好,我們要不要馬上切換到云原生架構(gòu)?
我覺(jué)得既然云原生的核心是應(yīng)用,那么實(shí)際的應(yīng)用就要更加的慎重。需要考慮企業(yè)的實(shí)際需求,目前的架構(gòu)是否影響了業(yè)務(wù)發(fā)展?推倒重建的代價(jià)是否能夠承受的住?
這些都是需要考慮的問(wèn)題。
去年靈雀云進(jìn)行過(guò)一次生態(tài)調(diào)研。在國(guó)內(nèi)排名 TOP100 的 IT 方案商(ISV)中,約有 60~70% 在企業(yè)在接觸云原生概念,但如果將調(diào)研范圍擴(kuò)大到TOP300,這一認(rèn)知比例反而大幅度下降。說(shuō)明規(guī)模越大的企業(yè)越需要云原生的能力來(lái)服務(wù)更多的客戶(hù)、提供更優(yōu)質(zhì)的服務(wù)。
小規(guī)模企業(yè)雖然更加靈活,但一方面是需求不那么強(qiáng)烈,另一方面云原生仍然在不斷的迭代變化,這個(gè)變動(dòng)對(duì)他們來(lái)說(shuō)夾雜著很多的風(fēng)險(xiǎn)。
但數(shù)字化運(yùn)營(yíng)已經(jīng)成為企業(yè)發(fā)展的必然選擇,而云原生技術(shù)與數(shù)據(jù)中臺(tái)正是實(shí)現(xiàn)數(shù)字化運(yùn)營(yíng)所必須的創(chuàng)新技術(shù)與方法論。但大部分企業(yè)在數(shù)字化轉(zhuǎn)型的過(guò)程中,平白付出了努力與時(shí)間,但因?yàn)閷?duì)云原生與數(shù)據(jù)中臺(tái)技術(shù)方法論了解匱乏,加之沒(méi)有好的平臺(tái)與體系來(lái)深入了解而走了不少?gòu)澛贰?/p>
云原生是企業(yè)發(fā)展的一劑良藥,但是藥三分毒,還是得慎重啊~


































