這幾年來,微服務這個概念越來越火了,火到什么程度呢?2019年有一個統計說,兩千家企業里,45%在使用微服務,16%在實驗開發和測試微服務架構,24%在學習微服務準備轉型,只有剩下的15%的企業沒有使用微服務。
微服務到底有什么好呢?微服務在2013年才被提出,短短幾年就有這么快速的發展。微服務架構能夠實現由小型自主服務組成一個整體應用,各個組成部分之間是松耦合的,復雜性低,各個部分可以獨立部署,修復bug或者引入新特性更容易,能夠獨立擴展,不同技術棧之間可以使用不同框架、不同版本庫甚至不同的操作系統平臺。
對于中大型架構系統來說,微服務更加便捷,微服務成為很多企業架構重構的方向,同時也對架構師提出更高的挑戰。目前有很多常用于微服務構建的框架,對于構建微服務架構能夠帶來一些幫助。
1,Java語言相關微服務框架
Spring Boot
Spring Boot的設計目的是簡化新Spring應用初始搭建以及開發過程,2017年有64.4%的受訪者決定使用Spring Boot,可以說是最受歡迎的微服務開發框架。利用Spring Boot開發的便捷度簡化分布式系統基礎設施的開發,比如像配置中心、注冊、負載均衡等方面都可以做到一鍵啟動和一鍵部署。
Spring Cloud
Spring Cloud是一個系列框架的合計,基于HTTP(s)的RETS服務構建服務體系,Spring Cloud能夠幫助架構師構建一整套完整的微服務架構技術生態鏈。
Dubbo
Dubbo是由阿里巴巴開源的分布式服務化治理框架,通過RPC請求方式訪問。Dubbo是在阿里巴巴的電商平臺中逐漸探索演進所形成的,經歷過復雜業務的高并發挑戰,比Spring Cloud的開源時間還要早。目前阿里、京東、當當、攜程、去哪等一些企業都在使用Dubbo。
Dropwizard
Dropwizard將Java生態系統中各個問題域里最好的組建集成于一身,能夠快速打造一個Rest風格的后臺,還可以整合Dropwizard核心以外的項目。國內現在使用Dropwizard還很少,資源也不多,但是與Spring Boot相比,Dropwizard在輕量化上更有優勢,同時如果用過Spring,那么基本也會使用Spring Boot。
Akka
Akka是一個用Scala編寫的庫,可以用在有簡化編寫容錯、高可伸縮性的Java和Scala的Actor模型,使用Akka能夠實現微服務集群。
Vert.x/Lagom/ReactiveX/Spring 5
這四種框架主要用于響應式微服務開發,響應式本身和微服務沒有關系,更多用于提升性能上,但是可以和微服務相結合,也可以提升性能。
2,Go相關微服務框架
istio
項目簡介:Istio是由Google、IBM和Lyft開源的微服務管理、保護和監控框架。使用istio可以很簡單的創建具有負載均衡、服務間認證、監控等功能的服務網絡,而不需要對服務的代碼進行任何修改。
倉庫地址:https://github.com/istio(25.9K)
官方文檔地址:https://istio.io/latest/docs/
Go-kit
項目簡介:這是一個工具包的集合,可以幫助攻城獅構建強大、可靠和可維護的微服務。提供了用于實現系統監控和彈性模式組件的庫,例如日志、跟蹤、限流、熔斷等。
基于這個框架的應用程序架構由三個主要的部分組成:
傳輸層:用于網絡通信,服務通常使用HTTP或者gRPC等網絡傳輸協議,或者使用NATS等發布訂閱系統相互通信。
接口層:是服務器和客戶端的基本構建塊。每個對外提供的接口方法都會定義為一個Endpoint,一遍在服務器和客戶端之間進行網絡通信,每個端點使用傳輸層通過HTTP或gRPC等具體通信模式對外提供服務
服務成:具體的業務邏輯實現
倉庫地址:https://github.com/go-kit/kit/(19.1K)
官方文檔地址:https://gokit.io/
Kratos
項目簡介:Kratos是嗶哩嗶哩開源的一套Go微服務框架,包含大量微服務相關框架及工具。
倉庫地址:https://github.com/go-kratos/kratos(11.5K)
官方文檔地址:https://go-kratos.dev/docs/
Go-micro【推薦】
項目簡介:這是一個基于Go語言實現的插件化RPC微服務框架。提供了服務發現、負載均衡、同步傳輸、異步通信以及事件驅動等機制,嘗試簡化分布式系統之間的通信,讓開發者更專注于自身業務邏輯的開發。
GoMicro的設計哲學是可插拔的架構理念,提供了可快速構建系統的組件,并且可以根據自身的需求對GoMicro提供的默認實現進行定制。
倉庫地址:https://github.com/micro/micro(9.5K)
官方文檔地址:https://micro.mu/
5.Goa
項目簡介:Goa 是一款用 Go 用于構建微服務的框架,采用獨特的設計優先的方法
倉庫地址:https://github.com/goadesign/goa(4.1K)
官方文檔地址:https://goa.design/
6.fabio
項目簡介:fabio 是 ebay 團隊用 golang 開發的一個快速、簡單零配置能夠讓 consul 部署的應用快速支持 http(s) 的負載均衡路由器。
倉庫地址:https://github.com/fabiolb/fabio(4.1K)
官方文檔地址:https://fabiolb.net/
7.gizmo
項目簡介:gizmo是紐約時報開源的go微服務工具,提供如下特性:標準化配置和日志;可配置策略的狀態監測端點;用于管理 pprof 端點和日志級別的配置;結構化日志,提供基本請求信息;端點的有用度量;優雅的停止服務; 定義期待和詞匯的基本接口。
倉庫地址:https://github.com/nytimes/gizmo(3.3K)
8.Tars-go
項目簡介:騰訊系,Tarsgo是基于Golang編程語言使用Tars協議的高性能RPC框架
倉庫地址:https://github.com/TarsCloud/TarsGo(2.7K)
官方文檔地址:https://tarscloud.github.io/TarsDocs/SUMMARY.html#TarsGo
9.Jupiter
項目簡介:Jupiter 是斗魚開源的一套微服務治理框架,提供豐富的后臺功能,管理應用的資源、配置,應用的性能、配置等可視化。
倉庫地址:https://github.com/douyu/jupiter
官方文檔地址:http://jupiter.douyu.com/(2.7K)
10.Dubbo-go
項目簡介:阿里系,由Apache 軟件基金會官方發布Go 語言加入 Dubbo 生態,架構是基于dubbo的extension模塊和分層的代碼設計,主要解決 Go 項目與 Java & Dubbo 項目的互通問題,同時也為 Go 項目提供了一種 RPC 與微服務
倉庫地址:https://github.com/apache/dubbo-go(2.6K)
官方文檔地址:https://dubbogo.github.io/dubbo-go-website/zh-cn/
3.Net相關微服務框架
.NET Core
.NET Core是專門針對模塊化微服務架構設計的,是跨平臺應用程序開發框架,是微軟開發的第一個官方版本。
Service Fabric
Service Fabric是微軟開發的一個微服務框架,基于Service Fabric構建的很多云服務被用在了Azure上。
Surging
Surging是基于RPC協議的分布式微服務技術框架,基于.NET Core而來。
Microdot Framework
Microdot Framework用于編寫定義服務邏輯代碼,不需要解決開發分布式系統的挑戰,能夠很方便的進行MicrosoftOrleans集成。
4,Node.js相關微服務框架
Seneca
Seneca是Node.js的微服務框架開發工具,可以用于編寫可用于產品環境的代碼。
Hapi/Restify/LoopBack
這三種框架的分工不同,前兩種更適合開發簡單的微服務后端系統,第三種更適合用在大型復雜應用開發,還可以用在現有微服務上的構建。
5. Python相關微服務框架
Python相關的微服務框架非常少,用的比較多的是Nameko。Nameko讓實現微服務變得更簡單,同時也提供了很豐富的功能,比如支持負載均衡、服務發現還支持依賴自動注入等,使用起來很方便,但是有限速、超時和權限機制不完善等缺點。
6. 總結
微服務已經成為很多大型互聯網公司的選擇,對于架構師和想要成為架構師的工程師來說,掌握微服務不僅要學會使用相關框架來實現,還要掌握具體用法,在具體的實踐中仍然要避開很多坑。
原文鏈接:https://juejin.im/post/5e6786f0f265da571a39e108,作者:風平浪靜如碼