Aeraki MeshIstio 服務(wù)網(wǎng)格流量管理工具
Aeraki [Air-rah-ki] 是希臘語(yǔ) ” 微風(fēng) “ 的意思。 該命名的寓意是希望 Aeraki Mesh 這股 “微風(fēng)” 能幫助 Istio 和 Kubernetes 在云原生的旅程中行得更快更遠(yuǎn)。Aeraki Mesh 的定位非常明確:只處理服務(wù)網(wǎng)格的非 HTTP 七層流量,將 HTTP 流量留給 Istio 。(我們認(rèn)為現(xiàn)有的項(xiàng)目已經(jīng)足夠優(yōu)秀,不必重新造輪子)。
由騰訊云主導(dǎo),聯(lián)合百度、靈雀云、騰訊音樂(lè)、滴滴、政采網(wǎng)等多家合作伙伴發(fā)起的服務(wù)網(wǎng)格開(kāi)源項(xiàng)目 Aeraki Mesh 通過(guò)了全球頂級(jí)開(kāi)源基金會(huì)云原生計(jì)算基金會(huì)(CNCF)技術(shù)監(jiān)督委員會(huì)評(píng)定,正式成為 CNCF 沙箱項(xiàng)目。
Aeraki Mesh 架構(gòu)
正如該圖所示,Aeraki Mesh 由以下兩部分組成。
Aeraki: Aeraki 工作在控制面,為運(yùn)維提供了高層次的、用戶友好的流量管理規(guī)則,將規(guī)則轉(zhuǎn)化為 envoy 代理配置,并利用 Istio 提供的標(biāo)準(zhǔn)接口將配置推送給數(shù)據(jù)面的 sidecar 代理。 Aeraki 還在控制面中充當(dāng)了 MetaProtocol Proxy 的 RDS(路由發(fā)現(xiàn)服務(wù))服務(wù)器。不同于專注于 HTTP 的 Envoy RDS,Aeraki RDS 旨在為所有七層協(xié)議提供通用的動(dòng)態(tài)路由能力。
MetaProtocol Proxy: MetaProtocol Proxy 工作在數(shù)據(jù)面,是一個(gè)七層代理框架,為七層協(xié)議提供了常用的流量管理能力,如負(fù)載均衡、熔斷、路由、本地 / 全局限流、故障注入、指標(biāo)收集、調(diào)用跟蹤等等。我們可以基于 MetaProtocol Proxy 提供的通用能力創(chuàng)建自己專有協(xié)議的七層代理。要在服務(wù)網(wǎng)格中加入一個(gè)新的協(xié)議,唯一需要做的就是實(shí)現(xiàn) 編解碼器接口 (通常只需數(shù)百行代碼)和幾行 yaml 配置。如果有特殊的要求,而內(nèi)置的功能又不能滿足,MetaProtocol Proxy 還提供了一個(gè)擴(kuò)展機(jī)制,允許用戶編寫(xiě)自己的七層過(guò)濾器,將自定義的邏輯加入 MetaProtocol Proxy 中。
MetaProtocol Proxy 中已經(jīng)支持了 Dubbo, Thrift ,bRPC 和一系列私有協(xié)議。如果你正在使用一個(gè)閉源的專有協(xié)議,也可以在服務(wù)網(wǎng)格中管理它,只需為它編寫(xiě)一個(gè) MetaProtocol 編解碼器即可。
MetaProtocol Proxy 架構(gòu)
MetaProtcolProxy 對(duì)七層協(xié)議進(jìn)行了高度抽象,提取了 Metadata 這個(gè)非常靈活的擴(kuò)展機(jī)制,應(yīng)用協(xié)議在解碼過(guò)程中將協(xié)議中的關(guān)鍵屬性填充到 Metadata 中,這些屬性可以用于請(qǐng)求路由、限流等后續(xù)的七層 filter 處理。框架層將 Meatdata 作為透明的 key/value 值串進(jìn)行處理,不需要理解協(xié)議的業(yè)務(wù)細(xì)節(jié)。該設(shè)計(jì)可以確保任何基于 MetaProtocol 開(kāi)發(fā)的應(yīng)用協(xié)議都能使用同一套控制面 API 進(jìn)行管理,是 Aeraki 實(shí)現(xiàn)對(duì) Dubbo、Thrift、bRPC 以及其他協(xié)議進(jìn)行統(tǒng)一管理的基礎(chǔ)。同時(shí),MetaProtocolProxy 還提供了 Mutation 數(shù)據(jù)結(jié)構(gòu),用于在編碼時(shí)對(duì)數(shù)據(jù)包進(jìn)行修改,例如增加 / 修改請(qǐng)求頭的內(nèi)容。
下圖是 MetaProtocolProxy 處理一個(gè)請(qǐng)求處理的過(guò)程:
MetaProtocol Proxy 請(qǐng)求處理流程
Aeraki Mesh 的主要特點(diǎn):
- 和 Istio 無(wú)縫集成,是 Istio Ecosystem 集成推薦項(xiàng)目。您可以采用 Istio + Aeraki Mesh 來(lái)構(gòu)建一個(gè)可以同時(shí)管理 HTTP 和其他七層協(xié)議?的全棧服務(wù)網(wǎng)格。?
- 支持在 Istio 中管理 Dubbo、Thrift、Redis 等開(kāi)源協(xié)議的流量。
- 支持在 Istio 中管理私有協(xié)議的流量,只需數(shù)百行代碼,對(duì) Istio 無(wú)任何改動(dòng)。
- 支持請(qǐng)求級(jí)負(fù)載均衡,支持任意匹配條件的動(dòng)態(tài)路由,全局和本地限流,流量鏡像等強(qiáng)大的七層流量管理能力。
- 提供豐富的請(qǐng)求級(jí)性能指標(biāo),包括請(qǐng)求時(shí)延、錯(cuò)誤、數(shù)量等,支持分布式調(diào)用跟蹤。
- 對(duì) Istio,Envoy 等上游開(kāi)源項(xiàng)目完全無(wú)侵入,可以跟隨上游項(xiàng)目進(jìn)行快速迭代,充分利用上游項(xiàng)目新版本提供的新增能力。
