名詞解釋
Downstream:通常意義的客戶端,連接envoy,發(fā)送請求接收響應(yīng)
Upstream:通常意義的服務(wù)端笨腥,接收請求,返回響應(yīng)
Listener:監(jiān)聽器勇垛,可被客戶端連接
Cluster:一組Upstream脖母,通常意義上的服務(wù),通過服務(wù)發(fā)現(xiàn)機(jī)制確定cluster的服務(wù)實(shí)例
TCP Listener
- 每個listener上面配置多個fitler chain闲孤,每個filter chain可配置自己的命中規(guī)則
- 每個filter chain上面有1個/多個network filter谆级,也可以配置可選的listener filters,listener filter會在network filter之前執(zhí)行,一般用于修改連接上的metadata信息肥照,會影響后續(xù)network fileter的處理邏輯
- listener可以由listener discovery service動態(tài)生成
listener filter
新建的連接(accept后插入點(diǎn))會依次執(zhí)行l(wèi)istener filter的OnAccept方法脚仔,當(dāng)前有5種listener filter的實(shí)現(xiàn),配置詳見config-listener-filters
network filter
是envoy核心的連接處理器舆绎,有3種不同的filter
- Read: 從downstream中讀取數(shù)據(jù)時會觸發(fā)(接收請求)
- Write: 從downstream中寫入數(shù)據(jù)時會觸發(fā)(回復(fù)響應(yīng))
- Read/Write: 讀取和寫入時都會觸發(fā)
API也比較簡單鲤脏,大部分都是對原始數(shù)據(jù)的操作接口,有少量的connection events
HTTP connection manager
HTTP connection mananger就是一種network filter吕朵,它的主要作用是將raw data轉(zhuǎn)化為HTTP的消息和事件(如接收http header猎醇,接收body,trailer等)努溃,并處理HTTP層的常見功能姑食,如路由,header的修改等茅坛。
envoy的HTTP connection mananger支持HTTP1.1音半,websocket,HTTP/2等贡蓖。由于envoy被設(shè)計為首要支持HTTP2的多路復(fù)用曹鸠,內(nèi)部的實(shí)現(xiàn)也使用HTTP/2的一些概念,如一次http請求和響應(yīng)被定義為一條stream斥铺,內(nèi)部也會使用編解碼器(codec api)將不同協(xié)議轉(zhuǎn)換為協(xié)議無關(guān)的stream/request/response等結(jié)構(gòu)彻桃。
HTTP filters
HTTP connection manager上面可以配置HTTP filters,用于操作http的消息晾蜘。有3種類型:
- Decoder:解碼request stream時觸發(fā)(headers/body/trailers)
- Encoder:編碼response stream時觸發(fā)
- Decoder/Encoder:解碼request stream/編碼response stream時觸發(fā)
http_filters的配置順序非常重要:
http_filters:- A
- B
# The last configured filter has to be a terminal filter, as determined by the
# NamedHttpFilterConfigFactory::isTerminalFilter() function. This is most likely the router filter. - C
HTTP connection manager解碼時將采用A/B/C的順序邻眷,而在編碼時會采用C/B/A的順序
Route table
HTTP connection manager上配置route table,主要是給http router filter使用剔交,但其他的http filter也可以使用
Routing
HTTP router filter
就是一種HTTP filter肆饶,會選擇upstream cluster,并為每個host維護(hù)一個連接池岖常,將請求轉(zhuǎn)發(fā)過去驯镊。當(dāng)前支持:
- host匹配,path前綴/精確匹配
- path/host重定向
- host/path rewrite
- traffic shifting/splitting
TCP Proxy
envoy的基礎(chǔ)框架實(shí)現(xiàn)為L3/L4的server竭鞍,因此很容易實(shí)現(xiàn)L3/L4的數(shù)據(jù)轉(zhuǎn)發(fā)板惑。TCP Proxy filter就是用來實(shí)現(xiàn)網(wǎng)絡(luò)層的流量轉(zhuǎn)發(fā)
Cluster manager
cluster manager用于管理upstream clusters,filters使用cluster manager暴露的API獲取對upstream cluster的L3/L4的連接或HTTP的連接池(屏蔽使用的HTTP1/HTTP2協(xié)議)偎快。filter只是決定是否需要L3/L4的連接或是http stream冯乘,cluster manager用來管理host及健康檢查,load balacing, upstream protocol等細(xì)節(jié)晒夹。
cluster manager使用服務(wù)發(fā)現(xiàn)獲取cluster的服務(wù)地址裆馒。其中一種方式為Endpoint discovery service
connection pool
envoy抽象出連接池妖异,filter無需關(guān)心連接池使用的協(xié)議是否真正支持多路復(fù)用機(jī)制。有2種連接池:
- HTTP1.1
連接被綁定到可用的連接上面领追,或者是由于這個連接已經(jīng)處理完上個請求或者是新建的連接處理首個請求。不支持pipeline - HTTP2
只建立必要的連接响逢,如果沒有限制绒窑,每個host將會只建立一個連接
Load Reporting Service
envoy可以向管理服務(wù)發(fā)送load report