Cloudfoundry Grouter源碼走讀

GoRouter源碼分析 GoRouter的主要功能是接受用戶的請求信息,根據請求URL查詢GoRouter在內存中維護的路由信息表信息,而後將URL轉發到具體的組件. GoRouter有幾個重要的組件: Proxy, router, registry算法

Proxy: 外部全部的請求進入Cloudfoundry都須要通過proxy, proxy 根據請求的URL 到路由表裏查找對應的節點,而且若是請求頭中包含了cookie,則解析出節點id,將請求分發路由到具體的節點(好比:多個DEA, 就會路由到某一個固定的DEA),若是沒有cookie,則根據路由算法,選擇一個DEA, 響應時添加cookie返回用戶,也就是sessionsticky.cookie

Router: 主要是定義了一個router的數據結構,以及一些初始化流程,已經運行的流程(run 方法), router 會啓動定時器去查詢droplet是否過時,若是過時了,會通知registry模式去更新路由信息session

Registry: 處理DEA或者組件到GoRouter註冊uri 的路由信息. Cloudfoundry是經過NAT來進行通訊的,NAT通訊採用的是 訂閱/發佈的設計模型進行通訊 ,GoRouter 啓動的時候會去NAT訂閱註冊和去註冊的信息(router.register/router.unregister), 當有別的組件發佈 router.register/router.unregister 事件時,GoRouter就會收到訂閱的消息,通知registry模塊去更新路由表.數據結構

用戶訪問GoRouter的流程圖以下: User/LB不屬於GoRouter組件, 心跳檢測經過在請求的頭文件添加「HTTP-Monitor/1.1」來判斷. 輸入圖片說明源碼分析

GoRouter的啓動流程圖以下: 輸入圖片說明設計

相關文章
相關標籤/搜索