网易云轻舟设计理念与技术选型
微服務架構技術經過幾年的發展,已經是百花齊放,各領風騷。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在微服務圈依舊擁有眾多擁簇。
SpringCloud全家桶
Dubbo作為一款標桿型的RPC框架,依托大廠場景成為國內公司RPC框架的重要選擇。從小到大到開放到停止維護再到恢復開放更新,Dubbo發展歷經風雨又讓開發者日久彌新。前期重RPC輕治理喪失了一些追求完整解決方案的粉絲,后來重新煥發生機引入了較多治理特性,也可以作為通用框架備選。
Service Mesh自問世起就備受關注,它提出的無侵入、去中心、高可運維型和擴展性架構十分迷人。Istio作為宇宙級大廠Google、IBM等的聯合作品,2017年的橫空出世讓人感覺到微服務全新時代到來的氣息。其依托于Kubernetes平臺,雖然前期版本問題不少,其架構和技術的先進性還是微服務架構追隨者看到了來自遠方的曙光。
Istio架構
關于這幾個框架橫向對比和詳細介紹的文章較多,本文不做詳述。從通用微服務框架角度,滿足架構、功能、擴展性是技術選型的核心要素。網易云輕舟微服務團隊在開始進行微服務基礎框架選型時,對各個框架發展狀況的最終思考如下:
Spring Cloud在Java體系微服務成熟度較高,功能全家桶能力較全,加之Spring的天生優勢,成為我們微服務框架落地的首選;
Dubbo初期治理能力的欠缺;
Service Mesh理念超前,但由于框架處于較早期階段,尚存在一定問題(平臺綁定Kubernetes、性能問題等),不太容易在傳統業務直接落地。
當然,Service Mesh在架構和技術上的超前性同樣讓我們持續關注,落地的架構和技術選型也參考其理念,并決定在后續版本逐步打通。
架構
網易云輕舟微服務框架整體架構V1.0
網易云輕舟微服務框架簡稱NSF,NSF 1.0版本的架構,以常見的微服務集群為主要場景,主體包括代理(nsf-agent)、服務控制中心(nsf-server)、注冊中心(nsf-registry),以及認證鑒權中心(Auth)、通用配置中心(Config)、監控中心(Monitor)、知識庫(knowledge)等通用組件。
NSF功能主體以nsf-agent為載體,其以代碼無侵入的java agent方式隨應用進程啟動,配合簡單的配置文件完成服務的注冊、發現,并對治理的目標進行方法級與服務級增強,使之具備熔斷、線程隔離、降級、限流、容錯等治理能力,以及負載均衡、路由、參數分流等流量控制能力。
nsf-server、nsf-registry為支撐nsf-agent能力提供了服務元信息管理、策略管理與分發、注冊信息同步與實時下發等平臺級能力。
Auth、Config、Monitor、Knowledge則作為微服務平臺通用組件提供諸如服務認證與鑒權、服務配置、服務監控、服務基礎信息能力。
這種架構最大的特點整體抽象agent,無需侵入業務服務代碼,同時提供平臺能力統一管理微服務信息、治理策略、配置等,降低微服務集群運維成本。而平臺本身也是微服務架構,也通過注冊中心、治理組件等保證自身微服務的穩定運行。
互聯互通社區
互聯互通社區專注于IT互聯網交流與學習,關注公眾號:互聯互通社區,每日獲取最新報告并附帶專題內容輔助學習。方案打造與宣講、架構設計與執行、技術攻堅與培訓、數據中臺等技術咨詢與服務合作請+微信:hulianhutongshequ
總結
以上是生活随笔為你收集整理的网易云轻舟设计理念与技术选型的全部內容,希望文章能夠幫你解決所遇到的問題。

- 上一篇: oracle连接工具 DBz,[Orac
- 下一篇: 微信开发必备工具:利用cpolar在公网