javascript
SpringCloud学习--微服务架构
目錄
微服務(wù)架構(gòu)快速指南
SOA
Dubbo
Spring Cloud
Dubbo與SpringCloud對(duì)比
微服務(wù)(Microservice)架構(gòu)快速指南
什么是軟件架構(gòu)?
軟件架構(gòu)是一個(gè)包含各種組織的系統(tǒng)組織,這些組件包括 Web服務(wù)器, 應(yīng)用服務(wù)器, 數(shù)據(jù)庫(kù),存儲(chǔ), 通訊層), 它們彼此或和環(huán)境存在關(guān)系。
什么是微服務(wù)架構(gòu)?
微服務(wù)是指開發(fā)一個(gè)單個(gè) 小型的但有業(yè)務(wù)功能的服務(wù),每個(gè)服務(wù)都有自己的處理和輕量通訊機(jī)制,可以部署在單個(gè)或多個(gè)服務(wù)器上。
微服務(wù)也指一種種松耦合的、有一定的有界上下文的面向服務(wù)架構(gòu)。也就是說,如果每個(gè)服務(wù)都要同時(shí)修改,那么它們就不是微服務(wù),因?yàn)樗鼈兙o耦合在一起;如果你需要掌握一個(gè)服務(wù)太多的上下文場(chǎng)景使用條件,那么它就是一個(gè)有上下文邊界的服務(wù),這個(gè)定義來自DDD領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。
微服務(wù)架構(gòu)的優(yōu)缺點(diǎn)?
優(yōu)點(diǎn)
- 每個(gè)微服務(wù)都很小,這樣能聚焦一個(gè)指定的業(yè)務(wù)功能或業(yè)務(wù)需求。
- 微服務(wù)能夠被小團(tuán)隊(duì)單獨(dú)開發(fā),這個(gè)小團(tuán)隊(duì)是2到5人的開發(fā)人員組成。
- 微服務(wù)是松耦合的,是有功能意義的服務(wù),無論是在開發(fā)階段或部署階段都是獨(dú)立的。
- 微服務(wù)能使用不同的語(yǔ)言開發(fā)。
- 微服務(wù)允許容易且靈活的方式集成自動(dòng)部署,通過持續(xù)集成工具,如Jenkins, Hudson, bamboo 。
- 一個(gè)團(tuán)隊(duì)的新成員能夠更快投入生產(chǎn)。
- 微服務(wù)易于被一個(gè)開發(fā)人員理解,修改和維護(hù),這樣小團(tuán)隊(duì)能夠更關(guān)注自己的工作成果。無需通過合作才能體現(xiàn)價(jià)值。
- 微服務(wù)允許你利用融合最新技術(shù)。
- 微服務(wù)只是業(yè)務(wù)邏輯的代碼,不會(huì)和HTML,CSS 或其他界面組件混合。
- 微服務(wù)能夠即時(shí)被要求擴(kuò)展。
- 微服務(wù)能部署中低端配置的服務(wù)器上。
- 易于和第三方集成。
- 每個(gè)微服務(wù)都有自己的存儲(chǔ)能力,可以有自己的數(shù)據(jù)庫(kù)。也可以有統(tǒng)一數(shù)據(jù)庫(kù)。
缺點(diǎn)
- 微服務(wù)架構(gòu)可能帶來過多的操作。
- 需要DevOps技巧 (http://en.wikipedia.org/wiki/DevOps).
- 可能雙倍的努力。
- 分布式系統(tǒng)可能復(fù)雜難以管理。
- 因?yàn)榉植疾渴鸶檰栴}難。
- 當(dāng)服務(wù)數(shù)量增加,管理復(fù)雜性增加。
SOA(面向服務(wù)的架構(gòu))
SOA是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))通過這些服務(wù)之間定義良好的接口和契約聯(lián)系起來。面向服務(wù)架構(gòu),它可以根據(jù)需求通過網(wǎng)絡(luò)對(duì)松散耦合的粗粒度應(yīng)用組件進(jìn)行分布式部署、組合和使用。
?
soa基本架構(gòu)圖
1.注冊(cè)中心: 保存服務(wù)提供方暴露的服務(wù)信息,常見的注冊(cè)中心有zookeeper eureka 也可用redis 默認(rèn)eureka
2.服務(wù)提供方:提供服務(wù)者
3.服務(wù)消費(fèi)方:當(dāng)需要調(diào)用遠(yuǎn)程服務(wù)接口時(shí),必須在注冊(cè)中心發(fā)現(xiàn)服務(wù)找到服務(wù)提供者,從而進(jìn)行遠(yuǎn)程方法調(diào)
dubbo實(shí)現(xiàn)微服務(wù)
Dubbo是阿里開源的一個(gè)SOA服務(wù)治理解決方案,文檔豐富,在國(guó)內(nèi)的使用度非常高。 dubbo
-
調(diào)用中間層變成了可選組件,消費(fèi)者可以直接訪問服務(wù)提供者。
-
服務(wù)信息被集中到Registry中,形成了服務(wù)治理的中心組件。
-
通過Monitor監(jiān)控系統(tǒng),可以直觀地展示服務(wù)調(diào)用的統(tǒng)計(jì)信息。
-
Consumer可以進(jìn)行負(fù)載均衡、服務(wù)降級(jí)的選擇。
但是對(duì)于微服務(wù)架構(gòu)而言,Dubbo也并不是十全十美的:
-
Registry嚴(yán)重依賴第三方組件(zookeeper或者redis),當(dāng)這些組件出現(xiàn)問題時(shí),服務(wù)調(diào)用很快就會(huì)中斷。
-
DUBBO只支持RPC調(diào)用。使得服務(wù)提供方與調(diào)用方在代碼上產(chǎn)生了強(qiáng)依賴,服務(wù)提供者需要不斷將包含公共代碼的jar包打包出來供消費(fèi)者使用。一旦打包出現(xiàn)問題,就會(huì)導(dǎo)致服務(wù)調(diào)用出錯(cuò)。
-
最為重要的是,DUBBO現(xiàn)在已經(jīng)停止維護(hù)了,對(duì)于技術(shù)發(fā)展的新需求,需要由開發(fā)者自行拓展升級(jí)。這對(duì)于很多想要采用微服務(wù)架構(gòu)的中小軟件組織,顯然是不太合適的。
新選擇SpringCloud
與dubbo對(duì)比,spring cloud是借助以下組件來實(shí)現(xiàn)的:
上圖來自于SpringCloud中文文檔?包括了spring cloud現(xiàn)在有的所有組件,以及每個(gè)組件的作用。
后續(xù)會(huì)講解常用組件(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智能路由,微代理,控制總線)在這里先不做解釋。
SpringCloud與Dubbo對(duì)比
| 微服務(wù)需要的功能 | Dubbo | SpringCloud |
| 服務(wù)注冊(cè)與發(fā)現(xiàn) | Zookeeper | Eureka |
| 服務(wù)調(diào)用方式 | RPC | Restful API |
| 服務(wù)路由和過濾 | 有 | Zuul |
| 負(fù)載均衡 | 有 | Ribbon |
| 斷路器 | 有 | Hystrix |
| 分布式配置 | 無 | Spring Cloud Config |
| 分布式消息 | 無 | Spring Cloud Bus |
| 集群選主 | 無 | Spring Cloud Cluster |
| 批量任務(wù) | 無 | Spring Cloud Task |
| 服務(wù)跟蹤 | 無 | Sleuth&Zipkin |
| ...... | ...... | ...... |
文檔對(duì)比
Dubbo的?文檔?可以說在國(guó)內(nèi)開源框架中算是一流的,非常全,并且講解的也非常深入,由于版本已經(jīng)穩(wěn)定不再更新,所以也不太會(huì)出現(xiàn)不一致的情況,另外提供了中文與英文兩種版本,對(duì)于國(guó)內(nèi)開發(fā)者來說,閱讀起來更加容易上手,這也是dubbo在國(guó)內(nèi)更火一些的原因吧。 Spring Cloud由于整合了大量組件,文檔在體量上自然要比dubbo多很多,文檔內(nèi)容上還算簡(jiǎn)潔清楚,但是更多的是偏向整合,更深入的使用方法還是需要查看其整合組件的詳細(xì)文檔。另外由于Spring Cloud基于Spring Boot,很多例子相較于傳統(tǒng)Spring應(yīng)用要簡(jiǎn)單很多(因?yàn)樽詣?dòng)化配置,很多內(nèi)容都成了約定的默認(rèn)配置),這對(duì)于剛接觸的開發(fā)者可能會(huì)有些不適應(yīng),比較建議了解和學(xué)習(xí)Spring Boot之后再使用Spring Cloud,不然可能會(huì)出現(xiàn)很多一知半解的情況。 雖然Spring Cloud的文檔量大,但是如果使用Dubbo去整合其他第三方組件,實(shí)際也是要去閱讀大量第三方組件文檔的,所以在文檔量上,我覺得區(qū)別不大。對(duì)于文檔質(zhì)量,由于Spring Cloud的迭代很快,難免會(huì)出現(xiàn)不一致的情況,所以在質(zhì)量上我認(rèn)為Dubbo更好一些。而對(duì)于文檔語(yǔ)言上,Dubbo自然對(duì)國(guó)內(nèi)開發(fā)團(tuán)隊(duì)來說更有優(yōu)勢(shì)。 關(guān)注博主 后續(xù)繼續(xù)帶來Spring Cloud的系列文章,也歡迎各位朋友一起交流,共同進(jìn)步。轉(zhuǎn)載于:https://www.cnblogs.com/yanfeiLiu/p/9461859.html
總結(jié)
以上是生活随笔為你收集整理的SpringCloud学习--微服务架构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dojo省份地市级联之地市封装类(二)
- 下一篇: Spring Boot之自定义属性