☆聊聊Dubbo(一):為何選擇

1. 前言

隨著現(xiàn)在互聯(lián)網(wǎng)行業(yè)的發(fā)展,越來越多的框架爷辱、中間件录豺、容器等開源技術(shù)不斷地涌現(xiàn),更好地來服務(wù)于業(yè)務(wù)饭弓,實(shí)現(xiàn)業(yè)務(wù)并解決問題双饥。然而面對(duì)眾多的技術(shù)選擇,我們要如何甄別出適合自己團(tuán)隊(duì)業(yè)務(wù)的技術(shù)呢弟断?對(duì)于人來說咏花,鞋子過大,可能影響奔跑的速度,鞋子過小昏翰,可能影響身體的成長苍匆。技術(shù)對(duì)于業(yè)務(wù)也是如此的關(guān)系。

所以棚菊,相對(duì)于技術(shù)的學(xué)習(xí)浸踩、搭建、使用统求、運(yùn)維等技能检碗,我們 對(duì)技術(shù)的甄別選擇更是重中之重。那么本文要講的Dubbox框架码邻,又是如何在眾多的服務(wù)框架中脫穎而出折剃,被團(tuán)隊(duì)選中踐行服務(wù)之路?

2. 服務(wù)

2.1 為什么要做服務(wù)

技術(shù)為業(yè)務(wù)而生像屋,架構(gòu)也為業(yè)務(wù)而出現(xiàn)怕犁。隨著業(yè)務(wù)的發(fā)展、用戶量的增長开睡,系統(tǒng)數(shù)量增多因苹,調(diào)用依賴關(guān)系也變得復(fù)雜,為了確保系統(tǒng)高可用篇恒、高并發(fā)的要求扶檐,系統(tǒng)的架構(gòu)也從單體時(shí)代慢慢遷移至服務(wù)SOA時(shí)代,根據(jù)不同服務(wù)對(duì)系統(tǒng)資源的要求不同胁艰,我們可以更合理的配置系統(tǒng)資源款筑,使系統(tǒng)資源利用率最大化

系統(tǒng)架構(gòu)演進(jìn)
  1. 單一應(yīng)用架構(gòu)

    當(dāng)網(wǎng)站流量很小時(shí)腾么,只需一個(gè)應(yīng)用奈梳,將所有功能都部署在一起,以減少部署節(jié)點(diǎn)和成本解虱。

    此時(shí)攘须,用于簡化增刪改查工作量的 數(shù)據(jù)訪問框架(ORM) 是關(guān)鍵。

  2. 垂直應(yīng)用架構(gòu)

    當(dāng)訪問量逐漸增大殴泰,單一應(yīng)用增加機(jī)器帶來的加速度越來越小于宙,將應(yīng)用拆成互不相干的幾個(gè)應(yīng)用,以提升效率悍汛。

    此時(shí)捞魁,用于加速前端頁面開發(fā)的 Web框架(MVC) 是關(guān)鍵。

  3. 分布式服務(wù)架構(gòu)

    當(dāng)垂直應(yīng)用越來越多离咐,應(yīng)用之間交互不可避免谱俭,將核心業(yè)務(wù)抽取出來,作為獨(dú)立的服務(wù),逐漸形成穩(wěn)定的服務(wù)中心昆著,使前端應(yīng)用能更快速的響應(yīng)多變的市場(chǎng)需求县貌。

    此時(shí),用于提高業(yè)務(wù)復(fù)用及整合的 分布式服務(wù)框架(RPC) 是關(guān)鍵宣吱。

  4. 流動(dòng)計(jì)算架構(gòu)

    當(dāng)服務(wù)越來越多窃这,容量的評(píng)估,小服務(wù)資源的浪費(fèi)等問題逐漸顯現(xiàn)征候,此時(shí)需增加一個(gè)調(diào)度中心基于訪問壓力實(shí)時(shí)管理集群容量杭攻,提高集群利用率
    此時(shí)疤坝,用于提高機(jī)器利用率的 資源調(diào)度和治理中心(SOA) 是關(guān)鍵兆解。

平臺(tái)隨著業(yè)務(wù)的發(fā)展 從 All in One 環(huán)境 就可以滿足業(yè)務(wù)需求(以Java來說,可能只是一兩個(gè)war包就解決了)跑揉;發(fā)展到需 要拆分多個(gè)應(yīng)用锅睛,并且采用MVC的方式 分離前后端,加快開發(fā)效率历谍;在發(fā)展到服務(wù)越來越多现拒,不得不將 一些核心或共用的服務(wù)拆分出來,提供實(shí)時(shí)流動(dòng)監(jiān)控計(jì)算等望侈,其實(shí)發(fā)展到此階段印蔬,如果服務(wù)拆分的足夠精細(xì),并且獨(dú)立運(yùn)行脱衙,這個(gè)時(shí)候至少可以 理解為SOA(Service-Oriented Architecture)架構(gòu) 了侥猬。

2.2 服務(wù)帶來的挑戰(zhàn)

當(dāng)迎來服務(wù)SOA時(shí)代,我們面臨要解決的問題會(huì)很多捐韩,比如:系統(tǒng)的復(fù)雜度上升退唠、服務(wù)依賴關(guān)系、服務(wù)性能監(jiān)控荤胁、全鏈路日志瞧预、容災(zāi)、斷路器仅政、限流等垢油。那么面對(duì)這些問題為什么還要做分布式服務(wù)呢?因?yàn)樵谖磥碇挥许频Z前行已旧,才能走的更高更遠(yuǎn)秸苗。不過看到這些問題不要?dú)怵H召娜,先不管這些問題运褪,讓我們一步步來梳理下現(xiàn)存有什么問題,我們要完成什么目標(biāo),問題自然會(huì)迎刃而解秸讹。

根據(jù)現(xiàn)在團(tuán)隊(duì)的業(yè)務(wù)系統(tǒng)情況檀咙,首先我們要梳理出現(xiàn)存的問題是什么:

  1. 多種調(diào)用傳輸方式:HTTP方式、WebService方式璃诀;
  2. 服務(wù)調(diào)用依賴關(guān)系:人工記錄弧可,查看代碼分析;
  3. 服務(wù)調(diào)用性能監(jiān)控:日志記錄劣欢,人工查看時(shí)間棕诵;
  4. 服務(wù)與應(yīng)用緊耦合:服務(wù)掛掉,應(yīng)用無法可用凿将;
  5. 服務(wù)集群負(fù)載配置:Nginx配置校套,存在單點(diǎn)問題;

那么牧抵,在選擇技術(shù)框架時(shí)笛匙,技術(shù)框架最基本要解決上面現(xiàn)存問題,同時(shí)我們也要確認(rèn)出我們的期望犀变,要達(dá)到的目標(biāo)是什么:

  1. 支持當(dāng)前業(yè)務(wù)需求妹孙,這是最最基本的條件;
  2. 服務(wù)避免單點(diǎn)問題获枝,去中心化蠢正;
  3. 服務(wù)高可用、高并發(fā)映琳,解耦服務(wù)依賴机隙;
  4. 服務(wù)通用化,支持異構(gòu)系統(tǒng)調(diào)用服務(wù)萨西;
  5. 服務(wù)依賴關(guān)系自維護(hù)有鹿,可視化;
  6. 服務(wù)性能監(jiān)控自統(tǒng)計(jì)谎脯,可視化葱跋;
  7. 服務(wù)需自帶注冊(cè)、發(fā)現(xiàn)源梭、健康檢查娱俺、負(fù)載均衡等特性;
  8. 開發(fā)人員關(guān)注度高废麻,上手快荠卷,簡單輕量,低侵入烛愧;

還有最重要一點(diǎn)油宜,這也是往往很多技術(shù)人員進(jìn)入的誤區(qū)掂碱,“對(duì)于技術(shù),不要為了使用而使用慎冤,用最簡單合適的技術(shù)實(shí)現(xiàn)解決問題才是正道”疼燥。架構(gòu)是服務(wù)于業(yè)務(wù)的,能快速方便的滿足業(yè)務(wù)需求的架構(gòu)才是好的架構(gòu)蚁堤。

沒有最好的醉者,只有適合自己的

2.3 服務(wù)未來的趨勢(shì)

一談到服務(wù),可能大家很多聽說過SOA披诗、MSA等服務(wù)的概念名詞撬即,近幾年MSA炒的比較火,其實(shí)每一個(gè)概念的背后都在解決不同的問題呈队。此類名詞的最大特點(diǎn)就是 一解釋就懂搞莺,一問就不知,一討論就打架掂咒。

SOA才沧、MSA兩者說到底都是對(duì)外提供接口的一種架構(gòu)設(shè)計(jì)方式。微服務(wù)其實(shí)就是隨著互聯(lián)網(wǎng)的發(fā)展绍刮,復(fù)雜的平臺(tái)温圆、業(yè)務(wù)的出現(xiàn),導(dǎo)致SOA架構(gòu)向更細(xì)粒度孩革、更通用化程度發(fā)展岁歉,就成了所謂的微服務(wù)了。以這種說法做為根據(jù)膝蜈,我覺得SOA與微服務(wù)的區(qū)別在于如下幾個(gè)方面:

  1. 微服務(wù)相比于SOA更加精細(xì)锅移,微服務(wù)更多的以獨(dú)立的進(jìn)程的方式存在,互相之間并無影響饱搏;
  2. 微服務(wù)提供的接口方式更加通用化非剃,例如HTTP RESTful方式,各種終端都可以調(diào)用推沸,無關(guān)語言备绽、平臺(tái)限制;
  3. 微服務(wù)更傾向于分布式去中心化的部署方式鬓催,在互聯(lián)網(wǎng)業(yè)務(wù)場(chǎng)景下更適合肺素;

微服務(wù)與SOA有很多相同之處。兩者都屬于典型的宇驾、包含松耦合分布式組件的系統(tǒng)結(jié)構(gòu)倍靡。在圍繞著服務(wù)的概念創(chuàng)建架構(gòu)這一方面,微服務(wù)提供了一種更清晰课舍、定義更良好的方式塌西。微服務(wù)的原則與敏捷軟件開發(fā)思想是高度一致的蜗顽,而它與SOA原則的演化的目標(biāo)也是相同的,則減少傳統(tǒng)的企業(yè)服務(wù)總線開發(fā)的高復(fù)雜性雨让。兩者之間最關(guān)鍵的區(qū)別在于,微服務(wù)專注于以自治的方式產(chǎn)生價(jià)值忿等。但是兩種架構(gòu)背后的意圖是不同的:SOA嘗試將應(yīng)用集成栖忠,一般采用中央管理模式來確保各應(yīng)用能夠交互運(yùn)作。微服務(wù)嘗試部署新功能贸街,快速有效地?cái)U(kuò)展開發(fā)團(tuán)隊(duì)庵寞。它著重于分散管理、代碼再利用與自動(dòng)化執(zhí)行薛匪。

功能 SOA 微服務(wù)
組件大小 大塊業(yè)務(wù)邏輯 單獨(dú)任務(wù)或小塊業(yè)務(wù)邏輯
耦合 通常松耦合 總是松耦合
公司架構(gòu) 任何類型 小型捐川、專注于功能交叉的團(tuán)隊(duì)
管理 著重中央管理 著重分散管理
目標(biāo) 確保應(yīng)用能夠交互操作 執(zhí)行新功能,快速拓展開發(fā)團(tuán)隊(duì)

微服務(wù)并不是一種新思想的方法逸尖。它更像是一種思想的精煉古沥,一種SOA的精細(xì)化演進(jìn),并且更好地利用了先進(jìn)的技術(shù)以解決問題娇跟,例如容器與自動(dòng)化等岩齿。所以對(duì)于我們 去選擇服務(wù)技術(shù)框架時(shí),并不是非黑即白苞俘,而是針對(duì)SOA盹沈、MSA兩種架構(gòu)設(shè)計(jì)同時(shí)要考慮到兼容性,對(duì)于現(xiàn)有平臺(tái)情況架構(gòu)設(shè)計(jì)吃谣,退則守SOA乞封,進(jìn)則攻MSA,階段性選擇適合的岗憋。

3. 框架

現(xiàn)在業(yè)界比較成熟的服務(wù)框架有很多肃晚,比如:Hessian、CXF仔戈、Dubbo陷揪、Dubbox、Spring Cloud杂穷、gRPC悍缠、thrift等技術(shù)實(shí)現(xiàn),都可以進(jìn)行遠(yuǎn)程調(diào)用耐量,具體技術(shù)實(shí)現(xiàn)優(yōu)劣參考以下分析飞蚓,這也是具體在技術(shù)方案選擇過程中的重要依據(jù)。

3.1 服務(wù)框架對(duì)比

Dubbo 是阿里巴巴公司開源的一個(gè)Java高性能優(yōu)秀的服務(wù)框架廊蜒,使得應(yīng)用可通過高性能的 RPC 實(shí)現(xiàn)服務(wù)的輸出和輸入功能趴拧,可以和 Spring框架無縫集成溅漾。不過,略有遺憾的是著榴,據(jù)說在淘寶內(nèi)部添履,dubbo由于跟淘寶另一個(gè)類似的框架HSF(非開源)有競爭關(guān)系,導(dǎo)致dubbo團(tuán)隊(duì)已經(jīng)解散脑又,反到是當(dāng)當(dāng)網(wǎng)的擴(kuò)展版本Dubbox仍在持續(xù)發(fā)展暮胧,墻內(nèi)開花墻外香。其它的一些知名電商如當(dāng)當(dāng)问麸、國美維護(hù)了自己的分支或者在dubbo的基礎(chǔ)開發(fā)往衷,但是官方的庫缺乏維護(hù),相關(guān)的依賴類比如Spring严卖,Netty還是很老的版本(Spring 3.2.16.RELEASE, netty 3.2.5.Final),倒是有些網(wǎng)友寫了升級(jí)Spring和Netty的插件席舍。

Dubbox和Dubbo本質(zhì)上沒有區(qū)別,名字的含義擴(kuò)展了Dubbo而已哮笆,以下擴(kuò)展出來的功能来颤,也是選擇Dubbox很重要的考察點(diǎn)。

  1. 支持REST風(fēng)格遠(yuǎn)程調(diào)用(HTTP + JSON/XML)稠肘;
  2. 支持基于Kryo和FST的Java高效序列化實(shí)現(xiàn)脚曾;
  3. 支持基于Jackson的JSON序列化;
  4. 支持基于嵌入式Tomcat的HTTP remoting體系启具;
  5. 升級(jí)Spring至3.x本讥;
  6. 升級(jí)ZooKeeper客戶端;
  7. 支持完全基于Java代碼的Dubbo配置鲁冯;

Spring Cloud完全基于Spring Boot拷沸,是一個(gè)非常新的項(xiàng)目,2016年推出1.0的release版本薯演,目前Github上更新速度很快. 雖然Spring Cloud時(shí)間最短, 但是相比Dubbo等RPC框架, Spring Cloud提供的全套的分布式系統(tǒng)解決方案撞芍。Spring Cloud 為開發(fā)者提供了在分布式系統(tǒng)(配置管理,服務(wù)發(fā)現(xiàn)跨扮,熔斷序无,路由,微代理衡创,控制總線帝嗡,一次性token,全局瑣璃氢,leader選舉哟玷,分布式session,集群狀態(tài))中快速構(gòu)建的工具一也,使用Spring Cloud的開發(fā)者可以快速的啟動(dòng)服務(wù)或構(gòu)建應(yīng)用巢寡。它們將在任何分布式環(huán)境中工作喉脖,包括開發(fā)人員自己的筆記本電腦,裸物理機(jī)的數(shù)據(jù)中心抑月,和像Cloud Foundry云管理平臺(tái)树叽。在未來引領(lǐng)這微服務(wù)架構(gòu)的發(fā)展,提供業(yè)界標(biāo)準(zhǔn)的一套微服務(wù)架構(gòu)解決方案谦絮。

缺點(diǎn)是項(xiàng)目很年輕题诵,很少見到國內(nèi)業(yè)界有人在生產(chǎn)上成套使用,一般都是只有其中一兩個(gè)組件挨稿。相關(guān)的技術(shù)文檔大部分是英文的,案例也相對(duì)較少京痢,使用的話需要摸索的時(shí)間會(huì)長一些奶甘。

下圖是Spring Cloud和Dubbo對(duì)比:

Spring Cloud和Dubbo對(duì)比

Motan是新浪微博開源的一個(gè)Java 框架。它誕生的比較晚祭椰,起于2013年臭家,2016年5月開源。Motan 在微博平臺(tái)中已經(jīng)廣泛應(yīng)用方淤,每天為數(shù)百個(gè)服務(wù)完成近千億次的調(diào)用钉赁。與Dubbo相比,Motan在功能方面并沒有那么全面携茂,也沒有實(shí)現(xiàn)特別多的擴(kuò)展你踩。用的人比較少,功能和穩(wěn)定性有待觀望讳苦。對(duì)跨語言調(diào)用支持較差带膜,主要支持java

Hessian采用的是 二進(jìn)制RPC協(xié)議鸳谜,適用于發(fā)送二進(jìn)制數(shù)據(jù)膝藕。但本身也是一個(gè)Web Service框架對(duì)RPC調(diào)用提供支持,功能簡單咐扭,使用起來也方便芭挽。基于Http協(xié)議進(jìn)行傳輸。通過Servlet提供遠(yuǎn)程服務(wù)蝗肪。通過Hessain本身提供的API來發(fā)起請(qǐng)求袜爪。響應(yīng)端根據(jù)Hessian提供的API來接受請(qǐng)求。

Hessian優(yōu)點(diǎn):

  1. 整個(gè)jar很小薛闪,輕量饿敲;
  2. 配置簡單;
  3. 功能強(qiáng)大逛绵,拋開了soap(simple object access protocal 簡單對(duì)象訪問協(xié)議)怀各、ejb倔韭,采用二進(jìn)制來傳遞對(duì)象

rpcx是Go語言生態(tài)圈的Dubbo瓢对, 比Dubbo更輕量寿酌,實(shí)現(xiàn)了Dubbo的許多特性,借助于 Go語言優(yōu)秀的并發(fā)特性和簡潔語法硕蛹,可以使用較少的代碼實(shí)現(xiàn)分布式的RPC服務(wù)醇疼。

gRPC是Google開發(fā)的高性能、通用的開源RPC框架法焰,其由Google主要面向移動(dòng)應(yīng)用開發(fā)并基于HTTP/2協(xié)議標(biāo)準(zhǔn)而設(shè)計(jì)秧荆,基于ProtoBuf(Protocol Buffers)序列化協(xié)議開發(fā),且支持眾多開發(fā)語言埃仪。本身它不是分布式的乙濒,所以要實(shí)現(xiàn)上面的框架的功能需要進(jìn)一步的開發(fā)。

thrift是Apache的一個(gè)跨語言的高性能的服務(wù)框架卵蛉,也得到了廣泛的應(yīng)用颁股。

以上RPC框架功能比較:

功能 Hessian Montan rpcx gRPC Thrift Dubbo Dubbox Spring Cloud
開發(fā)語言 跨語言 Java Go 跨語言 跨語言 Java Java Java
分布式(服務(wù)治理) × × ×
多序列化框架支持 hessian √(支持Hessian2、Json,可擴(kuò)展) × 只支持protobuf) ×(thrift格式)
多種注冊(cè)中心 × × ×
管理中心 × × ×
跨編程語言 ×(支持php client和C server) × × × ×
支持REST × × × × × ×
關(guān)注度
上手難度
運(yùn)維成本
開源機(jī)構(gòu) Caucho Weibo Apache Google Apache Alibaba Dangdang Apache

實(shí)際場(chǎng)景中的選擇

  1. Spring Cloud:Spring全家桶傻丝,用起來很舒服,只有你想不到葡缰,沒有它做不到亏掀。可惜因?yàn)榘l(fā)布的比較晚泛释,國內(nèi)還沒出現(xiàn)比較成功的案例幌氮,大部分都是試水,不過畢竟有Spring作背書胁澳,還是比較看好该互。
  2. Dubbox:相對(duì)于Dubbo支持了REST,估計(jì)是很多公司選擇Dubbox的一個(gè)重要原因之一韭畸,但如果使用Dubbo的RPC調(diào)用方式宇智,服務(wù)間仍然會(huì)存在API強(qiáng)依賴,各有利弊胰丁,懂的取舍吧随橘。
  3. Thrift:如果你比較高冷,完全可以基于Thrift自己搞一套抽象的自定義框架吧锦庸。
  4. Montan:可能因?yàn)槌鰜淼谋容^晚机蔗,目前除了新浪微博16年初發(fā)布的,
  5. Hessian:如果是初創(chuàng)公司或系統(tǒng)數(shù)量還沒有超過5個(gè),推薦選擇這個(gè)萝嘁,畢竟在開發(fā)速度梆掸、運(yùn)維成本、上手難度等都是比較輕量牙言、簡單的酸钦,即使在以后遷移至SOA,也是無縫遷移咱枉。
  6. rpcx/gRPC:在服務(wù)沒有出現(xiàn)嚴(yán)重性能的問題下卑硫,或技術(shù)棧沒有變更的情況下,可能一直不會(huì)引入蚕断,即使引入也只是小部分模塊優(yōu)化使用欢伏。

3.2 RPC vs REST(JAX-RS)

由于Dubbo是基礎(chǔ)框架,其實(shí)現(xiàn)的內(nèi)容對(duì)于我們實(shí)施微服務(wù)架構(gòu)是否合理亿乳,也需要我們根據(jù)自身需求去考慮是否要修改硝拧,比如Dubbo的服務(wù)調(diào)用是通過RPC實(shí)現(xiàn)的,但是如果仔細(xì)拜讀過Martin Fowler的microservices一文风皿,其定義的服務(wù)間通信是HTTP協(xié)議的REST API河爹。那么這兩種有何區(qū)別呢匠璧?

  1. 服務(wù)提供方與調(diào)用方接口依賴方式太強(qiáng)

    我們?yōu)槊總€(gè)微服務(wù)定義了各自的service抽象接口桐款,并通過持續(xù)集成發(fā)布到私有倉庫中,調(diào)用方應(yīng)用對(duì)微服務(wù)提供的抽象接口存在強(qiáng)依賴關(guān)系夷恍,因此不論開發(fā)魔眨、測(cè)試、集成環(huán)境都需要嚴(yán)格的管理版本依賴酿雪,才不會(huì)出現(xiàn)服務(wù)方與調(diào)用方的不一致導(dǎo)致應(yīng)用無法編譯成功等一系列問題遏暴,以及這也會(huì)直接影響本地開發(fā)的環(huán)境要求,往往一個(gè)依賴很多服務(wù)的上層應(yīng)用指黎,每天都要更新很多代碼并install之后才能進(jìn)行后續(xù)的開發(fā)朋凉。若沒有嚴(yán)格的版本管理制度或開發(fā)一些自動(dòng)化工具,這樣的依賴關(guān)系會(huì)成為開發(fā)團(tuán)隊(duì)的一大噩夢(mèng)醋安。而REST接口相比RPC更為輕量化杂彭,服務(wù)提供方和調(diào)用方的依賴只是依靠一紙契約,不存在代碼級(jí)別的強(qiáng)依賴吓揪,當(dāng)然REST接口也有痛點(diǎn)亲怠,因?yàn)榻涌诙x過輕,很容易導(dǎo)致定義文檔與實(shí)際實(shí)現(xiàn)不一致導(dǎo)致服務(wù)集成時(shí)的問題柠辞,但是該問題很好解決团秽,只需要通過每個(gè)服務(wù)整合swagger,讓每個(gè)服務(wù)的代碼與文檔一體化,就能解決习勤。所以在分布式環(huán)境下踪栋,REST方式的服務(wù)依賴要比RPC方式的依賴更為靈活。

  2. 服務(wù)對(duì)平臺(tái)敏感姻报,難以簡單復(fù)用

    通常我們?cè)谔峁?duì)外服務(wù)時(shí)己英,都會(huì) 以REST的方式提供出去,這樣可以實(shí)現(xiàn)跨平臺(tái)的特點(diǎn)吴旋,任何一個(gè)語言的調(diào)用方都可以根據(jù)接口定義來實(shí)現(xiàn)损肛。那么在Dubbo中我們要提供REST接口時(shí),不得不實(shí)現(xiàn)一層代理荣瑟,用來將RPC接口轉(zhuǎn)換成REST接口進(jìn)行對(duì)外發(fā)布治拿。若我們每個(gè)服務(wù)本身就以REST接口方式存在,當(dāng)要對(duì)外提供服務(wù)時(shí)笆焰,主要在API網(wǎng)關(guān)中配置映射關(guān)系和權(quán)限控制就可實(shí)現(xiàn)服務(wù)的復(fù)用了劫谅。

相信這些痛點(diǎn)也是為什么當(dāng)當(dāng)網(wǎng)在dubbox(基于Dubbo的開源擴(kuò)展)中增加了對(duì)REST支持的原因之一。

Dubbo實(shí)現(xiàn)了服務(wù)治理的基礎(chǔ)嚷掠,但是要完成一個(gè)完備的微服務(wù)架構(gòu)捏检,還需要在各環(huán)節(jié)去擴(kuò)展和完善以保證集群的健康,以減輕開發(fā)不皆、測(cè)試以及運(yùn)維各個(gè)環(huán)節(jié)上增加出來的壓力贯城,這樣才能讓各環(huán)節(jié)人員真正的專注于業(yè)務(wù)邏輯。

而Spring Cloud依然發(fā)揚(yáng)了Spring Source整合一切的作風(fēng)霹娄,以標(biāo)準(zhǔn)化的姿態(tài)將一些微服務(wù)架構(gòu)的成熟產(chǎn)品與框架揉為一體能犯,并繼承了Spring Boot簡單配置、快速開發(fā)犬耻、輕松部署的特點(diǎn)踩晶,讓原本復(fù)雜的架構(gòu)工作變得相對(duì)容易上手一些。

所以枕磁,如果選擇Dubbo請(qǐng)務(wù)必在各個(gè)環(huán)節(jié)做好整套解決方案的準(zhǔn)備渡蜻,不然很可能隨著服務(wù)數(shù)量的增長,整個(gè)團(tuán)隊(duì)都將疲于應(yīng)付各種架構(gòu)上不足引起的困難计济。而如果選擇Spring Cloud茸苇,相對(duì)來說每個(gè)環(huán)節(jié)都已經(jīng)有了對(duì)應(yīng)的組件支持,可能有些也不一定能滿足你所有的需求峭咒,但是其活躍的社區(qū)與高速的迭代進(jìn)度也會(huì)是你可以依靠的強(qiáng)大后盾税弃。

微服務(wù)結(jié)構(gòu)圖

4. Dubbox帶來什么

4.1 Dubbo服務(wù)治理

Dubbo服務(wù)治理
特性 描述
透明遠(yuǎn)程調(diào)用 就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法;只需簡單配置凑队,沒有任何API侵入则果;
負(fù)載均衡機(jī)制 Client端LB幔翰,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器;
容錯(cuò)重試機(jī)制 服務(wù)Mock數(shù)據(jù)西壮,重試次數(shù)遗增、超時(shí)機(jī)制等;
自動(dòng)注冊(cè)發(fā)現(xiàn) 注冊(cè)中心基于接口名查詢服務(wù)提 供者的IP地址款青,并且能夠平滑添加或刪除服務(wù)提供者做修;
性能日志監(jiān)控 Monitor統(tǒng)計(jì)服務(wù)的調(diào)用次調(diào)和調(diào)用時(shí)間的監(jiān)控中心;
服務(wù)治理中心 路由規(guī)則抡草,動(dòng)態(tài)配置饰及,服務(wù)降級(jí),訪問控制康震,權(quán)重調(diào)整燎含,負(fù)載均衡,等手動(dòng)配置腿短。
自動(dòng)治理中心 無屏箍,比如:熔斷限流機(jī)制、自動(dòng)權(quán)重調(diào)整等橘忱;

4.2 Dubbox擴(kuò)展特性

  1. 支持REST風(fēng)格遠(yuǎn)程調(diào)用(HTTP + JSON/XML)赴魁;
  2. 支持基于Kryo和FST的Java高效序列化實(shí)現(xiàn);
  3. 支持基于Jackson的JSON序列化钝诚;
  4. 支持基于嵌入式Tomcat的HTTP remoting體系颖御;
  5. 升級(jí)Spring至3.x;
  6. 升級(jí)ZooKeeper客戶端敲长;
  7. 支持完全基于Java代碼的Dubbo配置郎嫁;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秉继,一起剝皮案震驚了整個(gè)濱河市祈噪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尚辑,老刑警劉巖辑鲤,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異杠茬,居然都是意外死亡月褥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門瓢喉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宁赤,“玉大人,你說我怎么就攤上這事栓票【鲎螅” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長佛猛。 經(jīng)常有香客問我惑芭,道長,這世上最難降的妖魔是什么继找? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任遂跟,我火速辦了婚禮,結(jié)果婚禮上婴渡,老公的妹妹穿的比我還像新娘幻锁。我一直安慰自己,他們只是感情好边臼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布越败。 她就那樣靜靜地躺著,像睡著了一般硼瓣。 火紅的嫁衣襯著肌膚如雪究飞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天堂鲤,我揣著相機(jī)與錄音亿傅,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驻粟。 我是一名探鬼主播悄晃,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼隧膏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤盯串,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后戒良,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體体捏,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年糯崎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了几缭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沃呢,死狀恐怖年栓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄霜,我是刑警寧澤某抓,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布竿刁,位于F島的核電站,受9級(jí)特大地震影響搪缨,放射性物質(zhì)發(fā)生泄漏食拜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一副编、第九天 我趴在偏房一處隱蔽的房頂上張望负甸。 院中可真熱鬧,春花似錦痹届、人聲如沸呻待。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚕捉。三九已至,卻和暖如春柴淘,著一層夾襖步出監(jiān)牢的瞬間迫淹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國打工为严, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留敛熬,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓第股,卻偏偏與公主長得像应民,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夕吻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容