繼Docker、K8s之後,雲原生時代最炙手可熱的技術毫無疑問非服務網格(Service Mesh)莫屬。雲原生的上半場,Docker + Kubernetes的組合颠覆了傳統的應用開發、部署、運維模式,極大的解放了運維人員。但是對于開發人員,似乎沒有帶來足夠的幫助,而服務網格的出現正好彌補了Kubernetes在服務治理,安全以及服務監控等應用層的能力缺陷。筆者認為服務網格在雲原生2.0時代必将大放異彩。
服務網格的曆史背景
在過去幾年中,微服務迅速發展,微服務的誕生并非偶然,它是網際網路高速發展以及傳統分布式、SOA架構無法适應快速的開發疊代等多重因素共同推動下的産物。
微服務架構最早由Fred George在2012年的一次技術大會上所提出,他講到如何通過拆分SOA服務實作服務之間的解耦,這是微服務最早的雛形。而後在2014年,James Lewis和Martin Fowler發表了一篇名為《Microservices》的文章,詳細徹底将“微服務”發揚光大。

微服務架構通過細粒度的服務解耦拆分,帶來縮短開發周期、獨立部署、易擴充等好處的同時,同時帶來對服務發現、負載均衡、熔斷等能力前所未有的訴求。因而,以Dubbo、SpringCloud為代表的一批微服務開發架構随之而來,尤其是SpringCloud幾乎成為微服務開發的技術标準。
然而Dubbo、SpringCloud不是萬能藥,它們都是完全侵入式的開發模式,語言強相關,并且對于開發人員來說,無論是Dubbo還是SpringCloud的學習曲線都比較陡峭。
直到非侵入式的Service Mesh技術出現,人們才意識到微服務不止侵入式一種玩法,微服務更不是SpringCloud的獨角戲!Service Mesh以如此驚豔的方式出場,完全颠覆了人們對微服務開發的認知。Service Mesh最早在2016年伴随着Linkerd的出現開始嶄露頭角。
服務網格發展現狀
服務網格的出現一方面是為了解決微服務架構侵入式開發,語言強相關、學習曲線陡峭等問題,另一方面還有雲原生發展的必然因素。Docker和K8s的組合已經解決了應用的打包、部署的問題,但是它們并沒有解決運作時的問題。兩方面的因素組合,促使Service Mesh站在了風口浪尖。
Istio發展曆程
Linkerd的出現隻是起點, 随着2017年, Google與IBM聯合Lyft釋出了Istio, Service Mesh技術徹底被點燃。
Istio作為第二代Service Mesh技術,通過控制面帶來了前所未有的靈活性及擴充能力,影響力遠超更早出現的 Linkerd。根本原因是Istio背負巨大的使命,Google希望在繼Kubernetes成為容器編排的事實标準之後,打造另一殺手锏級别的技術,成為服務網格的事實标準。
Istio由于Google與IBM大廠的加持,在資源投入及影響力層面遠非Buoyant建立的Linkerd可比拟的。縱然Linkerd加入了CNCF基金會,也難以撼動Istio在服務網格領域的王者地位。
Istio社群吸引了衆多的頭部廠商參與,并且是2019年Github增長最快的TOP 10開源項目之一,可見社群的活躍度,衆多貢獻者一起推進Istio生态繁榮。Istio自1.0釋出以來,就标志生産可用,目前社群按照三個月一個版本周期演進,最新的1.8版本本周即将釋出。
華為雲是Istio社群的主要貢獻者和上司者之一
華為雲在Istio社群源碼貢獻排名全球TOP3,擁有Steering Committee成員1名(亞洲唯一,全球僅8家公司13人),項目Maintainer兩名,Member 5名。已向社群貢獻多個大顆粒特性:
- 增量EDS,取代全量xDS,極大的降低控制面的資源消耗。
- 基于位置資訊的負載均衡,提供優先級路由,降低服務通路的時延,提升吞吐。
- Sidecar服務隔離,支援服務可見範圍及服務依賴的定義,提供大規模擴充能力
- 虛拟路由級聯,解耦不同服務的路由規則,提高容錯性
- 支援Headless服務,彌補了Istio對有狀态應用支援的缺失
- 催熟VM統一服務治理,支援應用混合部署(pod+vm),K8s service自動選擇vm應用
- 催熟單控制面多叢集服務治理,跨叢集的工作負載與主叢集的工作負載完全對等,支援多雲、混合雲服務治理
Istio核心設計理念及特性
1)服務網格通過Sidecar注入技術,将資料面Proxy注入到應用所在的Pod,通過Iptables劫持應用的流量,所有進出應用的流量均由Proxy代理。對于使用者應用來說,Sidecar完全透明,以往微服務的治理、應用的監控以及安全、證書的管理等能力完全下放到Sidecar,對應用零侵入,相比傳統SDK架構,極大的解放了開發者。
2)北向,Istio面向使用者提供了基于K8s CRD完全聲明式的API,将Istio的功能通過API呈現給使用者,易用性強。聲明式API,典型的特點是最終一緻性,使用方隻需要聲明服務治理規則,而無需等待逐漸執行操作。
3)Istio控制面與資料面Envoy直接通過xDS gRPC協定通信,配置資訊基于訂閱的模式由控制面主動推送
對使用者來說,Istio提供了服務治理,安全,監控三大核心功能 。
1) Istio提供了豐富的服務治理能力:灰階釋出,藍綠部署,熔斷,故障注入,豐富的負載均衡算法,限流,健康檢查等。主流的微服務架構入SpringCloud提供了類似的功能,然而Istio允許使用者更加靈活地動态配置服務治理規則,這一點是微服務架構所不能及的。
2)Istio提供了零信任安全網絡:Istio通過Proxy間的資料加密傳輸以及認證,授權,政策控制等功能允許應用在零信任的網絡安全的運作。
3)應用監控:Istio提供應用級别細粒度的Metrics采集,通路日志,以及分布式調用鍊等APM能力。APM能力下放到Sidecar,使得開發者聚焦業務本身,再也不用關心負載均衡、熔斷,安全或者內建APM等業務無關的開發。
百家争鳴
Istio并不是服務網格的終點,2018年,HashiCorp釋出Consul Connect支援服務網格。2019年,Kuma以及Traefic Mesh幾乎同時開源,各家廠商似乎都嗅到了服務網格領域的商業機會。
同年,Istio成為Github增長最快的10大開源項目之一。CNCF剛剛釋出了2019年中國雲原生調查報告,大約45%的受訪者表示在生産環境中使用Istio,遠遠高于排名第二的Consul。
由此可見,盡管服務網格技術呈現百家争鳴的态勢,但是沒有一家足以撼動Istio的領先地位。
到目前為止,我們沒看到微軟站隊某一具體技術方案,實際上微軟也不想在這場技術競賽中落後。微軟也看到了百花齊放的态勢,在2019年,微軟發起了SMI,意圖打造服務網格控制面的API标準。2020年,微軟終于按捺不住,也開源了Open Service Mesh(OSM),徹底攪入服務網格技術的競争中。兩件事情連起來,自然不難看出微軟的野心。
目前資料面主要有三種:Envoy,Linkerd,Traefic。Envoy由于高性能,強擴充的能力在資料面的競争中遙遙領先。相比控制面的激烈競争,資料面看似平靜,實際上Envoy團隊也充滿危機意識,試圖通過UDPA打造統一的資料面标準,鞏固Envoy資料面代理的地位。
講了這麼多,筆者依然堅定地認為 Istio+ Envoy将會成功這場技術軍備的勝出者,當然Istio的API不可能由别人(微軟)制定,是以SMI很難成為事實标準。至于資料面UDPA想統一API标準的想法同樣道阻且長。
服務網格發展方向
未來Istio将會成為服務網格的代名詞, Istio将會圍繞着多雲、混合雲場景,建構高性能、高安全、高擴充、更加易用的能力。
各大廠商紛紛布局多雲混合雲戰略,提供生産環境高可用,異地容災的能力。多雲、混合雲将會帶來更加複雜的服務拓撲結構,不僅對基礎設施層,應用編排層提出了新的挑戰,同樣對于服務網格來說,也意味着服務治理難度的提升。
簡單的舉個例子,服務跨叢集、跨AZ的通路時延要遠大于同一叢集,同一AZ的服務通路。多雲、混合雲的應用部署模型,網絡拓撲複雜多樣,進一步加劇了多雲、混合雲服務治理難度。
北向Istio将會通過更加靈活易用的API提供更好的使用者體驗以及更強的擴充能力。未來将擴充協定支援,比如QUIC等UDP協定。Istio提供QUIC協定流量的治理基于Envoy對QUIC協定的支援,首先需要提供UDP流量的攔截能力,其次,Istiod負責QUIC協定服務發現,生成Listener、Cluster等xDS配置,管理QUIC流量的處理及轉發。
基于WASM的擴充機制有望成為擴充方式的新寵,WASM是一種動态的擴充機制,相對于Envoy最早提供的擴充插件的好處顯而易見,但是目前WASM帶來的記憶體及處理速度的開銷不可忽視,未來Istio及Envoy社群将會圍繞着WASM展開一系列的性能優化,在提高擴充能力的同時,保證高性能。