誕生於 2014 年的「微服務架構」,其思想經由 Martin Fowler 闡述後,在近幾年持續受到重視,理論與相關實踐都不斷髮展,目前它已經成爲了主流軟件架構模式。spring
關於微服務架構是什麼,沒有一個明確的定義,每一個實踐者有本身的理解,可是有人給出的一個公式值得思考:編程
微服務架構 = 80% 的 SOA 服務架構思想 + 100% 的組件化架構思想 + 80% 的領域建模思想安全
微服務架構的優勢不少,好比它解耦業務,提供更高的靈活性,容許在服務頻繁發版的同時保持系統其它部分的可用性與穩定性;解耦編程語言,針對不一樣業務可使用更加合適的語言進行開發;解耦開發團隊,不一樣團隊各自負責一個微服務,互不影響,加速交付。網絡
關於微服務架構,網上資料至關多(由於如今很火,各家都有實踐案例分享),讀者能夠另行查閱,這裏不贅述。架構
下邊爲你們列舉了當前最爲火熱,最常被人說起的開源微服務開發框架,但願對開發者有必定的幫助(點擊項目名,能夠直接跳轉介紹頁):負載均衡
Spring Cloud 爲開發者提供了分佈式系統配置管理、服務發現、斷路器、智能路由、微代理、控制總線、一次性 Token、全局鎖、決策競選、分佈式會話與集羣狀態等的開發工具。使用 Spring Cloud 開發者能夠快速實現上述這些模式。框架
Eclipse MicroProfile 是一個 Java 微服務開發的基礎編程模型,它致力於定義企業 Java 微服務規範,MicroProfile 提供指標、API 文檔、運行情況檢查、容錯與分佈式跟蹤等能力,使用它建立的雲原生微服務能夠自由地部署在任何地方,包括 Service Mesh 架構,如 Istio。less
Dubbo 是阿里開源的一款高性能 RPC 框架,特性包括基於透明接口的 RPC、智能負載均衡、自動服務註冊和發現、可擴展性高、運行時流量路由與可視化的服務治理。編程語言
Tars 是騰訊將其內部使用的微服務框架 TAF(Total Application Framework)多年的實踐成果總結而成的開源項目,在騰訊內部有上百個產品使用,服務內部數千名 C++、Java、Golang、Node.Js 與 PHP 開發者。其包含一整套開發框架與管理平臺,兼顧多語言、易用性、高性能與服務治理,理念是讓開發更聚焦業務邏輯,讓運營更高效。分佈式
Helidon 是甲骨文開源的一個微服務框架,編寫的微服務運行在由 Netty 提供支持的快速 Web 內核上。
SOFAStack™(Scalable Open Financial Architecture Stack)是由螞蟻金服開源的一套用於快速構建金融級分佈式架構的中間件,也是在金融場景裏錘鍊出來的最佳實踐。
gRPC 是谷歌開源的高性能通用 RPC 框架。gRPC 基於 HTTP/2 標準設計,帶來諸如雙向流、流控、頭部壓縮與單 TCP 鏈接上的多路複用請求等特性,這些特性使得其在移動設備上表現更好,更省電和節省空間佔用。
Thrift 是一個 RPC 框架,用來開發可擴展且跨語言的服務。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建能夠在 C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk 與 OCaml 等語言間無縫結合的、高效的服務。
brpc 是百度內部最常使用的工業級 RPC 框架,有 1000 000+ 個實例(不包含 client)和上千種服務,在百度內叫作「baidu-rpc」,目前只開源了 C++ 版本。
上邊列出的主要是一些微服務架構的開發框架或者與微服務架構相當重要的 RPC 框架,而其實微服務又涉及到分佈式,這又會涉及到各類各樣的中間件,數量太過於龐大,下回再議吧。
可是有一個方面是必定要在這裏指出來的,那就是 Service Mesh。如今提到微服務架構,通常都會涉及到 Service Mesh 的相關內容,Service Mesh 被譽爲「下一代微服務架構」,它源於對早期的服務代理模式 Sidecar 的擴展,其理念雖然由來已久,可是直到近兩年隨着微服務的火速興起和 Buoyant 建立 Linkerd 並將其從新演繹,才逐漸以嶄新的姿態呈現給世人。
Service Mesh 重點在 Mesh,它在 Sidecar 的基礎上,強調了各個代理之間造成的有機網絡。以通用組件的形式管控系統中全部服務通訊流量,同時下沉了微服務開發的技術棧,能夠作到語言無關、功能可擴展。
經過一個網格,Service Mesh 能夠將服務治理的各個部分、微服務架構建設中的各個環節都不斷延申,最終成爲一套微服務開發徹底解決方案。
這裏也列出幾個目前在 Service Mesh 領域穩坐主流地位的開源項目:
Linkerd 是一個提供彈性雲端原生應用 Service Mesh 的開源項目,也是面向微服務的開源 RPC 代理,它的核心是一個透明代理。
Envoy 是開源的邊緣和服務代理,用於雲原生應用,其最初是在 Lyft 構建的,它是爲單一服務和應用程序設計的高性能 C++ 分佈式代理,以及爲大型微服務 Service Mesh 架構設計的通訊總線和通用數據平面。
Istio 項目可以爲微服務架構提供流量管理機制,同時亦爲其它增值功能(包括安全性、監控、路由、鏈接管理與策略等)創造了基礎。這款軟件利用久經考驗的 Lyft Envoy 代理進行構建,可在無需對應用程序代碼做出任何發動的前提下實現可視性與控制能力。
Conduit 是一個 Kubernetes 的超輕量級 Service Mesh,其目標是成爲最快、最輕、最簡單而且最安全的 Service Mesh。它使用 Rust 構建了快速、安全的數據平面,用 Go 開發了簡單強大的控制平面,整體設計圍繞着性能、安全性和可用性進行。它能透明地管理服務之間的通訊,提供可測性、可靠性、安全性和彈性的支持。雖然與 Linkerd 相仿,數據平面是在應用代碼以外運行的輕量級代理,控制平面是一個高可用的控制器,然而與 Linkerd 不一樣的是,Conduit 的設計更加傾向於 Kubernetes 中的低資源部署。
注:在發佈 0.5 版本後,後續 Conduit 已經整合到了 Linkerd 2,詳情查看:
對 Service Mesh 的建設其實已經成爲當前的業內共識,從下邊這些項目都在往這個方向上演進就能夠大體有所體會:
Motan 是新浪微博開源的是一套高性能、易於使用的分佈式 RPC 框架,後來在 Motan Agent 的基礎上演化出了 WeiboMesh。WeiboMesh 偏向服務治理方向,同時提供服務的動態管理能力,如服務降級、動態配置、權限管理、數據採集與服務指令處理等。
Dubbo 在 v3 中發展 Service Mesh,官方但願 Dubbo Mesh 進入 Envoy 社區,目前 Dubbo 協議已經被 Envoy 支持,數據層選址、負載均衡和服務治理方面的工做還在繼續,控制層目前在豐富 Istio/Pilot-discovery。
MOSN 是 SOFAStack 的組件,它一款採用 Go 語言開發的 Service Mesh 數據平面代理,功能和定位相似 Envoy ,旨在提供分佈式,模塊化,可觀察,智能化的代理能力。MOSN 支持 Envoy 和 Istio 的 API ,能夠和 Istio 集成。
nginMesh 是 NGINX 開源的 Service Mesh 方案,它提供基於 NGINX 的 Service Mesh 實現。nginMesh 與 Istio 兼容,利用 NGINX 實現 Sidecar 代理,集成在 Istio 中,能夠標準、可靠和安全的方式促進服務之間的通訊。
注:nginMesh 項目目前已經再也不積極開發。
MicroProfile Service Mesh 是 MicroProfile 的 Service Mesh 規範。MicroProfile 定義了用於開發雲原生微服務的一系列規範,本質上它也是爲 Istio 而生的微服務編程模型,而 Istio 自己就是 Service Mesh 的代名詞。此規範關注 Service Mesh,而且更多地聚焦於 Istio。
Ambassador 是一個基於 Envoy 構建的 Kubernetes 原生 API 網關,專爲微服務而設計,它本質上是一個 Envoy 入口控制器,但具備更多功能,包括支持 gRPC、HTTP/2 與 WebSockets,支持 CORS、超時、加權輪詢調度、粘性會話與速率限制等。
Gloo 是一個基於 Envoy 的 Kubernetes 原生入口控制器和下一代 API 網關。Gloo 在函數級路由方面表現卓越,它支持傳統應用程序、微服務與 Serverless。Gloo 設計獨特,可支持混合應用,其中的多種技術、架構、協議和雲能夠共存。
Kong 在 1.0 GA 的時候帶來了 Service Mesh 能力,用戶不只能夠將 Kong 部署爲 API 網關,還能夠將其部署爲獨立的 Service Mesh 代理。Kong 插件能爲 Service Mesh 提供開箱即用的關鍵功能,並能與其它雲原生技術集成,包括 Prometheus、Zipkin、健康檢查、canary 測試與藍綠測試等。
Connect 是 Consul 中的 Service Mesh 方案,它能夠自動將任何現有的 Consul 羣集轉換爲 Service Mesh 解決方案。Connect 經過自動 TLS 加密和基於身份的認證明現安全的服務到服務通訊。
藉此機會特別感謝以 ServiceMesher 爲表明的社區在國內普及與發展 Service Mesh 上的貢獻。
固然,除了列出的這些框架值得期待,還能夠在下邊這幾個分類中搜索、查看更多相關項目:
【感謝 ServiceMesher 社區 Jimmy Song 與羅廣明對本文的審校】