云原生解決方案
云計(jì)算團(tuán)隊(duì) 2020-03-16
對(duì)于最近1到2年,我談的最多的就是微服務(wù)+DevOps+容器化PaaS平臺(tái)。其中在微服務(wù)里面重點(diǎn)又談了中臺(tái)和API網(wǎng)關(guān)兩個(gè)關(guān)鍵點(diǎn),在DevOps里面兼談了敏捷研發(fā)管理。同時(shí)自己也指出了這些關(guān)鍵技術(shù)和方法是傳統(tǒng)IT企業(yè)進(jìn)行轉(zhuǎn)型的基礎(chǔ),不會(huì)獨(dú)立存在,而應(yīng)該是形成一個(gè)完整的整體。
在整個(gè)產(chǎn)品規(guī)劃里面又分為了云臺(tái),云網(wǎng)和云鏡三個(gè)方面的內(nèi)容。
1. 云臺(tái):重心從原來(lái)的IaaS平臺(tái)轉(zhuǎn)到Docker容器化的PaaS平臺(tái),并提供DevOps支撐能力平臺(tái)
2. 云網(wǎng):對(duì)應(yīng)原來(lái)的ESB服務(wù)總線,同時(shí)ESB轉(zhuǎn)為輕量化的微服務(wù)或API網(wǎng)關(guān),并提供大數(shù)據(jù)集成能力
3. 云鏡:提供整個(gè)平臺(tái)的資源監(jiān)控,業(yè)務(wù)運(yùn)行監(jiān)控,性能分析,服務(wù)鏈監(jiān)控等關(guān)鍵能力。
對(duì)于集團(tuán)型大企業(yè),按上述思路來(lái)構(gòu)建新應(yīng)用完全是沒(méi)有問(wèn)題的,但是里面對(duì)各個(gè)組件的能力都需要進(jìn)一步增強(qiáng)和我完善,包括我在前面博客文章也提到過(guò),對(duì)于我們DevOps平臺(tái),雖然整體功能上已經(jīng)完全支撐整個(gè)研發(fā)持續(xù)交付過(guò)程,但是實(shí)際使用的時(shí)候仍然還存在一些關(guān)鍵功能缺失,這些也是需要進(jìn)一步完善的地方。而對(duì)于云鏡而言,要實(shí)現(xiàn)完整的監(jiān)控分析能力,往往也需要很大的研發(fā)投入才能夠完成。
微服務(wù)架構(gòu)+容器化+DevOps 將成為后續(xù)企業(yè)信息化轉(zhuǎn)型的主流趨勢(shì)。
以上部分內(nèi)容也是我在18年11月的一篇產(chǎn)品規(guī)劃雜談里面的談到的,而一直以來(lái)自己也在思考如何用一個(gè)概念將上面幾點(diǎn)全部整合起來(lái)。而云原生剛好就是覆蓋上述所有關(guān)鍵技術(shù)和方法的一個(gè)概念。
什么是云原生?
對(duì)于Cloud Native翻譯為云原生,是Matt Stine提出的一個(gè)概念,它是一個(gè)思想的集合,包括DevOps、持續(xù)交付(Continuous Delivery)、微服務(wù)(MicroServices)、敏捷基礎(chǔ)設(shè)施(Agile Infrastructure)、康威定律(Conways Law)等,以及根據(jù)商業(yè)能力對(duì)公司進(jìn)行重組。
Cloud Native既包含技術(shù)(微服務(wù),敏捷基礎(chǔ)設(shè)施),也包含管理(DevOps,持續(xù)交付,康威定律,重組等)。Cloud Native也可以說(shuō)是一系列Cloud技術(shù)、企業(yè)管理方法的集合。
https://baijiahao.baidu.com/s?id=1606406149473084309&wfr=spider&for=pc
在一般用法中,“云原生”是一種構(gòu)建和運(yùn)行應(yīng)用程序的方法,它利用了云計(jì)算交付模型的優(yōu)勢(shì)?!霸圃笔顷P(guān)于如何創(chuàng)建和部署應(yīng)用程序,和位置無(wú)關(guān)。 這意味著應(yīng)用程序位于云中,而不是傳統(tǒng)數(shù)據(jù)中心。
CNCF將“云原生”定義的更為狹窄,意味著使用開源軟件堆棧進(jìn)行容器化,其中應(yīng)用程序的每個(gè)部分都打包在自己的容器中,動(dòng)態(tài)編排,以便每個(gè)部分都被主動(dòng)調(diào)度和管理,以優(yōu)化資源利用率和面向微服務(wù)的應(yīng)用程序,以提高應(yīng)用程序的整體靈活性和可維護(hù)性。
咨詢公司Deloitte的董事總經(jīng)理Mike Kavis說(shuō):“云原生應(yīng)用程序?qū)iT設(shè)計(jì)用于運(yùn)行現(xiàn)代云計(jì)算平臺(tái)所需的彈性和分布式特性?!?“這些應(yīng)用程序松散耦合,意味著代碼不會(huì)硬連接到任何基礎(chǔ)架構(gòu)組件,因此應(yīng)用程序可以按需伸縮,并采用不可變基礎(chǔ)架構(gòu)的抽象。通常,這些架構(gòu)是使用微服務(wù)構(gòu)建的,但這不是強(qiáng)制性要求。”
云服務(wù)提供商Splunk的首席技術(shù)支持者Andi Mann表示,對(duì)于云原生應(yīng)用程序而言,最大的不同之處在于應(yīng)用程序的構(gòu)建,交付和運(yùn)維方式。“利用云服務(wù)意味著使用敏捷和可擴(kuò)展的組件(如容器)來(lái)提供離散和可重用的功能,這些功能以良好描述的方式集成,甚至跨越多云等技術(shù)邊界,這使得交付團(tuán)隊(duì)可以使用可重復(fù)的自動(dòng)化和編排來(lái)快速迭代?!?/p>
云原生應(yīng)用程序開發(fā)通常包括DevOps,敏捷方法,微服務(wù),云平臺(tái),Kubernetes和Docker等容器,以及持續(xù)交付,簡(jiǎn)而言之,每種新的和現(xiàn)代的應(yīng)用程序部署方法。
CNCF給出了云原生應(yīng)用的三大特征:
1. 容器化封裝:以容器為基礎(chǔ),提高整體開發(fā)水平,形成代碼和組件重用,簡(jiǎn)化云原生應(yīng)用程序的維護(hù)。在容器中運(yùn)行應(yīng)用程序和進(jìn)程,并作為應(yīng)用程序部署的獨(dú)立單元,實(shí)現(xiàn)高水平資源隔離。
2. 動(dòng)態(tài)管理:通過(guò)集中式的編排調(diào)度系統(tǒng)來(lái)動(dòng)態(tài)的管理和調(diào)度。
3. 面向微服務(wù):明確服務(wù)間的依賴,互相解耦。
可以參考網(wǎng)上的要給核心導(dǎo)圖:
因此,你確實(shí)希望擁有平臺(tái)即服務(wù)(PaaS)模型。PaaS不是必需的,但它使事情變得更容易。絕大多數(shù)云客戶從基礎(chǔ)架構(gòu)即服務(wù)(IaaS)開始,這有助于從底層硬件中抽象出他們的應(yīng)用程序。但PaaS增加了一個(gè)額外的層來(lái)抽象底層操作系統(tǒng),因此你可以完全專注于應(yīng)用程序的業(yè)務(wù)邏輯,而不必?fù)?dān)心進(jìn)行操作系統(tǒng)調(diào)用。
實(shí)際上我們看到對(duì)于完整的DevOps是包括了持續(xù)交付方面的內(nèi)容的。因此對(duì)于云原生的概念完全和我前面經(jīng)常談到的微服務(wù),容器化PaaS和DevOps相吻合。
即云原生 = 微服務(wù)+ DevOps + 容器化PaaS
云原生本身包括了云原生平臺(tái)和云原生應(yīng)用,而平臺(tái)則是指容器PaaS平臺(tái)和DevOps能力支撐平臺(tái),而云原生應(yīng)用可以理解微基于微服務(wù)思想和開發(fā)框架開發(fā)的微服務(wù)應(yīng)用。
如果僅僅如此,那么對(duì)云原生的理解還是關(guān)鍵技術(shù)和方法的一個(gè)集合,那么這些集合的目標(biāo)又是什么?簡(jiǎn)單理解來(lái)說(shuō)元原生核心是讓軟件的開發(fā)和交付面向云平臺(tái)或云服務(wù)基礎(chǔ)設(shè)施而進(jìn)行,能夠充分利用云平臺(tái)提供的能力和服務(wù)快速的完成軟件的開發(fā)和集成,面向客戶的持續(xù)交付,同時(shí)又能夠做到足夠的敏捷響應(yīng)變化。
如何做到,核心底層技術(shù)是容器化PaaS,小而靈活,而且具備編排屬性和能力,傳統(tǒng)應(yīng)用架構(gòu)通過(guò)微服務(wù)化后變得足夠小而自治,方便進(jìn)行敏捷開發(fā)和迭代,快速的交付和響應(yīng),同時(shí)也方便部署和托管到容器中。而DevOps更多是一套完全適應(yīng)云端協(xié)同的敏捷管理方法和流程,來(lái)實(shí)現(xiàn)持續(xù)集成和交付。
軟件因云而生,即云原生,需要的就是上面三者的密切配合來(lái)完成。
雖然對(duì)于容器化PaaS和微服務(wù)我在博客文章里面談的比較多,這里還是摘錄下元原生一篇文章里面的一些對(duì)容器化PaaS,服務(wù)編排和微服務(wù)的一些關(guān)鍵描述:
參考:http://dockone.io/article/2991
■ 容器化封裝
最近幾年Docker容器化技術(shù)很火,經(jīng)常在各種場(chǎng)合能夠聽到關(guān)于Docker的分享。Docker讓開發(fā)工程師可以將他們的應(yīng)用和依賴封裝到一個(gè)可移植的容器中。Docker背后的想法是創(chuàng)建軟件程序可移植的輕量容器,讓其可以在任何安裝了Docker的機(jī)器上運(yùn)行,而不用關(guān)心底層操作系統(tǒng)。Docker可以解決虛擬機(jī)能夠解決的問(wèn)題,同時(shí)也能夠解決虛擬機(jī)由于資源要求過(guò)高而無(wú)法解決的問(wèn)題。其優(yōu)勢(shì)包括:
1. 隔離應(yīng)用依賴
2. 創(chuàng)建應(yīng)用鏡像并進(jìn)行復(fù)制
3. 創(chuàng)建容易分發(fā)的即啟即用的應(yīng)用
4. 允許實(shí)例簡(jiǎn)單、快速地?cái)U(kuò)展
5. 測(cè)試應(yīng)用并隨后銷毀它們
自動(dòng)化運(yùn)維工具可以降低環(huán)境搭建的復(fù)雜度,但仍然不能從根本上解決環(huán)境的問(wèn)題。在看似穩(wěn)定而成熟的場(chǎng)景下,使用Docker的好處越來(lái)越多。
■ 服務(wù)編排
Kubernetes——讓容器應(yīng)用進(jìn)入大規(guī)模工業(yè)生產(chǎn)。
這個(gè)總結(jié)確實(shí)很貼切。編排調(diào)度的開源組件還有:Kubernetes、Mesos和Docker Swarm。
Kubernetes是目前世界上關(guān)注度最高的開源項(xiàng)目,它是一個(gè)出色的容器編排系統(tǒng)。Kubernetes出身于互聯(lián)網(wǎng)行業(yè)的巨頭Google公司,它借鑒了由上百位工程師花費(fèi)十多年時(shí)間打造Borg系統(tǒng)的理念,通過(guò)極其簡(jiǎn)易的安裝,以及靈活的網(wǎng)絡(luò)層對(duì)接方式,提供一站式的服務(wù)。
Mesos則更善于構(gòu)建一個(gè)可靠的平臺(tái),用以運(yùn)行多任務(wù)關(guān)鍵工作負(fù)載,包括Docker容器、遺留應(yīng)用程序(例如Java)和分布式數(shù)據(jù)服務(wù)(例如Spark、Kafka、Cassandra、Elastic)。Mesos采用兩級(jí)調(diào)度的架構(gòu),開發(fā)人員可以很方便的結(jié)合公司業(yè)務(wù)場(chǎng)景自定制MesosFramework。
他們?yōu)樵圃鷳?yīng)用提供的強(qiáng)有力的編排和調(diào)度能力,它們是云平臺(tái)上的分布式操作系統(tǒng)。在單機(jī)上運(yùn)行容器,無(wú)法發(fā)揮它的最大效能,只有形成集群,才能最大程度發(fā)揮容器的良好隔離、資源分配與編排管理的優(yōu)勢(shì),而對(duì)于容器的編排管理,Swarm、Mesos和Kubernetes的大戰(zhàn)已經(jīng)基本宣告結(jié)束,Kubernetes成為了無(wú)可爭(zhēng)議的贏家。
■ 微服務(wù)架構(gòu)
傳統(tǒng)的Web開發(fā)方式,一般被稱為單體架構(gòu)(Monolithic)所有的功能打包在一個(gè)WAR包里,基本沒(méi)有外部依賴(除了容器),部署在一個(gè)JEE容器(Tomcat,JBoss,WebLogic)里,包含了DO/DAO,Service,UI等所有邏輯。其架構(gòu)如下圖所示。
單體架構(gòu)進(jìn)行演化升級(jí)之后,過(guò)渡到SOA架構(gòu),即面向服務(wù)架構(gòu)。近幾年微服務(wù)架構(gòu)(Micro-Service Archeticture)是最流行的架構(gòu)風(fēng)格,旨在通過(guò)將功能模塊分解到各個(gè)獨(dú)立的子系統(tǒng)中以實(shí)現(xiàn)解耦,它并沒(méi)有一成不變的規(guī)定,而是需要根據(jù)業(yè)務(wù)來(lái)做設(shè)計(jì)。
微服務(wù)架構(gòu)是對(duì)SOA的傳承,是SOA的具體實(shí)踐方法。微服務(wù)架構(gòu)中,每個(gè)微服務(wù)模塊只是對(duì)簡(jiǎn)單、獨(dú)立、明確的任務(wù)進(jìn)行處理,通過(guò)REST API返回處理結(jié)果給外部。在微服務(wù)推廣實(shí)踐角度來(lái)看,微服務(wù)將整個(gè)系統(tǒng)進(jìn)行拆分,拆分成更小的粒度,保持這些服務(wù)獨(dú)立運(yùn)行,應(yīng)用容器化技術(shù)將微服務(wù)獨(dú)立運(yùn)行在容器中。
過(guò)去設(shè)計(jì)架構(gòu)時(shí),是在內(nèi)存中以參數(shù)或?qū)ο蟮姆绞綄?shí)現(xiàn)粒度細(xì)化。微服務(wù)使用各個(gè)子服務(wù)控制模塊的思想代替總線。不同的業(yè)務(wù)要求,服務(wù)控制模塊至少包含服務(wù)的發(fā)布、注冊(cè)、路由、代理功能。
容器化的出現(xiàn),一定程度上帶動(dòng)了微服務(wù)架構(gòu)。架構(gòu)演化從單體式應(yīng)用到分布式,再?gòu)姆植际郊軜?gòu)到云原生架構(gòu),微服務(wù)在其中有著不可或缺的角色。微服務(wù)帶給我們很多開發(fā)和部署上的靈活性和技術(shù)多樣性,但是也增加了服務(wù)調(diào)用的開銷、分布式系事務(wù)、調(diào)試與服務(wù)治理方面的難題。
微服務(wù)架構(gòu)當(dāng)前主流開發(fā)框架SpringCloud,基本包括了微服務(wù)架構(gòu)開發(fā)和運(yùn)行過(guò)程中常用的組件,其中包括:服務(wù)發(fā)現(xiàn)與注冊(cè)、熔斷機(jī)制、路由、全局鎖、中心配置管理、控制總線、決策競(jìng)選、分布式會(huì)話和集群狀態(tài)管理等基礎(chǔ)組件。
■ 元原生應(yīng)用和傳統(tǒng)應(yīng)用開發(fā)的一個(gè)對(duì)比
參考:https://cloud.tencent.com/developer/article/1360266
其它參考:https://www.cnblogs.com/IT-Evan/p/CloudNative.html