云原生中間件技術(shù)白皮書_第1頁
云原生中間件技術(shù)白皮書_第2頁
云原生中間件技術(shù)白皮書_第3頁
云原生中間件技術(shù)白皮書_第4頁
云原生中間件技術(shù)白皮書_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

云原生中間件

技術(shù)白皮書隨著云原生技術(shù)在各個(gè)行業(yè)快速落地,基于云計(jì)算基礎(chǔ)設(shè)施的應(yīng)用開發(fā)架構(gòu)已經(jīng)發(fā)生了巨大的變革。中間件作為云平臺(tái)業(yè)務(wù)上云的關(guān)鍵組件,起到重要支撐作用。然而,目前云原生時(shí)代中間件范疇尚未明確定義,云原生中間件的生態(tài)現(xiàn)狀并不清晰,普及推廣云原生中間件對(duì)加速云原生技術(shù)落地有著積極作用。本白皮書首先闡述了云原生和中間件的基本概念,回顧了中間件從電子信息時(shí)代到云原生時(shí)代的發(fā)展歷程,總結(jié)了當(dāng)前云原生時(shí)代應(yīng)用的開發(fā)特點(diǎn),同時(shí)開創(chuàng)性地提出了設(shè)計(jì)云原生中間件的十個(gè)關(guān)鍵要素,最后梳理了目前典型的云原生中間件服務(wù),并預(yù)測(cè)了未來云原生中間件的發(fā)展趨勢(shì)。TOC\o"1-5"\h\z―、概述 7(一) 云原生概述 7(二) 中間件定義 7二、 中間件發(fā)展歷程 8(一) 中間件的起源 8(二) 互聯(lián)網(wǎng)時(shí)代的中間件 9(三) 云計(jì)算為中間件提供了平臺(tái) 10(四) 開源推動(dòng)中間件技術(shù)發(fā)展 11(五) 云原生賦予中間件新的內(nèi)涵 11三、 云原生應(yīng)用開發(fā)特點(diǎn) 12(一) 容器與編排 13(二) 微服務(wù)化 14(三) 計(jì)算存儲(chǔ)分離 15(四) 服務(wù)網(wǎng)關(guān) 16(五) 分布式事務(wù)模式 16(六) 業(yè)務(wù)服務(wù)無狀態(tài)化 17四、 云原生中間件十要素 17(一) 容器原生 18(二) 服務(wù)狀態(tài) 18(三) 組件模塊化 19(四) 事件驅(qū)動(dòng) 19(五) 可觀測(cè) 20(六) 韌性設(shè)計(jì) 21(七) 彈性伸縮 21(八) 動(dòng)態(tài)部署 22(九) 統(tǒng)一響應(yīng)式與聲明式的API 22(十)平臺(tái)化 23五、 云原生中間件典型服務(wù) 23(一) 分布式消息隊(duì)列 23(二) 分布式事務(wù)系統(tǒng) 25(三) 分布式配置服務(wù) 27(四) API網(wǎng)關(guān) 28(五) 分布式緩存 29(六) 鏈路跟蹤服務(wù) 30六、 云原生中間件發(fā)展趨勢(shì) 31(一) 技術(shù)架構(gòu)上趨于統(tǒng)一 31(二) 深度融合云原生熱點(diǎn)技術(shù) 31(三) 云原生中間件領(lǐng)域標(biāo)準(zhǔn)化進(jìn)程持續(xù)深入 32概述(一) 云原生概述云原生是一系列云計(jì)算技術(shù)體系和企業(yè)管理方法的集合,既包含了實(shí)現(xiàn)應(yīng)用云原生化的方法論,也包含了落地實(shí)踐的關(guān)鍵技術(shù)云原生應(yīng)用利用容器、服務(wù)網(wǎng)格、微服務(wù)、不可變基礎(chǔ)設(shè)施和聲明式PI等代表性技術(shù),來構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。云原生通過利用可靠的自動(dòng)化手段對(duì)系統(tǒng)做出頻繁、可預(yù)測(cè)的重大變更,讓應(yīng)用隨時(shí)處于待發(fā)布狀態(tài)。云原生技術(shù)有利于各組織在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用,借助平臺(tái)的全面自動(dòng)化能力,跨多云構(gòu)建微服務(wù),持續(xù)交付部署業(yè)務(wù)生產(chǎn)系統(tǒng)。1經(jīng)過幾年的發(fā)展,云原生的理念不斷豐富和落地。中國信息通信研究院經(jīng)過多方面研究,總結(jié)云原生的概念為適合云的應(yīng)用”和“好用的云架構(gòu)”2?;谠圃募夹g(shù)和管理方法,用戶能夠更好地把業(yè)務(wù)生于云或遷移到云平臺(tái),從而享受云的高效和持續(xù)的服務(wù)能力。(二) 中間件定義中間件是指網(wǎng)絡(luò)環(huán)境下處于操作系統(tǒng)、數(shù)據(jù)庫等系統(tǒng)軟件和應(yīng)用軟件之間的一種起連接作用的分布式軟件。中間件主要解決異構(gòu)網(wǎng)絡(luò)環(huán)境下分布式應(yīng)用軟件的互連與互操作問題。提供標(biāo)準(zhǔn)接口、協(xié)議,1引自CNCF對(duì)云原生的定義2引自《云原生技術(shù)實(shí)踐白皮書(2019年)》屏蔽實(shí)現(xiàn)細(xì)節(jié),提高應(yīng)用系統(tǒng)易移植性為其主要技術(shù)優(yōu)勢(shì)。它使用戶能使用一種腳本語言來選擇和連接已有的服務(wù),從而生成簡(jiǎn)單程序的軟件開發(fā)工具。中間件涉及軟件的各個(gè)領(lǐng)域,是供公用應(yīng)用程序編程接口的軟件。中間件在操作系統(tǒng)、網(wǎng)絡(luò)和數(shù)據(jù)庫之上,應(yīng)用軟件的下層,總的作用是為處于自己上層的應(yīng)用軟件提供運(yùn)行與開發(fā)的環(huán)境,幫助用戶靈活、高效地開發(fā)和集成復(fù)雜的應(yīng)用軟件。中間件是一種獨(dú)立的系統(tǒng)軟件或服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源。二、中間件發(fā)展歷程(一)中間件的起源1946年,世界上第一臺(tái)電子計(jì)算<ENIAC的誕生,標(biāo)志著人類進(jìn)入了電子信息時(shí)代。上世紀(jì)六十年代,最早的程序語言Fortran出現(xiàn),標(biāo)志著現(xiàn)代意義上的軟件誕生。為了更好地支撐應(yīng)用軟件系統(tǒng),中間件隨之登上歷史舞臺(tái)。作為連接應(yīng)用和底層資源的橋梁,中間件能夠屏蔽基礎(chǔ)硬件、操作系統(tǒng)和通訊協(xié)議的異構(gòu)性,為應(yīng)用開發(fā)者提供統(tǒng)一標(biāo)準(zhǔn)的交互界面。隨著軟件的不斷發(fā)展及其規(guī)模的不斷增大,分布式系統(tǒng)應(yīng)運(yùn)而生。隨之出現(xiàn)的還有異構(gòu)分布網(wǎng)絡(luò)環(huán)境下軟件系統(tǒng)的通信、互操作、協(xié)同、事務(wù)、安全等共性難題。不斷出現(xiàn)的新業(yè)務(wù)需求驅(qū)動(dòng)應(yīng)用架構(gòu)和信系統(tǒng)持續(xù)演進(jìn),進(jìn)而要求中間件不斷地凝練共性問題,提供標(biāo)準(zhǔn)化的支撐機(jī)制。BELL實(shí)驗(yàn)室于1990年開發(fā)的Tuxedo系統(tǒng),標(biāo)準(zhǔn)化了分布式交易事務(wù)的控制方式。IBM在1994年發(fā)布了消息隊(duì)列服務(wù)MQ,標(biāo)準(zhǔn)化了不同應(yīng)用程序間異步通信的方式,解決了分布式系統(tǒng)中通訊服務(wù)問題。中間件作為解決共性問題的標(biāo)準(zhǔn)化工具,大大降低了系統(tǒng)的復(fù)雜度和協(xié)作成本,逐漸成為網(wǎng)絡(luò)應(yīng)用的基礎(chǔ)設(shè)施。(二)互聯(lián)網(wǎng)時(shí)代的中間件到了互聯(lián)網(wǎng)時(shí)代,用戶數(shù)量爆發(fā)增長(zhǎng)導(dǎo)致了互聯(lián)網(wǎng)業(yè)務(wù)的快速增長(zhǎng),越來越多的應(yīng)用程序開始部署在分布式的網(wǎng)絡(luò)環(huán)境里運(yùn)行。傳統(tǒng)中間件以類庫和框架的形式來加強(qiáng)應(yīng)用能力,標(biāo)準(zhǔn)化程度和交互性能亟待提升。由于中間件構(gòu)件模型類庫和架構(gòu)沒有統(tǒng)一的標(biāo)準(zhǔn),不同節(jié)點(diǎn)下的中間件自身在構(gòu)件描述、發(fā)布、調(diào)用、互操作協(xié)議及數(shù)據(jù)傳輸?shù)确矫娉尸F(xiàn)出巨大的差異性。另外,以類庫和框架的形式提供能力必然使得中間件與業(yè)務(wù)應(yīng)用有極強(qiáng)的耦合度,存在可移植性差、適應(yīng)性低等問題,進(jìn)而使得應(yīng)用在不同分布式節(jié)點(diǎn)上的交互變得困難重重。另一方面,爆發(fā)增長(zhǎng)的用戶帶的巨大流量和數(shù)據(jù)也沖擊互聯(lián)網(wǎng)應(yīng)用,耦合度高的傳統(tǒng)中間件難以適配動(dòng)態(tài)多變的流量的互聯(lián)網(wǎng)環(huán)境。在設(shè)計(jì)之初僅考慮支撐當(dāng)前應(yīng)用的能力也使得中間件在技術(shù)上具有較大的局限性,在復(fù)雜的分布式互聯(lián)場(chǎng)景下無法很好的支撐上層應(yīng)用系統(tǒng)。與此同時(shí),多變的互聯(lián)網(wǎng)流量對(duì)基礎(chǔ)資源的靈活配置的需求也史無前例的增大,快速增長(zhǎng)的業(yè)務(wù)與僵化如基礎(chǔ)設(shè)施之間的矛盾日益嚴(yán)重。中間件需要在存在多種硬件系統(tǒng)的分布式異構(gòu)環(huán)境中,技撐各種各樣的系統(tǒng)軟件,以及風(fēng)格各異的網(wǎng)絡(luò)協(xié)議和網(wǎng)絡(luò)體系結(jié)構(gòu)。這些痛點(diǎn)驅(qū)動(dòng)著軟件與中間件的技術(shù)革新,如何使用中間件技術(shù)更媯復(fù)用業(yè)務(wù),提升IT基礎(chǔ)設(shè)施的業(yè)務(wù)敏捷性,是互聯(lián)網(wǎng)時(shí)代中間件服務(wù)應(yīng)該考慮的關(guān)鍵問題。(三)云計(jì)算為中間件提供了平臺(tái)云計(jì)算時(shí)代的到來為企業(yè)靈活多變的業(yè)務(wù)和僵化的IT基礎(chǔ)設(shè)施之間的尖銳矛盾提供了完美的解決方案。彈性的云計(jì)算資源根據(jù)業(yè)務(wù)流量進(jìn)行擴(kuò)縮,提高資源利用率;平臺(tái)化的資源托管,解決了傳統(tǒng)集群的運(yùn)維繁瑣問題;云計(jì)算重構(gòu)了企業(yè)IT基礎(chǔ)設(shè)施,在業(yè)務(wù)系統(tǒng)逐漸遷移到云上的過程中,中間件起到了至關(guān)重要的作用。業(yè)務(wù)上云的過程往往不是一蹴而就,企業(yè)在云計(jì)算構(gòu)建及落地過程中,出于對(duì)新興技術(shù)未知的顧慮以及對(duì)核心數(shù)據(jù)資產(chǎn)的保護(hù),往往是共有云、私有云的混合部署,這樣對(duì)企業(yè)業(yè)務(wù)不會(huì)造成太大的影響同時(shí)提高了資源調(diào)度的靈活性。在原海資源、共有云、私有云等不同的平臺(tái)之間,以及部署其上的不同應(yīng)用之間進(jìn)行數(shù)據(jù)傳遞和消息互通至關(guān)重要,云計(jì)算時(shí)代的中間件就扮演了實(shí)現(xiàn)不同平臺(tái)上的應(yīng)用互聯(lián)互通標(biāo)準(zhǔn)化的重要角色。同時(shí)云計(jì)算也為中間件技術(shù)的發(fā)展提供了更廣闊的空間和舞臺(tái),中間件逐漸成為云基礎(chǔ)構(gòu)建中的一部分,企業(yè)用戶能夠使用云中間件將業(yè)務(wù)流程逐步遷移到云集成服務(wù)上,最終實(shí)現(xiàn)靈活擴(kuò)展和降本增效。(四)開源推動(dòng)中間件技術(shù)發(fā)展作為軟件代碼標(biāo)準(zhǔn)化的方式,開源在云計(jì)算興起過程中發(fā)揮了至關(guān)重要的作用,開源打破了技術(shù)壟斷,為企業(yè)提供了一個(gè)共同制訂事實(shí)標(biāo)準(zhǔn)的平等機(jī)會(huì)。蓬勃發(fā)展的云計(jì)算與快速前行的開源發(fā)揮了相互促進(jìn)的作用。目前,在與云計(jì)算相關(guān)的虛擬化、容器、分布式存儲(chǔ)、自動(dòng)化運(yùn)維等領(lǐng)域,開源已經(jīng)成為技術(shù)主流,深刻影響著云計(jì)算的發(fā)展方向。在開源技術(shù)開放協(xié)作的理念下,傳統(tǒng)中間件之間相互孤立的鴻溝將不復(fù)存在。隨著開源的價(jià)值逐漸獲得國內(nèi)外公司的認(rèn)同,越來越多中間件領(lǐng)域的優(yōu)質(zhì)項(xiàng)目涌現(xiàn)出來,如阿里開源的分布式服務(wù)框架Dubbo、分布式消息隊(duì)列RocketMQ,騰訊開源的微服務(wù)框架TARS等,已經(jīng)被國內(nèi)外眾多企業(yè)用于生產(chǎn)。(五)云原生賦予中間件新的內(nèi)涵在容器及編排技術(shù)、開源、微服務(wù)等云原生理念的帶動(dòng)下,將應(yīng)用部署到云端已經(jīng)是不可逆轉(zhuǎn)的趨勢(shì)。在現(xiàn)有業(yè)務(wù)代碼不變的情況下,想要讓分布式系統(tǒng)無縫入云,如何設(shè)計(jì)云原生中間件以支撐應(yīng)用的遷變遷成為關(guān)鍵問題。云原生時(shí)代的應(yīng)用更加輕量化,在對(duì)外提供能保持一致的前提下,將與核心業(yè)務(wù)無關(guān)的能力剝離出去。這些能將以中間件的形式下沉到基礎(chǔ)設(shè)施中,成為云的一部分,從而加強(qiáng)楸善應(yīng)用的運(yùn)行環(huán)境,實(shí)現(xiàn)應(yīng)用輕量化。由此可以窺見云原生賦于中間件新的內(nèi)涵,即云原生中間件下沉到云基礎(chǔ)設(shè)施,保持功能不變的情況下與應(yīng)用解耦,在運(yùn)行時(shí)為應(yīng)劇態(tài)賦能,支撐上層應(yīng)用系統(tǒng)。云原生中間件是指在公有云、私有i和混合云等動(dòng)態(tài)環(huán)境中,用于構(gòu)建和運(yùn)行可彈性擴(kuò)展的應(yīng)用,持續(xù)付部署業(yè)務(wù)生產(chǎn)系統(tǒng)的分布式中間件。云原生中間件能提供應(yīng)用管理、發(fā)布部署、運(yùn)維編排、監(jiān)控分析、容災(zāi)應(yīng)急等全生命周期管理的aaS能力,支撐云原生應(yīng)用的開發(fā)與管理,滿足經(jīng)典和云原生架構(gòu)的運(yùn)綠障需求。云原生中間件在應(yīng)用開發(fā)方面,能提供開發(fā)者體驗(yàn)工具支撐、API開放能力、產(chǎn)品定制能力、微服務(wù)中間件平臺(tái)、服務(wù)市場(chǎng)應(yīng)用商店等,來支持云原生應(yīng)用的開發(fā)與管理。三、云原生應(yīng)用開發(fā)特點(diǎn)傳統(tǒng)企業(yè)應(yīng)用隨著業(yè)務(wù)越來越龐大會(huì)遇到各類問題。如在運(yùn)維方面,傳統(tǒng)集群運(yùn)維繁瑣,對(duì)于人員技能要求高導(dǎo)致運(yùn)維效率低;業(yè)務(wù)架構(gòu)從單體架構(gòu)向分布式架構(gòu)轉(zhuǎn)變時(shí),架構(gòu)改造以及服務(wù)拆分帶來的技術(shù)學(xué)習(xí)難度高;自建IT基礎(chǔ)資源使整個(gè)應(yīng)用運(yùn)行成本極高,且大量計(jì)算資源無法被充分利用,資源利用率低。云原生的出現(xiàn)極大改善了企業(yè)業(yè)務(wù)上云的難度,其主要有以下優(yōu)勢(shì):云生云長(zhǎng),充分利用云平臺(tái)服務(wù)優(yōu)勢(shì)。云原生應(yīng)用可以快速構(gòu)建并部署到平臺(tái)上,平臺(tái)提供了簡(jiǎn)單快捷的擴(kuò)展能力并與硬件解耦,提供了更大的靈活性、彈性和跨云環(huán)境的可移植性。云原生將云計(jì)算作為競(jìng)爭(zhēng)優(yōu)勢(shì),原生云意味著將云目標(biāo)從IT成本節(jié)約轉(zhuǎn)向業(yè)務(wù)增長(zhǎng)引擎。敏捷彈性,致力于高效高可用設(shè)計(jì)。在傳統(tǒng)的舊基礎(chǔ)設(shè)施故障時(shí),服務(wù)是可能會(huì)受到影響的。在一個(gè)云原生的世界中,團(tuán)隊(duì)特別關(guān)注冠彈性和高可用進(jìn)行架構(gòu)設(shè)計(jì)。云原生焦點(diǎn)幫助開發(fā)人員和架構(gòu)師謝不受環(huán)境中故障影響的在線系統(tǒng),快速彈性的重建和保持系統(tǒng)可用。靈活擴(kuò)展,云原生應(yīng)用具備多云間擴(kuò)展的靈活性。公有云的廠商綁定現(xiàn)象一直為人詬病,但是使用支持云原生技術(shù)的云平臺(tái),企業(yè)可以將構(gòu)建在任何(公有或私有)云上的應(yīng)用快速遷移,兼具不同云服務(wù)商的優(yōu)勢(shì)服務(wù)能力無需擔(dān)心鎖定3。云原生應(yīng)用的開發(fā),有如下特點(diǎn):(一)容器與編排容器化是指將應(yīng)用整合到容器中并且運(yùn)行起來的這個(gè)過程。容器是為應(yīng)用而生的,能夠簡(jiǎn)化應(yīng)用的構(gòu)建、部署和運(yùn)行過程。用戶將應(yīng)用及其所需的所有配置、依賴關(guān)系和環(huán)境變量打包成容器鏡像,使應(yīng)用不再受環(huán)境限制,可以在不同的環(huán)境下輕松移植。容器編排提供高性能可伸縮的容器應(yīng)用管理能力,為容器化應(yīng)用提供了全生命周期的管理,如應(yīng)用的發(fā)布與回滾、應(yīng)用配置管理等;容器編排可以根據(jù)應(yīng)用請(qǐng)求的資源量在容器集群中選擇合適的節(jié)點(diǎn)來調(diào)度資源,對(duì)于負(fù)載過高的業(yè)務(wù)進(jìn)行彈性擴(kuò)容;通過檢測(cè)容器集群中所有節(jié)點(diǎn),自動(dòng)隔離故障節(jié)點(diǎn)并將應(yīng)用遷移,使應(yīng)用系統(tǒng)具備較強(qiáng)的自愈能力,極大簡(jiǎn)化了運(yùn)維管理的復(fù)雜程度。(二)微服務(wù)化微服務(wù)化是一種這種開發(fā)的風(fēng)格和方法,以開發(fā)一組小型服務(wù)的方式來開發(fā)一個(gè)獨(dú)立的應(yīng)用系統(tǒng)。其中每個(gè)小型服務(wù)都運(yùn)行在自己的進(jìn)行中,采用輕量的機(jī)制來相互通信。這些服務(wù)圍繞業(yè)務(wù)功能進(jìn)行構(gòu)建,并能通過全自動(dòng)的部署機(jī)制來進(jìn)行獨(dú)立部署。這些微服務(wù)可以使用不同的語言來編寫,并且可以使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)。服務(wù)之間是松耦合的,可以獨(dú)立地對(duì)每個(gè)服務(wù)進(jìn)行升級(jí)、部署、擴(kuò)展和重啟等操作,從而可以實(shí)現(xiàn)頻繁的迭代更新。微服務(wù)技術(shù)天生支持快速迭代、彈性擴(kuò)展的特點(diǎn),使企業(yè)能夠在不確定性下提升發(fā)展速度及抗風(fēng)險(xiǎn)能力。微服務(wù)化的應(yīng)用易于開發(fā)和維護(hù),一個(gè)微服務(wù)只關(guān)注一個(gè)特定的業(yè)務(wù)功能,業(yè)務(wù)清晰、代碼量較少,開發(fā)和維護(hù)單個(gè)微服務(wù)相對(duì)簡(jiǎn)單。而整個(gè)應(yīng)用是由若干個(gè)微服務(wù)構(gòu)建而成的,所以整個(gè)應(yīng)用很容易維持在一個(gè)可控狀態(tài)。微服務(wù)技術(shù)棧不受限制。在微服務(wù)架構(gòu)中,可以結(jié)合項(xiàng)目業(yè)務(wù)及團(tuán)隊(duì)的特點(diǎn),合理地選擇技術(shù)棧。例如某些服務(wù)可使用關(guān)系型數(shù)據(jù)庫MySQL;某些微服務(wù)有圖形計(jì)算的需求,可以使用Neo4j。微服務(wù)雖然有很多吸引人的地方,但它并不是銀彈。使用微服務(wù)架構(gòu)面臨很多挑戰(zhàn),如其運(yùn)維要求較高,因?yàn)楦嗟姆?wù)意味著更多的運(yùn)維投入。在單體架構(gòu)中,只需要保證一個(gè)應(yīng)用的正常運(yùn)行。而在微服務(wù)中,需要保證幾十甚至幾百個(gè)服務(wù)服務(wù)的正常運(yùn)行與協(xié)作,這給運(yùn)維帶來了很大的挑戰(zhàn)。對(duì)使用微服務(wù)構(gòu)建的分布式系統(tǒng)而言,系統(tǒng)容錯(cuò)、網(wǎng)絡(luò)延遲、分布式事務(wù)等都會(huì)帶來巨大的挑戰(zhàn)。目前微服務(wù)架構(gòu)也在不斷演進(jìn),從初代侵入式架構(gòu),到非侵入式服務(wù)網(wǎng)格,再到當(dāng)前火熱的利用Serverless來架構(gòu)微服務(wù)的多運(yùn)行時(shí)微服務(wù)架構(gòu)(Muti-RuntimeMicroservices),微服務(wù)架構(gòu)能力更加全面,進(jìn)一步降低了云原生應(yīng)用的開發(fā)難度。計(jì)算存儲(chǔ)分離云原生業(yè)務(wù)應(yīng)用部分往往設(shè)計(jì)成無狀態(tài)的,相比起邏輯較簡(jiǎn)單的存儲(chǔ)部分,運(yùn)行時(shí)出現(xiàn)錯(cuò)誤概率較高,計(jì)算存儲(chǔ)分離的架構(gòu)使得計(jì)算部分的故障恢復(fù)變得簡(jiǎn)單,從而使系統(tǒng)更加健壯。分離后的架構(gòu)職責(zé)清晰,從業(yè)務(wù)負(fù)載來看,將計(jì)算與存儲(chǔ)負(fù)載解耦,消除了存儲(chǔ)負(fù)載和計(jì)算負(fù)載對(duì)資源訴求的不平衡;從資源調(diào)度來看,計(jì)算資源、存儲(chǔ)資源獨(dú)立靈活的擴(kuò)展,通過共享存儲(chǔ)池,減少副本數(shù)實(shí)現(xiàn)降低成本,提高整個(gè)系統(tǒng)的資源利用率;在云環(huán)境中,集中云上存儲(chǔ)能更容易的提供數(shù)據(jù)保護(hù)、精簡(jiǎn)配置、快照克隆、重刪壓縮、自動(dòng)分層等企業(yè)級(jí)存儲(chǔ)服務(wù)。(四)服務(wù)網(wǎng)關(guān)服務(wù)網(wǎng)關(guān)是一個(gè)服務(wù)器,是系統(tǒng)的唯一入口,其對(duì)系統(tǒng)內(nèi)部架構(gòu)進(jìn)行封裝,為每個(gè)客戶端提供一個(gè)定制的API。服務(wù)網(wǎng)關(guān)核心要點(diǎn)是,所有的客戶端都通過統(tǒng)一的網(wǎng)關(guān)接入微服務(wù),并在網(wǎng)關(guān)層處理所有的非業(yè)務(wù)功能。服務(wù)網(wǎng)關(guān)負(fù)責(zé)請(qǐng)求轉(zhuǎn)發(fā)、合成和協(xié)議轉(zhuǎn)換。在云原生應(yīng)用中,服務(wù)網(wǎng)關(guān)有以下幾個(gè)優(yōu)點(diǎn):與微服務(wù)注冊(cè)中心連接,實(shí)現(xiàn)服務(wù)無感知擴(kuò)縮;服務(wù)網(wǎng)關(guān)對(duì)于無法訪問的服務(wù),可以做到自動(dòng)熔斷;方便的實(shí)現(xiàn)應(yīng)用的藍(lán)綠部署、金絲雀發(fā)布或A/B發(fā)布。(五)分布式事務(wù)模式傳統(tǒng)的企業(yè)開發(fā)系統(tǒng)往往是以單體應(yīng)用形式存在的,不會(huì)橫跨多個(gè)數(shù)據(jù)庫。云原生時(shí)代應(yīng)用的分布化使得企業(yè)無可避免的要面對(duì)分布式架構(gòu)帶來的數(shù)據(jù)一致性問題。由于大型云原生應(yīng)用往往是由一系列分布式應(yīng)用構(gòu)成的,開發(fā)語言和技術(shù)棧也相對(duì)比較繁雜。在微服務(wù)架構(gòu)盛行的今天,一個(gè)看起來簡(jiǎn)單的功能,內(nèi)部可能需要調(diào)用多個(gè)服務(wù)并操作多個(gè)數(shù)據(jù)庫或分片來實(shí)現(xiàn),這樣必然帶來分布式事務(wù)問題。所以在進(jìn)行云原生應(yīng)用設(shè)計(jì)時(shí)需要考慮分布式事務(wù)模式。云原生的解決方案是將分布式事務(wù)問題從業(yè)務(wù)中剝離出來,作為一個(gè)獨(dú)立的技術(shù)面來單獨(dú)管理,以服務(wù)的形式給構(gòu)建在云上的應(yīng)用提供簡(jiǎn)單、易用、高效的解決方案,使開發(fā)者專注于業(yè)務(wù)邏輯的設(shè)計(jì)和開發(fā),不需要考慮分布式事務(wù)的問題,從而加快項(xiàng)目交付、迭代的速度。(六)業(yè)務(wù)服務(wù)無狀態(tài)化狀態(tài)化的判斷是指兩個(gè)來自相同發(fā)起者的請(qǐng)求在服務(wù)器端是否具備上下文關(guān)系。無狀態(tài)服務(wù)是指該服務(wù)運(yùn)行的實(shí)例不會(huì)在本地存儲(chǔ)需要持久化的數(shù)據(jù),并且多個(gè)實(shí)例對(duì)于同一個(gè)請(qǐng)求響應(yīng)的結(jié)果是完全一致的。當(dāng)訪問該服務(wù)的請(qǐng)求到達(dá)服務(wù)一端后,負(fù)載均衡會(huì)隨機(jī)找到一個(gè)實(shí)例來完成該請(qǐng)求的響應(yīng)。這類服務(wù)的實(shí)例可能會(huì)因?yàn)橐恍┰蛲V够蛘咧匦聞?chuàng)建(如擴(kuò)容時(shí))。這時(shí),這些停止的實(shí)例里的所有信息(除日志和監(jiān)控?cái)?shù)據(jù)外)都將丟失(重啟容器即會(huì)丟失)。云原生應(yīng)用為了承載高并發(fā),往往拆分成多組進(jìn)程,每組進(jìn)程完成特定的工作,根據(jù)并發(fā)量用多個(gè)副本公共承擔(dān)流量壓力。如果狀態(tài)全部保存在本地,會(huì)給架構(gòu)的橫向擴(kuò)展帶來瓶頸。所以要將云原生應(yīng)用的業(yè)務(wù)邏輯的部分設(shè)計(jì)成無狀態(tài)的,這樣無狀態(tài)的部分可以很容易的橫向擴(kuò)展,在用戶分發(fā)的時(shí)候,可以很容易分發(fā)到新的進(jìn)程進(jìn)行處理,而狀態(tài)保存到后端。四、云原生中間件十要素中間件的使命是服務(wù)于上層應(yīng)用系統(tǒng),第三章節(jié)討論了云原生應(yīng)用開發(fā)的特點(diǎn),為了設(shè)計(jì)出能更好支撐云原生應(yīng)用的中間件,我們從基礎(chǔ)資源、設(shè)計(jì)原則、運(yùn)行時(shí)狀態(tài)、呈現(xiàn)形態(tài)3個(gè)維度抽象出以下十個(gè)關(guān)鍵要素。(一)容器原生云生CloudNative架構(gòu)部署容器(Containerization)云原生中間件應(yīng)進(jìn)行云原生架構(gòu)設(shè)計(jì),以容器化形式進(jìn)行服務(wù)部署。容器化部署可支持中間件服務(wù)快速啟動(dòng),可以靈活完成服務(wù)及資源的擴(kuò)縮容。容器隔離了用戶底層IaaS資源的差異,利用容器編排可輕松實(shí)現(xiàn)多實(shí)例(MultipleServiceInstances)部署;容器原生的中間件應(yīng)用程序和容器鏡像占用更少的資源,對(duì)于多容器部署的場(chǎng)景有更好的優(yōu)化策略,提升基礎(chǔ)資源利用率。(二)服務(wù)狀態(tài)有態(tài)(StatefU和無態(tài)(StatelesS服^分離在云原生時(shí)代,中間件架構(gòu)設(shè)計(jì)時(shí)需要定義服務(wù)的狀態(tài):有狀態(tài)部分和無狀態(tài)部分。無狀態(tài)部分主要伴隨業(yè)務(wù)邏輯的產(chǎn)生,如服務(wù)間通信、鏈路跟蹤等。無狀態(tài)服務(wù)是指該服務(wù)運(yùn)行的實(shí)例不會(huì)在本地存儲(chǔ)數(shù)據(jù),并且多個(gè)實(shí)例對(duì)于同一個(gè)請(qǐng)求響應(yīng)的結(jié)果是完全一致的有狀態(tài)部分是指該中間件可以產(chǎn)生并存儲(chǔ)數(shù)據(jù)并且在創(chuàng)建一個(gè)新的有狀態(tài)服務(wù)時(shí),可以通過備份恢復(fù)這些數(shù)據(jù),以達(dá)到數(shù)據(jù)持久化的目的。所以將狀態(tài)保存在有狀態(tài)的中間件中,如分布式緩存、消息隊(duì)列等。無狀態(tài)的業(yè)務(wù)邏輯部分可以很容易的橫向擴(kuò)展,在用戶分發(fā)的時(shí)候,可以很容易分發(fā)到新的進(jìn)程進(jìn)行處理。在有狀態(tài)中間件設(shè)計(jì)時(shí),應(yīng)考慮擴(kuò)容時(shí)狀態(tài)的遷移、復(fù)制、同步等機(jī)制,以更好的支撐無狀態(tài)的業(yè)務(wù)層。(三)組件模塊化組件模塊(ComponentModule)云原生中間件設(shè)計(jì)時(shí)應(yīng)考慮可插拔、松耦合、可動(dòng)態(tài)編排的組件化特征。每個(gè)組件都是高度抽象的、自包含的、封閉的并和其它的件相有一定的邏輯隔離,使得不同的角色專注于其擅長(zhǎng)領(lǐng)域的工作。開發(fā)人員可以通過組合模塊的形式調(diào)度涉及到中間件,快速支撐業(yè)務(wù),適用系統(tǒng)的運(yùn)行時(shí)特征。松耦合的中間件讓開發(fā)人員可以在處理每個(gè)中間件時(shí)都能夠獨(dú)立于其他中間件來工作。云原生中間件通過功能_的分離,對(duì)外提供統(tǒng)一的應(yīng)用程序編程接口API)供開發(fā)人員調(diào)用,使開發(fā)者可以專注于每項(xiàng)服務(wù)的核心功能,以提供細(xì)粒度的功能。(四)事件驅(qū)動(dòng)采用事件^^架S^(Event-DrivenArchitecture)事件驅(qū)動(dòng)架構(gòu)作為一種應(yīng)用間集成模式,天然適合云原生中間件的調(diào)度和集成。在事件驅(qū)動(dòng)的體系結(jié)構(gòu)中,當(dāng)服務(wù)執(zhí)行其他中間件可能感興趣的工作時(shí),該服務(wù)將生成一個(gè)事件。其他服務(wù)使用這些事俄而執(zhí)行由該事件觸發(fā)的任務(wù)。事件成為了可以被消費(fèi)的對(duì)象,而不僅僅是在函數(shù)間傳遞的臨時(shí)參數(shù),從而可以同時(shí)被多個(gè)中間件消費(fèi)。中間件不需要直接和生成事件的服務(wù)進(jìn)行交互,僅通過監(jiān)聽事件,觸發(fā)對(duì)應(yīng)的操作,從而降低了服務(wù)內(nèi)部的復(fù)雜度。事件驅(qū)動(dòng)架構(gòu)具備以下優(yōu)點(diǎn):異步:基于事件的架構(gòu)是異步的,沒有阻塞。這使得中間件可以在工作單元完成后自由地轉(zhuǎn)移到下一個(gè)任務(wù),而不用擔(dān)心之前發(fā)生了什么或者接下來會(huì)發(fā)生什么。松耦合:中間件之間不需要也不應(yīng)該)知道或依賴于其他服務(wù)。事件模型下的中間件可以獨(dú)立的、更容易的更新、測(cè)試和部署。易于擴(kuò)展:由于服務(wù)在事件驅(qū)動(dòng)的體系結(jié)構(gòu)下解耦,而且服務(wù)通常只執(zhí)行一項(xiàng)任務(wù),因此跟蹤特定服務(wù)的瓶頸,并對(duì)該服務(wù)(且僅對(duì)該服務(wù))進(jìn)行擴(kuò)展變得很容易?;謴?fù)支持:帶有隊(duì)列的事件驅(qū)動(dòng)架構(gòu)可以通過“重播”過去的事件來恢復(fù)丟失的工作。當(dāng)用戶需要恢復(fù)時(shí),這對(duì)于防止數(shù)據(jù)丟失非常有用。(五)可觀測(cè)可觀測(cè)(Observab)e在由微服務(wù)和容器等技術(shù)形成的高度復(fù)雜的應(yīng)用系統(tǒng)運(yùn)行態(tài)中,可觀測(cè)性成為云原生中間件必須具備的能九可觀測(cè)性包含了監(jiān)控、告警、日志聚合、分布式跟蹤和依賴分析等部分,通過收集處理數(shù)據(jù)來定位問題,并簡(jiǎn)化信息的訪問,實(shí)時(shí)深入的觀察整個(gè)應(yīng)用系統(tǒng)的健康狀態(tài),從業(yè)務(wù)資源計(jì)量等多個(gè)維度進(jìn)行度量。日志、指標(biāo)和請(qǐng)求跟蹤是可觀測(cè)性的基礎(chǔ)。從CNCF早期畢業(yè)的項(xiàng)目Prometheus就是一個(gè)用于觀測(cè)服務(wù)的云原生監(jiān)控工具。由此可見可觀測(cè)性在云原生技術(shù)中的重要性。Prometheus幾乎可以監(jiān)控所有內(nèi)容,它還整合了像Grafana這樣主流的可視化工具。韌性設(shè)計(jì)云生中間W備韌性(Resiliency)具備韌性設(shè)計(jì)的中間件具有高延時(shí)寬容、容錯(cuò)和故障恢復(fù)邏輯??梢苑乐惯B鎖故障,允許快速失敗和快速恢復(fù),且具備較強(qiáng)的系統(tǒng)自愈能力和抵抗外部沖擊,為其上層運(yùn)行的應(yīng)用系統(tǒng)提供高性能、高容錯(cuò)、高安全地支撐。設(shè)計(jì)具有韌性設(shè)計(jì)的中間件,必須從兩個(gè)方面考慮:在最初設(shè)計(jì)和規(guī)劃時(shí),考慮中間件自身的在不同場(chǎng)景下的健壯性和魯棒性。針對(duì)系統(tǒng)在運(yùn)行過程中,可能出現(xiàn)導(dǎo)致程序崩潰的各種情況的應(yīng)對(duì)能力,如計(jì)算機(jī)軟件在輸入錯(cuò)誤、磁盤故障、網(wǎng)絡(luò)過載或有意攻擊情況下,如何保障系統(tǒng)安全、穩(wěn)定運(yùn)行的措施、設(shè)計(jì)等。中間件的功能和特性在設(shè)計(jì)時(shí),應(yīng)兼顧外圍應(yīng)用系統(tǒng)的適應(yīng)能力。因此,基于云原生架構(gòu)設(shè)計(jì)應(yīng)用的同時(shí),選擇具有熔斷機(jī)制的微服務(wù)治理框架,將在整體上為云原生應(yīng)用提供系統(tǒng)魯棒性,包括超時(shí)、重試、限流、服務(wù)降級(jí)等方式,從而降低整個(gè)系統(tǒng)崩潰的風(fēng)險(xiǎn)。彈性伸縮資源可展(scalabili),服^可t性(Elasticity)可擴(kuò)展指中間件具備資源按需動(dòng)態(tài)伸縮能力,在保證業(yè)務(wù)連續(xù)性前提下,可以獨(dú)立于其他服務(wù)對(duì)于底層資源進(jìn)行擴(kuò)展或者收縮。隨著流量,需求和使用量的增加,中間件應(yīng)用應(yīng)具有彈性。彈性意味著當(dāng)資源根據(jù)需求按比例地減少或者增加時(shí),系統(tǒng)的吞吐量將自動(dòng)地向下或者向上縮放,從而滿足不同的需求。彈性是建立在可擴(kuò)展的基礎(chǔ)之上的,并通過添加自動(dòng)的資源管理概念對(duì)其進(jìn)行了擴(kuò)充。動(dòng)態(tài)部署月服務(wù)生命周期的動(dòng)態(tài)部署(DynamicDeploymen)云原生中間件具備服務(wù)全生命周期的動(dòng)態(tài)部署與發(fā)布能力,在完成開發(fā)構(gòu)建之后,能夠以多種策略進(jìn)行發(fā)布,如滾動(dòng)發(fā)布、灰度發(fā)布、藍(lán)綠發(fā)布等;具備多種部署策略,如批量并發(fā)部署、任務(wù)定時(shí)部署、分階段部署等;具有版本控制功能,如版本追溯與回滾。由于云原生中間件具備獨(dú)立的運(yùn)行進(jìn)程,每個(gè)中間件也可以獨(dú)立動(dòng)態(tài)的部署。當(dāng)某個(gè)中間件發(fā)生變更時(shí)無需編譯、部署整個(gè)應(yīng)用。如果應(yīng)用需要多個(gè)中間件來進(jìn)行支撐,那么多個(gè)中間件具備一系列可并行的發(fā)布流程,使得發(fā)布更加高效,同時(shí)降低對(duì)生產(chǎn)環(huán)境所造成的風(fēng)險(xiǎn),最終縮短應(yīng)用交付周期。統(tǒng)一響應(yīng)式與聲明式的API將^^應(yīng)式API與聲明式API統(tǒng)一(UnifiesReactiveandDeclarativeAPI)云原生中間件承擔(dān)了運(yùn)行時(shí)為應(yīng)用動(dòng)態(tài)賦能的重任,應(yīng)用與中間件以API調(diào)用的形式進(jìn)行通信與控制。響應(yīng)式API描述為了達(dá)到某一個(gè)效果或者目標(biāo)所需要完成的指令;聲明式API描述的是應(yīng)用期望的目標(biāo)狀態(tài)發(fā)出的指令。根據(jù)云原生的理念,應(yīng)用無需知道下層中間件及資源的具體實(shí)現(xiàn)方式。聲明式API即可使中間件在調(diào)用時(shí)無需關(guān)注實(shí)現(xiàn)細(xì)節(jié),在應(yīng)用運(yùn)行時(shí)動(dòng)態(tài)賦予。大多數(shù)開發(fā)人員都熟悉命令式編程模,并希望在云原生應(yīng)用開發(fā)時(shí)利用這種經(jīng)驗(yàn)。同時(shí),開發(fā)人員正在采用容器、事件驅(qū)動(dòng)和微服務(wù)模型來進(jìn)行應(yīng)用的開發(fā),以構(gòu)建高度并發(fā)的應(yīng)用程序。云原生時(shí)代的中間件開發(fā),應(yīng)將兩種開發(fā)模型無縫地集成在同一個(gè)平臺(tái)中,從而在一個(gè)組織中產(chǎn)生強(qiáng)大的杠桿作用。(十)平臺(tái)化以云平臺(tái)(CloudPlanfo)m的形式提供服務(wù)將中間件功能下沉到基礎(chǔ)設(shè)施,以云平臺(tái)的形式對(duì)外輸出能力,提供中間件的接口供用戶按需調(diào)用,用戶無需關(guān)注中間件服務(wù)的下層資源調(diào)度與運(yùn)維,更加聚焦輕量級(jí)的業(yè)務(wù)應(yīng)用。五、云原生中間件典型服務(wù)(一)分布式消息隊(duì)列分布式消息系統(tǒng)是指的利用高效可靠的消息傳遞機(jī)制進(jìn)行平臺(tái)無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的集成的服務(wù)。消息隊(duì)列是在消息的傳輸過程中保存消息的容器。消息隊(duì)列管理器在將消息從它的源中繼到它的目標(biāo)時(shí)充當(dāng)中間人。隊(duì)列的主要目的是提供路由并保證消息的傳遞;如果發(fā)送消息時(shí)接收者不可用,消息隊(duì)列會(huì)保留消息,直到可以成功地傳遞它。通過提供消息傳遞和消息排隊(duì)模型,它可在分布環(huán)境下擴(kuò)展進(jìn)程間的通信,并支持多通訊協(xié)議、語言、應(yīng)用程序、硬件和軟件平臺(tái),實(shí)現(xiàn)應(yīng)用系統(tǒng)之間的可靠異步消息通信能夠保障數(shù)據(jù)在復(fù)雜的網(wǎng)絡(luò)中高效、穩(wěn)定、安全、可靠的傳輸。當(dāng)前主流的消息隊(duì)列有RocketMQ、Kafka、Pulsar、RabitMQ等。RocketMQ是阿里巴巴研發(fā)的一款低延遲、高可靠、可伸縮、易于使用的消息中間件。RocketMQ由阿里巴巴貢獻(xiàn)給了Apache基金會(huì)并于2017年成為頂級(jí)開源項(xiàng)目。RocketMQ由Java語言開發(fā),采用發(fā)布一訂閱模式傳遞消息,具有高效靈活的水平擴(kuò)展能力和海量消息堆積能力,近年來逐漸獲得國內(nèi)外企業(yè)的認(rèn)可。Kafka是由LinkedIn公司開發(fā)的一個(gè)高吞吐量的分布式消息系統(tǒng),開發(fā)它的目標(biāo)是為處理實(shí)時(shí)數(shù)據(jù)提供一個(gè)統(tǒng)一、高通量、低等待的平臺(tái)。Kafka最大的特性就是可以實(shí)時(shí)地處理大量數(shù)據(jù)以滿足各種需求場(chǎng)景。Kafka由Scala語言開發(fā),其客戶端在主流的編程語言里面都有對(duì)應(yīng)的支持,如Scala、C++、Python、Java、GO、PHP等。Kafka由LinkedIn于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級(jí)開源項(xiàng)目。Pulsar是由Yahoo開發(fā)的Pub-Sub模式的分布式消息平臺(tái),在2016年開源,并于2018年9月畢業(yè)成為Apache基金會(huì)的頂級(jí)項(xiàng)目。其擁有靈活的消息模型和直觀的客戶端API,是一種用于服務(wù)器到服務(wù)器消息傳遞的多租戶高性能解決方案。RabbitMQ是一個(gè)基于高級(jí)消息隊(duì)列協(xié)議實(shí)現(xiàn)的消息系統(tǒng),其服務(wù)器端用Erlang語言編寫,支持多種客戶端,如Python、.NET、PHP、Java、JMS等。RabbitMQ在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)優(yōu)良4。(一) 分布式事務(wù)系統(tǒng)云原生應(yīng)用對(duì)大規(guī)模的事務(wù)處理有著較為苛刻的需求。事務(wù)處理監(jiān)控界于Client和Server之間,進(jìn)行事務(wù)管理與協(xié)調(diào)、負(fù)載平衡、失敗恢復(fù)等,以提高系統(tǒng)的整體性能。分布式事務(wù)系統(tǒng)中間件適用于聯(lián)機(jī)交易處理系統(tǒng),主要功能是管理分布于不同計(jì)算機(jī)上的數(shù)據(jù)的一致性,保障系統(tǒng)處理能力的效率與均衡負(fù)載。業(yè)界著名的CAP理論告訴我們,在設(shè)計(jì)和實(shí)現(xiàn)一個(gè)分布式系統(tǒng)時(shí),需要將數(shù)據(jù)一致性、系統(tǒng)可用性和分區(qū)容忍性放在一起考慮。而在布式系統(tǒng)中,一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(PartitionTolerance)這3個(gè)要素最多只能同時(shí)滿足兩個(gè)。一致性是指分布式環(huán)境下多個(gè)節(jié)點(diǎn)的數(shù)據(jù)是否強(qiáng)一致。可用性是指分布式服務(wù)能一直保證可用狀態(tài)。當(dāng)用戶發(fā)出一個(gè)請(qǐng)求后,服務(wù)能在有限計(jì)間內(nèi)返回結(jié)果。分區(qū)容忍性特指對(duì)網(wǎng)絡(luò)分區(qū)的容忍性。分布式事務(wù)4鄭立,陳屹力,劉如明,等基于開源的消息隊(duì)列云服務(wù)研超].信息通信技術(shù)與政策2020(5):52-56.中間件的目的是保障分布式存儲(chǔ)中數(shù)據(jù)一致性,而跨庫事務(wù)會(huì)遇到各種不可控制的問題,如個(gè)別節(jié)點(diǎn)宕機(jī)。目前主流的分布式事務(wù)解決方案有:a) TCC補(bǔ)償型事務(wù)解決方案TCC指的是Try(嘗試)、Confirm(確認(rèn))、Cancel(取消),其核心思想是:針對(duì)每個(gè)操作,都要注冊(cè)一個(gè)與其對(duì)應(yīng)的確認(rèn)和補(bǔ)償(撤銷)操作。它分為三個(gè)階段:Try階段主要是對(duì)業(yè)務(wù)系統(tǒng)做檢測(cè)及資源預(yù)留Confirm階段主要是對(duì)業(yè)務(wù)系統(tǒng)做確認(rèn)提交,Try階段執(zhí)行成功并開始執(zhí)行Confirm階段時(shí),默認(rèn)Confirm階段是不會(huì)出錯(cuò)的。即:只要Try成功,Confirm—定成功。Cancel階段主要是在業(yè)務(wù)執(zhí)行錯(cuò)誤,需要回滾的狀態(tài)下執(zhí)行的業(yè)務(wù)取消,預(yù)留資源釋放。b) 兩階段提交兩階段提交(Two-phaseCommit,2PC),通過引入?yún)f(xié)調(diào)者來協(xié)調(diào)參與者的行為,并最終決定這些參與者是否要真正執(zhí)行事務(wù)。c) 本地消息表本地消息表與業(yè)務(wù)數(shù)據(jù)表處于同一個(gè)數(shù)據(jù)庫中,這樣就能利用本地事務(wù)來保證在對(duì)這兩個(gè)表的操作滿足事務(wù)特性,并且使用了消息隊(duì)列來保證最終一致性。在分布式事務(wù)操作的一方完成寫業(yè)務(wù)數(shù)據(jù)的操作之后向本地消息表發(fā)送一個(gè)消息,本地事務(wù)能保證這個(gè)消息一定會(huì)被寫入本地消息表中。之后將本地消息表中的消息轉(zhuǎn)發(fā)到Kafka等消息隊(duì)列中,如果轉(zhuǎn)發(fā)成功則將消息從本地消息表中刪除,否則繼續(xù)重新轉(zhuǎn)發(fā)。在分布式事務(wù)操作的另一方從消息隊(duì)列中讀取一個(gè)消息,并執(zhí)行消息中的操作。(三)分布式配置服務(wù)隨著業(yè)務(wù)的發(fā)展,微服務(wù)的數(shù)量、程序的配置日益增多(各種微服務(wù)、服務(wù)器地址、參數(shù)等),傳統(tǒng)的配置文件方式和數(shù)據(jù)庫的方式已無法滿足開發(fā)人員對(duì)配置管理的要求,如配置修改后實(shí)時(shí)生效、灰度發(fā)布、分環(huán)境管理配置、完善的權(quán)限審核機(jī)制等。因此,需要配置中心來統(tǒng)一管理配置,把業(yè)務(wù)開發(fā)者從復(fù)雜以及繁瑣的配置中解脫出來,只需專注于業(yè)務(wù)代碼本身,從而能夠顯著提升開發(fā)以及運(yùn)維效率。同時(shí)將配置和發(fā)布包解藕也進(jìn)一步提升發(fā)布的成功率,并為運(yùn)維的細(xì)力度管控、應(yīng)急處理等提供強(qiáng)有力的支持。在云原生環(huán)境中,同類型的服務(wù)往往會(huì)部署到很多個(gè)實(shí)例上。分布式配置管理服務(wù)可以輕松地管理成千上百個(gè)服務(wù)實(shí)例的配置問題。分布式配置服務(wù)有以下特點(diǎn):權(quán)限控制。為開發(fā)人員賦予不同的配置權(quán)限。審計(jì)日志。所有的修改需要記錄操作日志,方便問題溯源。環(huán)境管理。對(duì)開發(fā)、測(cè)試、生成環(huán)境下的配置進(jìn)行隔離。配置回滾。當(dāng)發(fā)現(xiàn)配置錯(cuò)誤,或者在該配置下程序發(fā)生異??梢粤⒓椿貪L到之前的版本?;叶劝l(fā)布。通過隨機(jī)修改部分應(yīng)用的配置進(jìn)行灰度發(fā)布,當(dāng)測(cè)試正常后在推送到所有的應(yīng)用。高可用。在配置服務(wù)出現(xiàn)問題時(shí),應(yīng)用可以使用本地緩存配置。(四)API網(wǎng)關(guān)API網(wǎng)關(guān)將各系統(tǒng)對(duì)外提供服務(wù)的微服務(wù)聚合起來,所有要調(diào)用這些服務(wù)的請(qǐng)求都需要通過API網(wǎng)關(guān)進(jìn)行,基于這種方式網(wǎng)關(guān)可以對(duì)API進(jìn)行統(tǒng)一管控,例如:認(rèn)證、鑒權(quán)、流量控制、協(xié)議轉(zhuǎn)換、監(jiān)控等等。API網(wǎng)關(guān)的流行得益于近幾年微服務(wù)架構(gòu)的興起,原本一個(gè)龐大的業(yè)務(wù)系統(tǒng)被拆分成許多粒度更小的系統(tǒng)進(jìn)行獨(dú)立部署和維護(hù),這種模式勢(shì)必會(huì)帶來更多的跨系統(tǒng)交互,企業(yè)API的規(guī)模也會(huì)成倍增加,API網(wǎng)關(guān)就逐漸成為了微服務(wù)架構(gòu)的標(biāo)配組件。其主要功能如下:提供防攻擊、防重放、請(qǐng)求加密、身份認(rèn)證、權(quán)限管理、流量控制等多重手段保證API安全,降低API開放風(fēng)險(xiǎn)。提供API定義、測(cè)試、發(fā)布、下線等全生命周期管理,并生成SDK、API說明文檔,提升API管理、迭代的效率。提供便捷的監(jiān)控、報(bào)警、分析、API市場(chǎng)等運(yùn)維、運(yùn)營工具,降低API運(yùn)營、維護(hù)成本。使用API網(wǎng)關(guān)的最大優(yōu)點(diǎn)是,它封裝了應(yīng)用程序的內(nèi)部結(jié)構(gòu)。餐端只需要同網(wǎng)關(guān)交互,而不必調(diào)用特定的服務(wù)API網(wǎng)關(guān)為每一類客戶端提供了特定的API。這減少了客戶端與應(yīng)用程序間的交互次數(shù),還簡(jiǎn)化了客戶端代碼。(五)分布式緩存隨著互聯(lián)網(wǎng)的飛速發(fā)展,各行各業(yè)對(duì)互聯(lián)網(wǎng)服務(wù)的要求也越來越高,互聯(lián)網(wǎng)系統(tǒng)很多常見的存儲(chǔ)類場(chǎng)景都面臨著容量和穩(wěn)定性風(fēng)險(xiǎn)。此時(shí),本地緩存已無法滿足需要,分布式緩存由于其高性能、高可用性等優(yōu)點(diǎn)迅速許多公司接受并使用。分布式緩存是傳統(tǒng)緩存概念的擴(kuò)展,其中數(shù)據(jù)被放置在本地的臨時(shí)存儲(chǔ)中以便快速檢索。這意味著不同的機(jī)器或服務(wù)器將其緩存內(nèi)存的一部分貢獻(xiàn)到可由多個(gè)節(jié)點(diǎn)和虛擬機(jī)訪問的大型池中。分布式緩存由一個(gè)服務(wù)端實(shí)現(xiàn)管理和控制,有多個(gè)客戶端節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù),可以進(jìn)一步提高數(shù)據(jù)的讀取速率。分布式緩存能夠高性能讀取數(shù)據(jù)、能夠動(dòng)態(tài)地?cái)U(kuò)展緩存節(jié)點(diǎn)、能夠自動(dòng)發(fā)現(xiàn)和切換故

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論