微服務簡化了開發,它將創建復雜系統的任務切分為數十乃至上百個小服務,這些小服務易于被小型的軟件工程師團隊所理解和修改。但是微服務并未真正地消除復雜性,而是將復雜性遷移到對大量服務的連接、管理和監控上。其中涉及對上百個服務的管理、處理部署問題、版本控制、安全、故障轉移、策略執行、遙測和監控等,實現它們并非易事。Istio力圖去解決這些問題。
按Google的提法,Istio是“架構的一層,處于服務和網絡間”,它“通常連同服務部署一起,統稱為服務嚙合層(Service Mesh)”。在Istio網站上,詳細解釋了“服務嚙合層”這一概念:
如果我們可以在架構中的服務和網絡間透明地注入一層,那么該層將賦予操作人員對所需功能的控制,同時將開發人員從編碼實現分布式系統問題中解放出來。通常將該統一的架構層與服務部署一起,統稱為一個“服務嚙合層”。由于微服務有助于分離各個特性團隊(Feature Team),因此服務嚙合層有助于將操作人員從應用特性開發和發布過程中分離出來。通過系統地注入代理到微服務間的網絡路徑中,Istio將迥異的微服務轉變成一個集成的服務嚙合層。
Istio可在任何云上或私有的環境中運行。雖然首個測試版(即0.1版)是運行于Kubernetes上的,但并非必須如此。Istio的主要特性包括:
HTTP、gRPC和TCP網絡流量的自動負載均衡; 提供了豐富的路由規則,實現細粒度的網絡流量行為控制; 流量加密、服務間認證,以及強身份聲明; 全范圍(Fleet-wide)策略執行; 深度遙測和報告。Istio的底層使用了Envoy。Envoy是Lyft于去年九月份開源的一種服務代理和通信總線,已用于生產系統中,“管理了上萬臺虛擬機間的一百多個服務,每秒可處理近兩百萬次請求”。在近期的GlueCon 2017大會上,來自IBM的Shriram Rajagopalan和來自Google的Louis Ryan介紹了Istio的技術細節(PDF)。下圖給出了系統的高層圖解:
Envoy實現了過濾和路由、服務發現、健康檢查,提供了具有彈性的負載均衡。它在安全上支持TLS,在通信方面支持gRPC,支持MongoDB和DynamoDB分析器對數據庫訪問統計信息的采集,以及更多功能。Envoy用C++ 11編寫實現,并測試了使用C++、Go、Java、PHP和Python編寫的微服務,也支持使用其它的語言。Istio還實現了應用和網絡的監控,可在Prometheus和Grafana中查看。Istio還可以集成Zipkin,對延遲問題進行診斷。
Istio支持團隊計劃將其與Google Cloud Endpoints和Apigee集成。此外,Red Hat、Pivotal、Weaveworks、Tigera和Datawire也有興趣將自身的產品與Istio集成。在Istio的路線圖中,給出了未來將提供功能的更多細節。Istio 1.0版計劃于今年下半年發布。
查看英文原文:Istio: A Service Mesh for Microservices