<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          云原生架構(gòu): 服務(wù)網(wǎng)格、混沌工程、用戶態(tài)網(wǎng)絡(luò)

          共 5620字,需瀏覽 12分鐘

           ·

          2020-08-30 23:57

          一、云原生是什么

          隨著云原生的火爆發(fā)展,主流的云廠商陸續(xù)加入社區(qū)運(yùn)作,CNCF官方在2018年重新定義什么是云原生。
          來(lái)自官方的新定義

          云原生技術(shù)有利于在公有云、私有云和混合云等新型動(dòng)態(tài)環(huán)境中,構(gòu)建可彈性擴(kuò)展的應(yīng)用運(yùn)行環(huán)境。

          這些技術(shù)能夠構(gòu)建容錯(cuò)性好、易于管理和便于觀察的松耦合系統(tǒng)。?

          結(jié)合可靠的自動(dòng)化手段,工程師能夠輕松地對(duì)系統(tǒng)作出頻繁和可預(yù)測(cè)的重大變更。

          本文將介紹云原生服務(wù)化新架構(gòu),組合利用幾個(gè)云原生社區(qū)的明星項(xiàng)目實(shí)踐,助力于服務(wù)端生產(chǎn)力解放、提高服務(wù)端新一代基礎(chǔ)架構(gòu)認(rèn)知水平。
          • 服務(wù)網(wǎng)格( Service mesh ):處理服務(wù)間通信的基礎(chǔ)設(shè)施層,負(fù)責(zé)實(shí)現(xiàn)請(qǐng)求的可靠傳遞,通常為輕量級(jí)網(wǎng)絡(luò)代理,與應(yīng)用部署在一起,但是對(duì)應(yīng)用透明。
          • 混沌工程( Chaos Mesh ):運(yùn)作在容器內(nèi)對(duì)生產(chǎn)中的軟件進(jìn)行故障注入,模擬各種故障情況可視化識(shí)別項(xiàng)目缺陷
          • 容器網(wǎng)絡(luò)( Container Network ): 容器間通信的基礎(chǔ)設(shè)施層,負(fù)責(zé)網(wǎng)絡(luò)路由、網(wǎng)絡(luò)策略、負(fù)載均衡等

          將依次講述微服務(wù)架構(gòu)的迭代與Envoy數(shù)據(jù)面板豐富的功能、利用混沌工程故障注入加強(qiáng)健壯性、基于eBPF+XDP實(shí)現(xiàn)用戶態(tài)容器網(wǎng)絡(luò)用于網(wǎng)絡(luò)加速。

          二、服務(wù)網(wǎng)格

          微服務(wù)的架構(gòu)迭代

          許多企業(yè)正在將其應(yīng)用程序演變?yōu)槲⒎?wù)體系結(jié)構(gòu)。在這種模式下,應(yīng)用程序由通過(guò)API進(jìn)行通信的細(xì)粒度服務(wù)組成。
          微服務(wù)有望實(shí)現(xiàn)更快的開(kāi)發(fā)、創(chuàng)新、可擴(kuò)展,更好的基礎(chǔ)架構(gòu)優(yōu)化以及開(kāi)發(fā)人員愉悅的開(kāi)發(fā)過(guò)程。
          這就是這種體系結(jié)構(gòu)得到這么多關(guān)注的原因。但這并不意味著實(shí)施微服務(wù)策略很容易, 如果您正處于此過(guò)程的中則知道它是很復(fù)雜的。

          隨著技術(shù)的發(fā)展,一些面向微服務(wù)架構(gòu)的開(kāi)發(fā)框架出現(xiàn)了:Spring Cloud、Dubbo、go-micro、php-hyperf 等。
          這些框架實(shí)現(xiàn)了分布式系統(tǒng)通信需要的各種通用語(yǔ)義功能:負(fù)載均衡、服務(wù)發(fā)現(xiàn)、斷路器等,因此一定程度上屏蔽了這些通信細(xì)節(jié),使得開(kāi)發(fā)人員使用較少的框架代碼就能開(kāi)發(fā)出健壯的分布式系統(tǒng)。
          問(wèn)題是:
          • 不同語(yǔ)言間的存在巨大差異
          • 不同的語(yǔ)言社區(qū)的微服務(wù)實(shí)現(xiàn)各不相同
          這導(dǎo)致難以實(shí)現(xiàn)多種語(yǔ)言相互協(xié)作的微服務(wù)架構(gòu),加上各式各樣的rpc框架、服務(wù)發(fā)現(xiàn)、監(jiān)控實(shí)現(xiàn)這讓跨語(yǔ)言的微服務(wù)架構(gòu)寸步難行。
          Service Mesh的新一代服務(wù)架構(gòu)

          Istio是一個(gè)提供服務(wù)網(wǎng)格的開(kāi)源項(xiàng)目。它得到了Google,IBM,Red Hat,Lyft,Cisco, ?Amazon、阿里等公司的支持,并被多家大型互聯(lián)網(wǎng)公司用于生產(chǎn)。Istio使用Sidecar注入Envoy容器的方式,兩個(gè)容器共享網(wǎng)絡(luò)等資源,通過(guò)iptables實(shí)現(xiàn)流量劫持,達(dá)到控制該容器的所有流量。

          ServiceMesh具有如下優(yōu)點(diǎn)

          • 屏蔽分布式系統(tǒng)通信的復(fù)雜性(負(fù)載均衡、服務(wù)發(fā)現(xiàn)、認(rèn)證授權(quán)、監(jiān)控追蹤、流量控制等等),服務(wù)只用關(guān)注業(yè)務(wù)邏輯

          • 真正的與語(yǔ)言無(wú)關(guān),服務(wù)可以用任何語(yǔ)言編寫(xiě),只需和Service Mesh通信即可

          • 對(duì)應(yīng)用透明,Service Mesh組件可以單獨(dú)升級(jí)

          Service Mesh面臨的挑戰(zhàn)

          • Service Mesh組件以代理模式計(jì)算并轉(zhuǎn)發(fā)請(qǐng)求,一定程度上會(huì)降低通信系統(tǒng)性能,并增加系統(tǒng)資源開(kāi)銷

          • ServiceMesh組件接管了網(wǎng)絡(luò)流量,因此服務(wù)的整體穩(wěn)定性依賴于Service Mesh

          下文我們將講述利用現(xiàn)代內(nèi)核新技術(shù)eBPF+XDP加速Service Mesh 數(shù)據(jù)代理面板。

          Envoy:數(shù)據(jù)代理面板

          Envoy是專為大型現(xiàn)代SOA(面向服務(wù)架構(gòu))架構(gòu)設(shè)計(jì)的L7代理和通信總線。該項(xiàng)目源于以下理念:

          網(wǎng)絡(luò)對(duì)應(yīng)用程序來(lái)說(shuō)應(yīng)該是透明的。當(dāng)網(wǎng)絡(luò)和應(yīng)用程序出現(xiàn)問(wèn)題時(shí),應(yīng)該很容易確定問(wèn)題的根源。

          兩大優(yōu)點(diǎn)
          • envoy 可以與任何應(yīng)用程序語(yǔ)言配合使用,面向服務(wù)架構(gòu)使用多個(gè)應(yīng)用程序框架和語(yǔ)言的趨勢(shì)越來(lái)越普遍。
          • envoy 可以透明地在整個(gè)基礎(chǔ)架構(gòu)上快速部署和升級(jí)。

          高級(jí)負(fù)載均衡算法

          • Weight Round robin:每個(gè)健康的上游主機(jī)按循環(huán)順序選擇, 如果將權(quán)重分配給本地的端點(diǎn),則使用加權(quán)round robin調(diào)度
          • Weighted least request:使用O(1) 算法選擇兩個(gè)隨機(jī)健康主機(jī),并選擇主動(dòng)請(qǐng)求較少的主機(jī)
          • Google Maglev Hasing:與環(huán)形散列算法相比,Maglev 具有快得多的查表編譯時(shí)間以及主機(jī)選擇時(shí)間
          • Random: ?選擇一個(gè)隨機(jī)的健康主機(jī)。如果沒(méi)有配置健康檢查策略,則隨機(jī)負(fù)載均衡器通常比 round robin 更好

          基于終端的服務(wù)發(fā)現(xiàn)

          終端發(fā)現(xiàn)服務(wù)(EDS)在 Envoy 中用來(lái)獲取集群成員,集群成員在 Envoy 的術(shù)語(yǔ)中被稱為“終端”,對(duì)于每個(gè)集群Envoy 都會(huì)通過(guò)發(fā)現(xiàn)服務(wù)來(lái)獲取成員的終端。
          由于以下幾個(gè)原因,EDS是首選的服務(wù)發(fā)現(xiàn)機(jī)制:
          • Envoy 對(duì)每個(gè)上游主機(jī)都有明確的了解(與通過(guò) DNS 解析的負(fù)載均衡進(jìn)行路由相比而言),并可以做出更智能的負(fù)載均衡決策。
          • 在每個(gè)主機(jī)的發(fā)現(xiàn) API 響應(yīng)中攜帶的額外屬性通知 Envoy 負(fù)載均衡權(quán)重、金絲雀狀態(tài)、區(qū)域等。這些附加屬性在負(fù)載均衡、統(tǒng)計(jì)信息收集等過(guò)程中會(huì)被 Envoy 網(wǎng)格全局使用。
          許多現(xiàn)有的 RPC 系統(tǒng)將服務(wù)發(fā)現(xiàn)視為完全一致的過(guò)程。使用完全一致的領(lǐng)導(dǎo)選舉算法,如 Zookeeper、etcd (raft)、Consul ?(raft+gossip)等,其實(shí)大規(guī)模使用這些是很痛苦的。Envoy從一開(kāi)始就設(shè)計(jì)服務(wù)發(fā)現(xiàn)不需要完全一致性。相反的Envoy假定主機(jī)以最終一致的方式來(lái)回穿過(guò)網(wǎng)格。

          斷路器

          Envoy網(wǎng)格的主要優(yōu)點(diǎn)之一就是在網(wǎng)絡(luò)級(jí)別強(qiáng)制實(shí)現(xiàn)斷路,而不必為每個(gè)應(yīng)用程序單獨(dú)配置或編程。
          Envoy支持各種類型的完全分布式(非協(xié)調(diào)的)斷路:
          • 集群最大連接數(shù):Envoy將為上游集群中的所有主機(jī)建立的最大連接數(shù)。
          • 集群最大掛起請(qǐng)求數(shù):在等待就緒連接池連接時(shí)將排隊(duì)的最大請(qǐng)求數(shù)。
          • 集群最大請(qǐng)求數(shù):在任何給定時(shí)間內(nèi),集群中所有主機(jī)可以處理的最大請(qǐng)求數(shù)。
          • 集群最大活動(dòng)重試次數(shù):在任何給定時(shí)間內(nèi),集群中所有主機(jī)可以執(zhí)行的最大重試次數(shù)。

          斷路可以根據(jù)每個(gè)上游集群和優(yōu)先級(jí)進(jìn)行配置和跟蹤。這使得分布式系統(tǒng)的不同組件可以獨(dú)立調(diào)整并具有不同的限制。

          三、混沌工程

          為什么需要Chaos Mesh

          Netflix 創(chuàng)建并開(kāi)源了 Chaos 的混沌工程項(xiàng)目,起初將它部署到了 AWS 云上,目的是向基礎(chǔ)設(shè)施以及業(yè)務(wù)系統(tǒng)中注入各類故障類型。
          Chaos Mesh 誕生于 PingCAP ,在PingCAP早期的時(shí)候就開(kāi)始探索混沌工程。結(jié)合k8s與chaos 實(shí)現(xiàn)容器的各種故障注入,并逐漸在其公司內(nèi)部實(shí)踐落地,為其公司核心產(chǎn)品tidb在容器上運(yùn)行提供很好的穩(wěn)定性保障。

          Chaos Mesh能做些什么?

          Chaos Mesh故障注入能力
          • pod-kill:模擬 Kubernetes Pod 被 kill。
          • pod-failure:模擬 Kubernetes Pod 持續(xù)不可用,可以用來(lái)模擬節(jié)點(diǎn)宕機(jī)不可用場(chǎng)景。
          • network-delay:模擬網(wǎng)絡(luò)延遲。
          • network-loss:模擬網(wǎng)絡(luò)丟包。
          • network-duplication: 模擬網(wǎng)絡(luò)包重復(fù)。
          • network-corrupt: 模擬網(wǎng)絡(luò)包損壞。
          • network-partition:模擬網(wǎng)絡(luò)分區(qū)。
          • I/O delay : 模擬文件系統(tǒng) I/O 延遲。
          • I/O errno:模擬文件系統(tǒng) I/O 錯(cuò)誤 。

          Chaos Mesh如何實(shí)現(xiàn)的


          組件工作流原理
          • Controller-manager:目前 controller-manager 可以分為兩部分,一部分 controllers 用于調(diào)度和管理 CRD 對(duì)象實(shí)例,另一部分為 admission-webhooks 動(dòng)態(tài)的給 Pod 注入 sidecar 容器。
          • Chaos-daemon:Chaos-daemon 以 daemonset 的方式運(yùn)行,并具有 Privileged 權(quán)限,Chaos-daemon 可以操作具體 Node 節(jié)點(diǎn)上網(wǎng)絡(luò)設(shè)備以及 Cgroup 等。
          • Sidecar contianer:是一類特殊的容器,由 admission-webhooks 動(dòng)態(tài)的注入到目標(biāo) Pod 中,目前在 Chaos Mesh 中實(shí)現(xiàn)了 chaosfs sidecar 容器,chaosfs 容器內(nèi)會(huì)運(yùn)行 fuse-daemon,用來(lái)劫持應(yīng)用容器的 I/O 操作。
          整體工作流如下:
          1. 用戶通過(guò) YAML 文件或是 Kubernetes 客戶端往 Kubernetes API Server 創(chuàng)建或更新 Chaos 對(duì)象。
          2. Chaos-mesh 通過(guò) watch API Server 中的 Chaos 對(duì)象創(chuàng)建更新或刪除事件,維護(hù)具體 Chaos 實(shí)驗(yàn)的運(yùn)行以及生命周期,在這個(gè)過(guò)程中 controller-manager、chaos-daemon 以及 sidecar 容器協(xié)同工作,共同提供錯(cuò)誤注入的能力。
          3. Admission-webhooks 是用來(lái)接收準(zhǔn)入請(qǐng)求的 HTTP 回調(diào)服務(wù),當(dāng)收到 Pod 創(chuàng)建請(qǐng)求,會(huì)動(dòng)態(tài)修改待創(chuàng)建的 Pod 對(duì)象,例如注入 sidecar 容器到 Pod 中。第3步也可以發(fā)生在第2 步之前,在應(yīng)用創(chuàng)建的時(shí)候運(yùn)行。

          四、用戶態(tài)容器網(wǎng)絡(luò)

          什么是 CNI?

          • Container Network Interface,容器網(wǎng)絡(luò)的 API 接口
          • Kubelet 通過(guò)這個(gè)標(biāo)準(zhǔn)的 API 調(diào)用不同的網(wǎng)絡(luò)插件配實(shí)現(xiàn)置網(wǎng)絡(luò)
          • CNI 插件:一系列實(shí)現(xiàn)了 CNI API 接口的網(wǎng)絡(luò)插件
          用戶態(tài)網(wǎng)絡(luò)的幾種方案
          • OVS CNI:基于Open vSwitch
          • SR-IOV CNI +DPDK: SR-IOV技術(shù)是一種基于硬件的虛擬化解決方案, 允許在虛擬機(jī)之間高效共享PCIe設(shè)備,可以獲得能夠與本機(jī)性能媲美的 I/O性能。
          • Cilium CNI: ?使用最新Linux內(nèi)核技術(shù)創(chuàng)新,基于eBPF+XDP的新技術(shù)

          Cilium基于eBPF實(shí)現(xiàn)

          Cilium 是一個(gè)用于容器網(wǎng)絡(luò)領(lǐng)域的開(kāi)源項(xiàng)目,主要是面向容器而使用,用于提供并透明地保護(hù)應(yīng)用程序工作負(fù)載之間的網(wǎng)絡(luò)連接和負(fù)載均衡。
          Cilium的基礎(chǔ)是一項(xiàng)稱為eBPF的新Linux內(nèi)核技術(shù),它支持在網(wǎng)絡(luò)IO,應(yīng)用程序套接字和跟蹤點(diǎn)等各種集成點(diǎn)將eBPF字節(jié)碼動(dòng)態(tài)插入Linux內(nèi)核,以實(shí)現(xiàn)安全性,網(wǎng)絡(luò)和可見(jiàn)性邏輯,高效且靈活。

          什么是eBPF和XDP?

          eBPF

          BPF(Berkeley Packet Filter)是一種Linux內(nèi)核字節(jié)碼解釋器,用于過(guò)濾網(wǎng)絡(luò)數(shù)據(jù)包,例如用于tcpdump和socket過(guò)濾器。
          BPF程序可以在內(nèi)核中的各個(gè)Hook點(diǎn)運(yùn)行,例如傳入數(shù)據(jù)包、傳出數(shù)據(jù)包、系統(tǒng)調(diào)用、kprobes、uprobes、tracepoint等
          BPF 的兩大核心功能:
          • 過(guò)濾(Filter): 根據(jù)外界輸入的規(guī)則過(guò)濾報(bào)文;
          • 復(fù)制(Copy):將符合條件的報(bào)文由內(nèi)核空間復(fù)制到用戶空間
          在3.17版本內(nèi)核時(shí)全新設(shè)計(jì)了BPF,最終被命名為extended BPF(eBPF),它允許通過(guò)LLVM編譯字節(jié)碼而非之前的匯編。

          Cilium利用eBPF來(lái)執(zhí)行核心數(shù)據(jù)路徑過(guò)濾、處理、監(jiān)視和重定向,并且需要4.14.x 版本Linux內(nèi)核(穩(wěn)定的版本)

          XDP

          XDP(eXpress Data Path),它能夠在網(wǎng)絡(luò)包進(jìn)入用戶態(tài)直接對(duì)網(wǎng)絡(luò)包進(jìn)行過(guò)濾或者處理,XDP依賴eBPF技術(shù)。

          XDP可以從網(wǎng)絡(luò)驅(qū)動(dòng)程序直接訪問(wèn)包的DMA緩沖區(qū)來(lái)運(yùn)行特定風(fēng)格的BPF程序。根據(jù)定義這是棧中最早的一個(gè)點(diǎn),在這里附加程序以便在Linux內(nèi)核網(wǎng)絡(luò)數(shù)據(jù)路徑中使用可編程的、高性能的數(shù)據(jù)包處理器。
          由于eBPF的靈活性和實(shí)用性,Hook的數(shù)量正在激增。將重點(diǎn)放在數(shù)據(jù)路徑較低端的那些位置,此處的主要區(qū)別在于eBPF在驅(qū)動(dòng)程序空間中增加了一個(gè)額外的Hook。這使用戶可以在數(shù)據(jù)包中添加skb(套接字緩沖區(qū))元數(shù)據(jù)結(jié)構(gòu)之前丟棄,反射或重定向數(shù)據(jù)包。這導(dǎo)致性能提高約4-5倍。

          用戶態(tài)加速Envoy Proxy

          Istio的服務(wù)網(wǎng)格體系結(jié)構(gòu)要求將參與服務(wù)網(wǎng)格的所有Pod的傳入和傳出請(qǐng)求的所有網(wǎng)絡(luò)流量都重定向到Sidecar代理。
          問(wèn)題是:
          由于必須多次遍歷整個(gè)TCP/IP堆棧,因此當(dāng)使用基于iptables來(lái)實(shí)現(xiàn)重定向時(shí),這種重定向的成本可能很高。

          利用BPF在sidecar代理和Istio控制平面之間提供高效的數(shù)據(jù)路徑,通過(guò)使用socket感知BPF程序在Linux socket級(jí)別執(zhí)行流量重定向,Cilium可以加速流量重定向到sidecar代理。這允許繞過(guò)很費(fèi)事的TCP/IP堆棧遍歷而且對(duì)應(yīng)用程序或sidecar代碼沒(méi)有侵入性。

          Envoy性能大幅度提升

          至此解決了Serive Mesh數(shù)據(jù)代理過(guò)程帶來(lái)的通信性能問(wèn)題。

          附錄:

          【1】 Service Mesh 模式起源:https://zhuanlan.zhihu.com/p/40951244
          【2】envoy中文文檔:https://www.servicemesher.com/envoy/about_docs.html
          【3】 eBPF簡(jiǎn)史: https://www.ibm.com/developerworks/cn/linux/l-lo-eBPF-history/index.html



          推薦閱讀



          學(xué)習(xí)交流 Go 語(yǔ)言,掃碼回復(fù)「進(jìn)群」即可


          站長(zhǎng) polarisxu

          自己的原創(chuàng)文章

          不限于 Go 技術(shù)

          職場(chǎng)和創(chuàng)業(yè)經(jīng)驗(yàn)


          Go語(yǔ)言中文網(wǎng)

          每天為你

          分享 Go 知識(shí)

          Go愛(ài)好者值得關(guān)注


          瀏覽 235
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美成人一区二区三区片免费 | 777免费观看成人电影视频 | 操学生妹在线播放 | 99国产精品久久久久久久成人 | 成人无码免费毛片 |