構(gòu)建未來

構(gòu)建未來 - 云原生應用

引言

云原生應用已成為軟件行業(yè)的最大趨勢之一,它改變了我們對開發(fā)、部署和運維軟件產(chǎn)品的思考方式。
每個行業(yè)的組織都希望保持競爭力,領(lǐng)導者意識到必須保持至少兩種技術(shù)配置,最基本的是,在支持產(chǎn)品和服務創(chuàng)新的同時,保持始終在線(業(yè)務性需求);另一個配置必須具有前瞻性,以應對快速變化的技術(shù)和擁抱新技術(shù)(技術(shù)性需求),這其中包括 CI/CD、容器化和微服務。當下迫切需要確保適當數(shù)量的基礎架構(gòu),以管理不可預期的使用量和地域分布。在許多公司里,都有一種強烈的緊迫感,要么快速響應,要么被市場淘汰。
隨著架構(gòu)師和工程師尋求利用云計算,云原生體系結(jié)構(gòu)主要有下列驅(qū)動原因:

  • 彈性
    假設用戶的部署環(huán)境和網(wǎng)絡是常駐的,這是有風險的,它們最終將發(fā)生變化,而且實際上也會發(fā)生變化。用戶的核心應用程序可能不會收到任何警告以適當平穩(wěn)關(guān)機,因此,至關(guān)重要的是為故障而設計,并假設依賴的服務隨時可能不可用
  • 自發(fā)現(xiàn)
    支持應用程序的服務必須易于找到,并且可由其他服務訪問,通常服務需要可以動態(tài)擴展和更改地址。因此,軟件必須具有能夠輕松發(fā)現(xiàn)其他組件和服務的位置,并與之通信的能力。
  • 可擴展性
    盡管用戶可以在云系統(tǒng)中管理應用程序,但是如果這些應用程序無法水平擴展,則它們將無法發(fā)揮云原生架構(gòu)的效率。穩(wěn)健、可靠的云原生計算是由健全的云原生架構(gòu)驅(qū)動的。

為了更好地為未來做準備,重要的是深刻了解這種不斷發(fā)展的技術(shù)趨勢,在這本書中,我們將研究云原生架構(gòu),回顧云原生應用開發(fā)的興起,并將探討整個軟件生態(tài)系統(tǒng)中云原生的未來。
盡管傳統(tǒng)的消費者可能永遠不會理解云原生架構(gòu),但它在創(chuàng)新型公司中不斷取得進展,并繼續(xù)發(fā)揮更大的影響力,而且現(xiàn)在已經(jīng)有一個完善的行業(yè)組織,即云原生計算基金會。在線零售、投資銀行、銀行和各種消費行業(yè)等各行各業(yè)都將云原生架構(gòu)視為業(yè)務戰(zhàn)略的主要基礎。了解這一新技術(shù)運動非常重要。

什么是云原生架構(gòu)

我們先給云原生架構(gòu)下一個定義:

云原生體系架構(gòu)是一個模型,利用云計算能力,在平臺上構(gòu)建和運行應用程序,而底層基礎依賴無關(guān)。

采用云原生架構(gòu)不僅僅是將一些服務負載轉(zhuǎn)移到共有云供應商,這是一種構(gòu)建基礎架構(gòu)、開發(fā)應用程序和構(gòu)建團隊的全新方法。
更詳細地說,使用云原生架構(gòu)的應用程序廣泛使用了微服務,通常,云原生應用程序是容器化的,并在容器編排平臺上運行,如 Kubernetes。
云原生架構(gòu)包含四個主要方面:微服務、DevOps、容器化和持續(xù)交付。

微服務

在云計算中,這是一個子架構(gòu),其中應用程序由大量的小服務集合構(gòu)成,每個小服務都執(zhí)行非常特定的功能。通常,微服務作為實現(xiàn)特定業(yè)務或技術(shù)能力的獨立流程運行,微服務間通過 API 或者消息隊列進行通信。好的設計原則要求微服務容易部署,方便升級,可伸縮,可以自重啟。每個微服務應獨立于其他服務,并且不依賴調(diào)用它的服務。這種高彈性的體系結(jié)構(gòu)允許對應用程序頻繁實時更新,而不會影響到終端用戶。

DevOps

DevOps 是軟件開發(fā)人員和IT運維人員緊密協(xié)作的產(chǎn)物。與傳統(tǒng)團隊不同,對于云原生 DevOps 團隊而言,這些應用程序會高度利用云計算技術(shù)的彈性和適應性,目標是持續(xù)不斷地交付出滿足客戶要求和期望的高質(zhì)量軟件。在最好的團隊中,DevOps 是一種文化,它要求以高度一致性來構(gòu)建、測試和發(fā)布軟件。

持續(xù)集成和交付

持續(xù)交付(CD)是敏捷開發(fā)的一種實踐,該實踐要求可以自動地將小批更新的軟件通過流水線最終交付到生產(chǎn)環(huán)境。CD 通常需要與持續(xù)集成(CI) 流程結(jié)合使用,才能更顯高效,它要求開發(fā)人員每天多次將新代碼集成到公共庫中。在構(gòu)建過程中,會驗證新提交的代碼,這使團隊可以更快得發(fā)現(xiàn)的問題作出響應。CI / CD 的主要目標是使軟件版本達到平穩(wěn)和無錯誤的可靠性,使用 Jenkins 或 CircleCI 之類的平臺,許多已經(jīng)建立了成熟 CD 流水線的組織,都可以以較低的風險頻繁交付產(chǎn)品,并從終端用戶那里獲得快速反饋。

容器化

本質(zhì)上,容器是一個軟件包,其中包含了應用程序運行所需的一切。例如,許多簡單的容器由應用程序服務器,虛擬機環(huán)境(VM)和應用程序本身組成。容器可以在虛擬化環(huán)境中運行,同時將駐留在其環(huán)境中的應用程序隔離出來。這種體系結(jié)構(gòu)的主要優(yōu)點包括環(huán)境獨立性和高度可移植性,和容易在多個環(huán)境(開發(fā)、測試或生產(chǎn))之間移動同一個容器。如果用戶的應用程序具有水平可伸縮的設計,那么可以啟動一個容器的多個實例以適應額外的用戶需求,同時在需求減少時,也可以自動終止這些實例。
Docker是現(xiàn)在最為廣泛應用的容器,與虛擬機相比,容器提供了更高的效率和性能,使用 OS 級虛擬化,單個操作系統(tǒng)實例可以動態(tài)支持多個隔離的容器,每個容器都有其自己不同的,可寫的文件系統(tǒng)和資源配置文件。虛擬化技術(shù)可與容器編排技術(shù)結(jié)合使用,以實現(xiàn)高度的靈活性和響應能力。動態(tài)創(chuàng)建和終止容器只需要少量開銷,容器是部署微服務的絕佳方式。

旅程:我們?nèi)绾问褂迷圃鷳贸绦?/h2>

在過去十年間,現(xiàn)代軟件開發(fā)一直在放棄使用內(nèi)部物理機部署服務,而是使用云計算基礎架構(gòu)。最初出現(xiàn)云計算時,許多 IT 部門僅試圖將其系統(tǒng)轉(zhuǎn)移到云中,而不對應用程序體系結(jié)構(gòu)進行任何更改,只需將多層應用程序從本地物理機上遷移到虛擬化云環(huán)境即可。隨著時間流逝,云系統(tǒng)工程師在云平臺和基礎架構(gòu)方面進行了許多創(chuàng)新的改進,這些舉措催生了一些工程趨勢,沿用至今日。其中趨勢之一就是從單體應用系統(tǒng)向微服務體系架構(gòu)的轉(zhuǎn)變,這使我們今天看到的云原生運動蓬勃發(fā)展。
投入云原生運動可以獲得互惠,希望高效地使用云資源影響這云原生體系結(jié)構(gòu),更好的結(jié)構(gòu)又進一步提高了效率??傮w而言,這種高效表現(xiàn)為更好的客戶服務以及更快的產(chǎn)品和服務開發(fā)。
除了上面提到的云原生特性外,以下是一些目前正在影響云原生架構(gòu)的主流軟件開發(fā)趨勢。

Restful 風格 API

基于 Restful 風格的 API 提供了可伸縮并且可靠的通信,這種方法在很大程度上依賴于存在已久的 Internet 協(xié)議,基礎結(jié)構(gòu)和完善定義的標準。

狀態(tài)隔離

無狀態(tài)組件更易于水平擴展(向上或向下),盡管有狀態(tài)的組件并不是完全需要避免,但應將其減少到最少。

松耦合

在松耦合的情況下,服務大多通過事件或者數(shù)據(jù)組合。更具體地說,事件交互依賴于消息系統(tǒng),例如 AMQP 標準;數(shù)據(jù)交互通常依賴于可伸縮的,滿足最終一致性的存儲解決方案,通常是 NoSQL 數(shù)據(jù)庫。

彈性平臺

彈性意味著系統(tǒng)可以通過實時自動配置來適應工作負載變化,諸如 Kubernetes,Swarm 或 Mesos 之類的彈性平臺通常被視為廣義彈性基礎架構(gòu)的關(guān)鍵統(tǒng)一中間件,這些平臺極大地擴展和最大化了資源共享。它們還提高了標準化部署單元中,基礎計算、存儲和網(wǎng)絡資源的利用率。

云建模語言

現(xiàn)代云計算在提供服務時支持高度的自動化,云服務用戶可以動態(tài)地獲取用于部署云服務程序的服務。專門的云建模語言尋求提供靈活的方法來管理不斷增長的云計算功能。這些新語言旨在支持不同場景,例如將現(xiàn)有應用程序遷移到云,云應用程序開發(fā)和優(yōu)化。

serverless 化

這是一種云應用程序架構(gòu),在很大程度上依賴于外部第三方服務。這些基于事件觸發(fā)的小型功能集合稱為 Fass(功能即服務)。Faas 使用分時策略在彈性平臺內(nèi)實現(xiàn)資源共享最大化。

微服務:云原生設計的核心

在過去15年中,使用各種類型的面向服務的架構(gòu)(SOA)構(gòu)建了許多業(yè)務應用程序,最終孕育了云原生架構(gòu)的興起。面向服務的計算是用于管理復雜分布式系統(tǒng)和集成不同的軟件應用程序的計算范例。本質(zhì)上,一項服務通過通信機制為其他服務提供功能。重要的是,SOA 服務設計將其接口與核心實現(xiàn)分離開來,并通過專用的工作流語言協(xié)調(diào)所有服務之間的動作。
從歷史上看,許多技術(shù)人員一直樂觀地認為,這些面向服務的應用程序只需適度地重新配置,就可以重新部署到云環(huán)境中,許多人稱此類應用為云友好型應用。但是,云系統(tǒng)工程師并不這么認為,盡管常規(guī)的 SOA 應用程序由分布式服務組成,但是它們的部署方式不是分布式的。從部署的角度來看,此類分布式應用實際上還是單體應用。
問題在于,對應用程序的任何更新或者服務版本升級都需要重新部署一整個應用,在許多情況下,其結(jié)果會導致線上服務長時間不可用。
這些遺留的單體應用伸縮性有限,無法處理實時的負載變化,對于某些操作(比如凌晨運行的批處理任務),此類體系結(jié)構(gòu)是勝任的,但是對于工作日的自然流量,這類系統(tǒng)會遇到瓶頸。
為了擺脫這些約束和限制,架構(gòu)師必須朝著微服務架構(gòu)邁進,這是云原生計算的主要特征。

向更大彈性的演進

云計算支持云原生架構(gòu),高級系統(tǒng)工程師利用這幾年時間,已經(jīng)更好地理解了,并可以利用現(xiàn)代計算技術(shù)的彈性潛力來充分支持云原生應用。時至今日,許多創(chuàng)新的系統(tǒng)設計專門針對云基礎架構(gòu),它們直接支持水平可伸縮性,這對于云基礎架構(gòu)至關(guān)重要。這些系統(tǒng)使用容器、微服務和 serverless 架構(gòu),大大提高了基礎計算架構(gòu)的利用率,現(xiàn)在,這種架構(gòu)通常稱為云原生。
與傳統(tǒng)架構(gòu)相比,云基礎架構(gòu)和平臺必須具有高度的彈性。彈性是系統(tǒng)根據(jù)負載變化,實時自動配置和終止資源的能力,缺乏必要的彈性,云計算通常是行不通的,不論在成本上還是運營上。
下圖描述了過去十年中一直在發(fā)展的明確趨勢,虛擬化使整合大量裸機機器和增加物理機利用率成為可能,而且它構(gòu)成了云技術(shù)的技術(shù)中堅力量。但是,雖然虛擬機的資源占用量較小,VM的鏡像依舊很大。

容器技術(shù)的出現(xiàn)是為了改善和簡化標準化部署,同時還提供了VM利用率。但是,這也需要權(quán)衡取舍,盡管容器可以快速擴展,但是它們始終處于打開狀態(tài),并且總是消耗大量資源,為此,F(xiàn)aaS 技術(shù)應運而生,并使其可以在專用容器平臺上分時使用容器?,F(xiàn)在可以采用純 FaaS 架構(gòu)來部署任何細粒度的服務。這種分時功能在同一個硬件上是完全可行的,因此 FaaS 可以支持從零進行縮放,這大大提高了資源效率,成本上也是可控的。最近技術(shù)已經(jīng)革新到可以在云中復雜編排資源陣列,并且在相同的物理基礎架構(gòu)上運行更多的負載。

serverless 架構(gòu)

微服務架構(gòu)提供了現(xiàn)代解決方案,與單體應用不同,可以規(guī)?;瘮U展計算資源。但是,任何微服務架構(gòu)都面臨著其他挑戰(zhàn),例如部署所有微服務,在云環(huán)境運行他們以及根據(jù)需要擴展它們。
這孕育了云計算生態(tài)系統(tǒng)中的 serverless 架構(gòu)和 FaaS 平臺,其中最著名的是 AWS Lambda,但是還有其他許多類似的服務,包括 Azure Functions、Google Cloud Functions、OpenWhisk Functions 和 Spring Cloud Functions。所有商業(yè)平臺似乎都遵循相同的基本原理,提供細粒度的服務(每個服務通常僅包含一個無狀態(tài)功能),這些服務根據(jù)每個請求或每個 API 調(diào)用運行時消耗模型計費。
serverless 設計支持事件驅(qū)動的應用程序,其中輕量級進程會響應事件而觸發(fā),它比微服務體系結(jié)構(gòu)更復雜,并且有助于創(chuàng)建各種服務。這種細粒度的服務有時被稱為納米服務,易于部署并且可自動擴展,如果運用得當,對減少運營和基礎架構(gòu)成本有很大的潛力。

云原生架構(gòu)結(jié)合微服務和 serverless 設計

微服務可以以多種方式部署,它們通常與 serverless 體系結(jié)構(gòu)結(jié)合在一起,可以駐留在容器中,也可以使用 PaaS 構(gòu)建。微服務的好處是適用于本地應用程序開發(fā),但是,在云環(huán)境中(利用容器或 serverless 架構(gòu)),可以更加清楚地看到微服務的巨大優(yōu)勢。
微服務和 serverless function 之間的區(qū)別在于微服務體積更大,包含更多的功能。通常函數(shù)是一小段代碼,可以直接響應事件來執(zhí)行單個動作,在許多情況下,微服務可能等效于 serverless function,或者說微服務類似于 serverless function 的集合。
serverless 微服務駐留在 serverless 基礎架構(gòu)中,并且僅在應用程序進行調(diào)用是操作。serverless 計算提供商提供了服務的訪問權(quán)限,訂閱者可以編寫和部署可交互的代碼,而無需考慮基礎架構(gòu)。大多數(shù)服務商提供自動縮放以支持流量波動。這些服務通常按量計費,因此不需要保留未被充分利用的固定容量,從而降低成本。

云原生運動的驅(qū)動原因

云原生應用 傳統(tǒng)企業(yè)應用
高預期性 不可預期、缺乏彈性
按量生產(chǎn) 產(chǎn)能過剩、浪費
協(xié)同合作 職責壁壘
持續(xù)集成、持續(xù)發(fā)布 瀑布模型
自動的,系統(tǒng)級的可伸縮性 手動的,有限制的伸縮
操作系統(tǒng)無關(guān)行 操作系統(tǒng)依賴
松耦合 緊耦合
恢復迅速 恢復緩慢

云原生架構(gòu)的好處

云原生應用程序是專門為云模型而構(gòu)建的,這些程序由小型和專業(yè)的功能團隊,以快速地節(jié)奏構(gòu)建和部署到易于擴展并且硬件解耦的平臺上,從而為組織提供了更大的敏捷性、靈活性和可移植性。
云原生架構(gòu)提供了眾多好處。

競爭優(yōu)勢

云原生架構(gòu)折射出了計算架構(gòu)應如何影響業(yè)務目標,企業(yè)級的思想已經(jīng)發(fā)生了很大的改變,之前僅注重降低成本,現(xiàn)在是需要打造促進業(yè)務增長的引擎,在這個不斷發(fā)展的軟件時代,只有那些能夠響應當前客戶需求,并且可以快速交付應用程序的組織才能取得成功。

增加靈活性

盡管云提供商以合理的價格提供了非常好用的服務,但大多數(shù)仍不愿意只選擇一種基礎架構(gòu),靈活性很重要,因為依賴單個供應商會帶來很大風險。提供靈活性,并且還保留了快速采用新技術(shù)的能力,使開發(fā)人員可以選擇最適合需求的工具。

專注于彈性

當傳統(tǒng)基礎架構(gòu)出現(xiàn)故障時,服務可能會遭受損失,在云原生環(huán)境中,團隊可以集中精力進行構(gòu)建,以恢復故障或解決性能緩慢,云原生架構(gòu)使系統(tǒng)設計在可能發(fā)生任何異常情況的環(huán)境中仍可以保持在線狀態(tài)。

使運營與業(yè)務占率保持一致

通過使 IT 流程和交付操作自動化,技術(shù)團隊與業(yè)務優(yōu)先項緊密結(jié)合,公司可以變得更加精簡,當所有員工都可以專注于自動化以取代效率低下的管理任務時,就可以減輕由于人為錯誤而導致的故障風險。我們可以在所有層推進自動化升級和運維發(fā)布,這可以有效消除停機時間和運維人員進行手動干預,雖然云原生架構(gòu)有很多好處,但從業(yè)人員也面臨著許多挑戰(zhàn),接下來我們探討一下。

向云原生架構(gòu)邁進的挑戰(zhàn)

一些從業(yè)人員犯的一個巨大錯誤是將舊的本地應用直接遷移到云中。將舊版應用程序遷移到云基礎架構(gòu)不會從云原生功能中得到任何好處。相反,最好將遺留應用分解或重構(gòu)為云原生架構(gòu),或者在新的云原生環(huán)境開發(fā)新的云原生應用程序。
展望未來,放棄新的開發(fā)范式和方法將變得越來越重要。瀑布模型實際上已過時,經(jīng)典敏捷也有不足。要享受云計算的好處,必須采用新的云原生應用程序開發(fā)方法,其中包括通過實施現(xiàn)代 DevOps 和 CI/CD 方法、最小化可行產(chǎn)品(MVP)開發(fā)、快速迭代、多變量測試以及跨組織邊界的緊密集成。
云原生設計、開發(fā)和部署涉及很多方面,其中包括虛擬化、容器化、容器編排、微服務架構(gòu)、基礎架構(gòu)服務、自動化和實時監(jiān)控。擁抱這些需要吸收新的方法,同時摒棄舊的習慣,保持適當?shù)臒岫?,穩(wěn)步前行,才能抵達成功。

對從業(yè)者的影響

這里簡要概述一下有關(guān)云原生從業(yè)者的一些關(guān)鍵見解。所有這些點都極大地影響了從業(yè)人員構(gòu)建完全針對云計算而設計的云原生架構(gòu)的方式。

  • 更喜歡遷移平臺,而不是應用;
  • 希望有多個平臺選項;
  • 首選聲明式和自動調(diào)整的方式,而不是基于工作流的方式進行編排部署;
  • 注重實用的解決方案,而不是全功能覆蓋云平臺。

從業(yè)人員注意事項

分布式計算并不簡單,僅僅要使微服務之間互相通信這點就很復雜,容器技術(shù)用戶面臨的挑戰(zhàn)是運行微服務的容器具有網(wǎng)絡 IP 地址,這個地址需要統(tǒng)一管理。為了在微服務架構(gòu)上構(gòu)建云原生應用程序,其他容器需要互相的 IP 地址才能通信。
為了支持聯(lián)網(wǎng),每個微服務容器必須提供網(wǎng)絡安全性、防火墻、消息隊列、負載平衡和其他基本網(wǎng)絡服務。將這些全都管理起來是云原生計算發(fā)展的下一個主要挑戰(zhàn)。而且,云優(yōu)先架構(gòu)中的網(wǎng)絡因素通常很脆弱,在云計算中建立健壯的網(wǎng)絡連接這個問題尚未解決,因此構(gòu)建云原生體系結(jié)構(gòu)使其具有彈性至關(guān)重要。
云原生架構(gòu)嚴重依賴微服務,然而,盡管有眾多好處,但是微服務并不能解決所有問題,在緩解單體應用問題的同時,微服務提出了一些全新的挑戰(zhàn),它提供的敏捷性和開發(fā)速度是以增加管理復雜性作為代價的。這需要增加操作的復雜性,與單體應用相比,需要更多的活動部件。
采用微服務架構(gòu)可能會增加運營開銷,僅僅全面部署微服務就需要消耗大量資源,在創(chuàng)建基礎架構(gòu)也需要付出更多努力。大多數(shù)服務都需要建立集群-同時兼顧彈性和故障轉(zhuǎn)移。一個典型的系統(tǒng)具有數(shù)十個或更多獨立組件

云原生將如何影響整個生態(tài)系統(tǒng)

云原生現(xiàn)在尚不是主要的軟件開發(fā)范式,但不會等太久了。在 Cloud Foundry 的最新調(diào)查中,大約600個 IT 決策中游超過75%的人正在使用或者準備使用 PaaS 平臺,72%的人正在使用或者準備使用容器,46%的企業(yè)正在使用或準備使用 serverless。
我們現(xiàn)處的世界中有很多平臺服務,因此,毫不奇怪,在使用了各種工具和平臺之后,技術(shù)決策者會繼續(xù)尋找一套可以協(xié)同工作的技術(shù)。它們會尋求與現(xiàn)有平臺良好集成的技術(shù),從而滿足當前需求,同時也期望可以適應未來的需求。
超過一半的受訪者表示,它們的公司一邊構(gòu)建云原生應用,一邊重構(gòu)現(xiàn)有應用程序,僅僅過了幾個月,這項調(diào)查結(jié)果就提高了9個百分點。

新云原生應用開發(fā)的興起

公司究竟如何使用云原生技術(shù)?的確,許多人已經(jīng)在使用它來重構(gòu)遺留應用程序。但也正在改變,如今,許多云原生從業(yè)人員表明它們主要是在構(gòu)建新的原生應用程序,很少有開發(fā)使用該技術(shù)來重構(gòu)舊的應用程序,許多公司正在更廣泛地在 PaaS 上進行部署。

最短時間在應用內(nèi)驗證你的想法

云原生架構(gòu)的最大優(yōu)勢是什么?用戶可以在最短的時間內(nèi),完成從對產(chǎn)品的構(gòu)思到發(fā)布上線,沒有其他應用程序開發(fā)范式比這更有效。
云原生架構(gòu)所涉及的不只是使應用程序在云計算環(huán)境中運行,它在如何設計基礎架構(gòu),以及如何圍繞微服務設計應用程序的方式上發(fā)生了重大改變。并且,如果對基礎架構(gòu)進行根本性的修改,需要一個專門針對云原生操作而構(gòu)建的新工具集。
所有這些努力共同創(chuàng)造了巨大的動力 - 發(fā)布更快、應用程序更具擴展性,云原生架構(gòu)需要付出很多,但在日益激烈的云計算世界中都是值得的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容