網易雲輕舟微服務框架:設計理念與技術選型全解析
作者:裴斐,網易杭州研究院雲計算技術部工程師
在我們發布《網易雲輕舟微服務框架:服務治理無侵入的設計》、《網易雲輕舟微服務框架:不僅僅是整合Spring Cloud》之後,有朋友就「企業如何選擇合適的微服務開發框架」的問題諮詢了我們,希望有更全面的答案,本文就結合網易雲輕舟微服務框架開發經驗分享我們的微服務框架設計理念與選型思考,供大家參考。
的確,微服務架構技術經過幾年的發展,已經是百花齊放,各領風騷。SpringCloud、Dubbo、自研RPC、Service Mesh…… 大家對微服務架構下的技術、架構、功能模塊似乎總有說不盡的話題。大部分團隊在自身業務服務規模大到一定程度時開始引入微服務架構,而在技術選型上則大有百家爭鳴的感覺:
- Spring體系下傾向以Spring Cloud作為框架主體;
- Dubbo是國內技術團隊選型RPC通用框架的主要選擇;
- 對於技術實力較強技術積澱較多的公司或團隊,自研RPC+治理能力帶來的可定製性也成為主流選擇;
- Service Mesh(服務網格)概念在2017年的崛起引發了「下一代微服務框架」的關注熱潮。
我們在開發輕舟微服務框架之前也有些疑惑:究竟怎樣的選型和架構最合適?如何避免重複造輪子?
設計理念
根據網易雲服務網易集團內部業務和外部客戶的經驗,我們首先梳理了微服務框架的設計理念。我們認為,「最好」的選型與架構需求是這樣的:
- 對業務無侵入:業務開發者應該無需關注和學習治理相關的技術,治理邏輯不應侵入業務代碼。
- 功能完備:提供完備的治理功能全家桶,包括服務註冊/發現,降級,限流,容錯,負載均衡,分流等。
- 快速接入:業務系統可以快速接入框架和平台,同時通過平台實時配置治理策略。
- 安全穩定:提供統一的認證、鑒權機制,同時保障業務系統穩定運行。
- 跨平台性:如果能跨不同語言和平台,那自然是極好的。
- 隔離性:多租戶、多項目隔離,具備大平台多業務隔離能力。
- 微服務生態親和性:符合微服務技術和架構趨勢,同時具備長遠的擴展性。
開發願景
輕舟微服務框架的最大願景,就是可以讓業務系統開發者無需關注和學習治理相關技術、無需修改業務系統代碼就可以快速引入服務治理能力。
以SpringCloud體系為例。傳統開發模式下,如果業務開發需要引入微服務架構,就需要學習SpringCloud全家桶內的相關內容:
需要服務註冊/發現?請學習Eureka;
需要熔斷器、線程隔離?請學習Hystrix;
需要負載均衡?請學習Ribbon;
需要API網關?請學習Zuul;
需要配置中心?請學習Config、Bus;
……
如果使用傳統的方式,可能一家企業的若干團隊的眾多相關開發人員都需要學習和熟悉Spring Cloud,至少是學習其中的部分組件,而且原生Spring Cloud組件在某些場景下缺乏靈活性,甚至存在一些BUG。除了掌握組件用法,甚至需要掌握核心源碼以避免一些被動引入的坑。
所以,前文提及過的避免重複造輪子何其重要!
技術選型
從上面分析可以看出,比起各家各自為戰重複造輪子,我們更希望的是一個更通用、侵入性更低、能力更全面的微服務框架。自研RPC雖然能更貼近一些公司或團隊的需求,但一般自研RPC往往帶有公司或團隊長期的技術背景,比較難作為通用技術選型,所以率先pass。
Spring Cloud作為開源屆大佬Spring旗下微服務框架的代表作,天生強大的同時還天生要強的引入了Netflix較完備的微服務治理工具集,諸如Eureka、Ribbon、Hystrix、Config、Archaius、Zuul。依託較早脫穎而出的SpringBoot,Spring在微服務圈依舊擁有眾多擁簇。