网易云轻舟设计理念与技术选型
微服務(wù)架構(gòu)技術(shù)經(jīng)過幾年的發(fā)展,已經(jīng)是百花齊放,各領(lǐng)風(fēng)騷。SpringCloud、Dubbo、自研RPC、Service Mesh…… 大家對(duì)微服務(wù)架構(gòu)下的技術(shù)、架構(gòu)、功能模塊似乎總有說不盡的話題。大部分團(tuán)隊(duì)在自身業(yè)務(wù)服務(wù)規(guī)模大到一定程度時(shí)開始引入微服務(wù)架構(gòu),而在技術(shù)選型上則大有百家爭(zhēng)鳴的感覺:
Spring體系下傾向以Spring Cloud作為框架主體;
Dubbo是國內(nèi)技術(shù)團(tuán)隊(duì)選型RPC通用框架的主要選擇;
對(duì)于技術(shù)實(shí)力較強(qiáng)技術(shù)積淀較多的公司或團(tuán)隊(duì),自研RPC+治理能力帶來的可定制性也成為主流選擇;
Service Mesh(服務(wù)網(wǎng)格)概念在2017年的崛起引發(fā)了“下一代微服務(wù)框架”的關(guān)注熱潮。
我們?cè)陂_發(fā)輕舟微服務(wù)框架之前也有些疑惑:究竟怎樣的選型和架構(gòu)最合適?如何避免重復(fù)造輪子?
設(shè)計(jì)理念
根據(jù)網(wǎng)易云服務(wù)網(wǎng)易集團(tuán)內(nèi)部業(yè)務(wù)和外部客戶的經(jīng)驗(yàn),我們首先梳理了微服務(wù)框架的設(shè)計(jì)理念。我們認(rèn)為,“最好”的選型與架構(gòu)需求是這樣的:
對(duì)業(yè)務(wù)無侵入:業(yè)務(wù)開發(fā)者應(yīng)該無需關(guān)注和學(xué)習(xí)治理相關(guān)的技術(shù),治理邏輯不應(yīng)侵入業(yè)務(wù)代碼。
功能完備:提供完備的治理功能全家桶,包括服務(wù)注冊(cè)/發(fā)現(xiàn),降級(jí),限流,容錯(cuò),負(fù)載均衡,分流等。
快速接入:業(yè)務(wù)系統(tǒng)可以快速接入框架和平臺(tái),同時(shí)通過平臺(tái)實(shí)時(shí)配置治理策略。
安全穩(wěn)定:提供統(tǒng)一的認(rèn)證、鑒權(quán)機(jī)制,同時(shí)保障業(yè)務(wù)系統(tǒng)穩(wěn)定運(yùn)行。
跨平臺(tái)性:如果能跨不同語言和平臺(tái),那自然是極好的。
隔離性:多租戶、多項(xiàng)目隔離,具備大平臺(tái)多業(yè)務(wù)隔離能力。
微服務(wù)生態(tài)親和性:符合微服務(wù)技術(shù)和架構(gòu)趨勢(shì),同時(shí)具備長(zhǎng)遠(yuǎn)的擴(kuò)展性。
開發(fā)愿景
輕舟微服務(wù)框架的最大愿景,就是可以讓業(yè)務(wù)系統(tǒng)開發(fā)者無需關(guān)注和學(xué)習(xí)治理相關(guān)技術(shù)、無需修改業(yè)務(wù)系統(tǒng)代碼就可以快速引入服務(wù)治理能力。
以SpringCloud體系為例。傳統(tǒng)開發(fā)模式下,如果業(yè)務(wù)開發(fā)需要引入微服務(wù)架構(gòu),就需要學(xué)習(xí)SpringCloud全家桶內(nèi)的相關(guān)內(nèi)容:
需要服務(wù)注冊(cè)/發(fā)現(xiàn)?請(qǐng)學(xué)習(xí)Eureka;
需要熔斷器、線程隔離?請(qǐng)學(xué)習(xí)Hystrix;
需要負(fù)載均衡?請(qǐng)學(xué)習(xí)Ribbon;
需要API網(wǎng)關(guān)?請(qǐng)學(xué)習(xí)Zuul;
需要配置中心?請(qǐng)學(xué)習(xí)Config、Bus;
……
如果使用傳統(tǒng)的方式,可能一家企業(yè)的若干團(tuán)隊(duì)的眾多相關(guān)開發(fā)人員都需要學(xué)習(xí)和熟悉Spring Cloud,至少是學(xué)習(xí)其中的部分組件,而且原生Spring Cloud組件在某些場(chǎng)景下缺乏靈活性,甚至存在一些BUG。除了掌握組件用法,甚至需要掌握核心源碼以避免一些被動(dòng)引入的坑。
所以,前文提及過的避免重復(fù)造輪子何其重要!
技術(shù)選型
從上面分析可以看出,比起各家各自為戰(zhàn)重復(fù)造輪子,我們更希望的是一個(gè)更通用、侵入性更低、能力更全面的微服務(wù)框架。自研RPC雖然能更貼近一些公司或團(tuán)隊(duì)的需求,但一般自研RPC往往帶有公司或團(tuán)隊(duì)長(zhǎng)期的技術(shù)背景,比較難作為通用技術(shù)選型,所以率先pass。
Spring Cloud作為開源屆大佬Spring旗下微服務(wù)框架的代表作,天生強(qiáng)大的同時(shí)還天生要強(qiáng)的引入了Netflix較完備的微服務(wù)治理工具集,諸如Eureka、Ribbon、Hystrix、Config、Archaius、Zuul。依托較早脫穎而出的SpringBoot,Spring在微服務(wù)圈依舊擁有眾多擁簇。
SpringCloud全家桶
Dubbo作為一款標(biāo)桿型的RPC框架,依托大廠場(chǎng)景成為國內(nèi)公司RPC框架的重要選擇。從小到大到開放到停止維護(hù)再到恢復(fù)開放更新,Dubbo發(fā)展歷經(jīng)風(fēng)雨又讓開發(fā)者日久彌新。前期重RPC輕治理喪失了一些追求完整解決方案的粉絲,后來重新煥發(fā)生機(jī)引入了較多治理特性,也可以作為通用框架備選。
Service Mesh自問世起就備受關(guān)注,它提出的無侵入、去中心、高可運(yùn)維型和擴(kuò)展性架構(gòu)十分迷人。Istio作為宇宙級(jí)大廠Google、IBM等的聯(lián)合作品,2017年的橫空出世讓人感覺到微服務(wù)全新時(shí)代到來的氣息。其依托于Kubernetes平臺(tái),雖然前期版本問題不少,其架構(gòu)和技術(shù)的先進(jìn)性還是微服務(wù)架構(gòu)追隨者看到了來自遠(yuǎn)方的曙光。
Istio架構(gòu)
關(guān)于這幾個(gè)框架橫向?qū)Ρ群驮敿?xì)介紹的文章較多,本文不做詳述。從通用微服務(wù)框架角度,滿足架構(gòu)、功能、擴(kuò)展性是技術(shù)選型的核心要素。網(wǎng)易云輕舟微服務(wù)團(tuán)隊(duì)在開始進(jìn)行微服務(wù)基礎(chǔ)框架選型時(shí),對(duì)各個(gè)框架發(fā)展?fàn)顩r的最終思考如下:
Spring Cloud在Java體系微服務(wù)成熟度較高,功能全家桶能力較全,加之Spring的天生優(yōu)勢(shì),成為我們微服務(wù)框架落地的首選;
Dubbo初期治理能力的欠缺;
Service Mesh理念超前,但由于框架處于較早期階段,尚存在一定問題(平臺(tái)綁定Kubernetes、性能問題等),不太容易在傳統(tǒng)業(yè)務(wù)直接落地。
當(dāng)然,Service Mesh在架構(gòu)和技術(shù)上的超前性同樣讓我們持續(xù)關(guān)注,落地的架構(gòu)和技術(shù)選型也參考其理念,并決定在后續(xù)版本逐步打通。
架構(gòu)
網(wǎng)易云輕舟微服務(wù)框架整體架構(gòu)V1.0
網(wǎng)易云輕舟微服務(wù)框架簡(jiǎn)稱NSF,NSF 1.0版本的架構(gòu),以常見的微服務(wù)集群為主要場(chǎng)景,主體包括代理(nsf-agent)、服務(wù)控制中心(nsf-server)、注冊(cè)中心(nsf-registry),以及認(rèn)證鑒權(quán)中心(Auth)、通用配置中心(Config)、監(jiān)控中心(Monitor)、知識(shí)庫(knowledge)等通用組件。
NSF功能主體以nsf-agent為載體,其以代碼無侵入的java agent方式隨應(yīng)用進(jìn)程啟動(dòng),配合簡(jiǎn)單的配置文件完成服務(wù)的注冊(cè)、發(fā)現(xiàn),并對(duì)治理的目標(biāo)進(jìn)行方法級(jí)與服務(wù)級(jí)增強(qiáng),使之具備熔斷、線程隔離、降級(jí)、限流、容錯(cuò)等治理能力,以及負(fù)載均衡、路由、參數(shù)分流等流量控制能力。
nsf-server、nsf-registry為支撐nsf-agent能力提供了服務(wù)元信息管理、策略管理與分發(fā)、注冊(cè)信息同步與實(shí)時(shí)下發(fā)等平臺(tái)級(jí)能力。
Auth、Config、Monitor、Knowledge則作為微服務(wù)平臺(tái)通用組件提供諸如服務(wù)認(rèn)證與鑒權(quán)、服務(wù)配置、服務(wù)監(jiān)控、服務(wù)基礎(chǔ)信息能力。
這種架構(gòu)最大的特點(diǎn)整體抽象agent,無需侵入業(yè)務(wù)服務(wù)代碼,同時(shí)提供平臺(tái)能力統(tǒng)一管理微服務(wù)信息、治理策略、配置等,降低微服務(wù)集群運(yùn)維成本。而平臺(tái)本身也是微服務(wù)架構(gòu),也通過注冊(cè)中心、治理組件等保證自身微服務(wù)的穩(wěn)定運(yùn)行。
互聯(lián)互通社區(qū)
互聯(lián)互通社區(qū)專注于IT互聯(lián)網(wǎng)交流與學(xué)習(xí),關(guān)注公眾號(hào):互聯(lián)互通社區(qū),每日獲取最新報(bào)告并附帶專題內(nèi)容輔助學(xué)習(xí)。方案打造與宣講、架構(gòu)設(shè)計(jì)與執(zhí)行、技術(shù)攻堅(jiān)與培訓(xùn)、數(shù)據(jù)中臺(tái)等技術(shù)咨詢與服務(wù)合作請(qǐng)+微信:hulianhutongshequ
總結(jié)
以上是生活随笔為你收集整理的网易云轻舟设计理念与技术选型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: oracle连接工具 DBz,[Orac
 - 下一篇: 微信开发必备工具:利用cpolar在公网