歡迎光臨
每天分享高質量文章

房多多 Service Mesh 實踐

什麼是 Service Mesh
Service Mesh 是一個基礎設施層,用於處理服務間通訊。雲原生應用有著複雜的服務拓撲,Service Mesh 保證請求可以在這些拓撲中可靠地穿梭。在實際應用當中,Service Mesh 通常是由一系列輕量級的網路代理組成的,它們與應用程式部署在一起,但應用程式不需要知道它們的存在。
Service Mesh 是位於 TCP / IP 之上的抽象層的網路模型。 它假設底層的 L3/L4 網路存在並且能夠從點到點傳送位元組。它也假定這個網路和環境的其他方面一樣是不可靠的,因此 Service Mesh 也必須具備處理網路故障的能力。
在某些方面,Service Mesh 有點類似 TCP/IP。TCP 對網路端點間傳輸位元組的機制進行了抽象,而 Service Mesh 則是對服務節點間請求的路由機制進行了抽象。

 

Service Mesh 在房多多的需求背景
房多多在2018年Q3的時候已經完成大部分服務容器化,房多多容器化的網路方案主要是 Overlay 和 Macvlan,Overlay 網路提供給 nodejs 服務使用,Macvlan 主要給 Java 服務使用。關於 Macvlan 網路效能的測試可以參照網上的一些論文,一般來說,Macvlan 網路可以達到物理網路 95% 以上的效能。我們把 Dubbo 服務掛在 Macvlan 的網路下實現 Dubbo 服務與原有虛擬機器服務的互聯互通。在把 Dubbo 服務容器化的過程中,發現 Dubbo 對容器的支援並不好,獲取網絡卡 IP 的邏輯也有問題,在多塊網絡卡的容器中,Dubbo 框架經常會隨機的獲取 IP。官方提供了一個使用環境變數告訴框架要註冊的 IP 的方案:
  • DUBBO_IP_TO_REGISTRY — Registering to the IP address of the registration center

  • DUBBO_PORT_TO_REGISTRY — Registering to the port of the registration center

  • DUBBO_IP_TO_BIND — Listening IP addresses

  • DUBBO_PORT_TO_BIND — Listening ports

這個方案並不是很優雅,需要每個服務都維護一個環境變數用於告訴框架需要註冊的 IP,所以我們採用了只掛載 Macvlan 網路的方案。
既然 Dubbo服務都掛載到 Macvlan 網路了,有些服務同時提供 HTTP 和 Dubbo服務,如何實現對 HTTP 服務的代理就成了我們考慮的問題,這時候 Service Mesh 進入了我們的視野。
此外,由於此時大部分流量的負載均衡還依賴 Nginx 轉發,在 AppID 400+ 的背景下,運維團隊和業務團隊迫切的需要更高效的方案來解決配置管理和溝通成本的問題,構建房多多 Service Mesh 體系就顯得尤為重要,Envoy 是一個成熟穩定的專案,也能夠滿足近期的需求,在現階段我們並沒有人力去動 Envoy,所以我們直接使用了 Envoy。
為了使 Service Mesh 支援 Overlay 網路和 Macvlan 網路,我們把 Envoy 的一塊網絡卡掛載在 Macvlan 網路中,另一塊網絡卡掛載在 Overlay 網路中,這樣 Envoy 就成為內部閘道器服務,託管內部呼叫流量。
構建資料平面配置的 XDS 服務
XDS 服務主要功能是給資料平面提供服務的叢集配置、路由配置等資訊,並且需要實現微服務架構中降級和限流的配置功能。
由於歷史原因,還有相當多的業務無法從 VM 遷移到容器,需要有一個同時相容容器和 VM 的資料平面服務,目前 XDS 服務的支援的功能如下:
  • 叢集資料來源同時包括容器內部 DNS 和釋出系統的 VM 資料

  • 支援多個 vhost 配置

  • 支援路由配置

  • 支援速率控制和閘道器錯誤重試

研發效率的提升和改進
在房多多,Service Mesh 體系的建設大幅提高了研發效率,節省了大量維護配置所花費的時間,降低了人為配置產生 bug 的可能性,研發流程的改進如下圖:
同時也降低了框架開發成本和業務改動的成本,每次推動業務升級框架都需要比較長的一段時間,業務無法及時用上新框架的功能,多種框架版本也加重運維負擔,Service Mesh 幫我們解決了很多痛點。
  • 代理層實現服務發現,對於開發而言只需要開發一個單機的應用,降低框架開發成本

  • 降級和限流都在代理層實現,規則靈活,方便修改策略

  • 基礎架構的升級無需依賴業務

小結和規劃
得益於雲原生架構,Service Mesh 可以使用雲原生的基礎設施,基礎設施能力的改進可以直接賦能業務,而不像傳統的框架一樣,基礎設施的升級和改進無法提高傳統框架的服務能力。
房多多的 Service Mesh 還處於初級階段,後面可以做的事情還有很多,比如藍綠釋出,類似 API 閘道器的 API 版本部署,配置映象等。
贊(0)

分享創造快樂