詳解Java 微服務(wù)架構(gòu)
一、傳統(tǒng)的整體式架構(gòu)
傳統(tǒng)的整體式架構(gòu)都是模塊化的設(shè)計(jì)邏輯,如展示(Views)、應(yīng)用程序邏輯(Controller)、業(yè)務(wù)邏輯(Service)和數(shù)據(jù)訪問(wèn)對(duì)象(Dao),程序在編寫(xiě)完成后被打包部署為一個(gè)具體的應(yīng)用。如圖所示:
系統(tǒng)的水平擴(kuò)展
如果要對(duì)系統(tǒng)進(jìn)行水平擴(kuò)展,通常情況下,只需要增加服務(wù)器的數(shù)量,并將打包好的應(yīng)用拷貝到不同的服務(wù)器,然后通過(guò)負(fù)載均衡器(Nginx)就可以輕松實(shí)現(xiàn)應(yīng)用的水平擴(kuò)展。
整體式架構(gòu)的缺點(diǎn)
- 應(yīng)用復(fù)雜度增加,更新、維護(hù)困難。
- 易造成系統(tǒng)資源浪費(fèi)。
- 影響開(kāi)發(fā)效率。
- 應(yīng)用可靠性低。
- 不利于技術(shù)更新。
二、面向服務(wù)的架構(gòu)SOA(Service-Oriented Architecture)
SOA的思路是把應(yīng)用中相近的功能聚合在一起,以服務(wù)的形式提供出去。如圖所示:
缺點(diǎn)
雖然SOA解決了整體式架構(gòu)中的問(wèn)題,但多數(shù)情況下,SOA中相互獨(dú)立的服務(wù)仍然會(huì)部署在同一個(gè)運(yùn)行環(huán)境中。和整體式架構(gòu)類(lèi)似,隨著業(yè)務(wù)功能的增多,SOA的服務(wù)會(huì)變得越來(lái)越復(fù)雜。本質(zhì)上看,整體式架構(gòu)的問(wèn)題并沒(méi)有因?yàn)槭褂肧OA而變得更好。
三、微服務(wù)架構(gòu)
微服務(wù)架構(gòu)是一種架構(gòu)風(fēng)格和架構(gòu)思想,它倡導(dǎo)我們?cè)趥鹘y(tǒng)軟件應(yīng)用架構(gòu)的基礎(chǔ)上,將系統(tǒng)業(yè)務(wù)按照功能拆分為更加細(xì)粒度的服務(wù),所拆分的每一個(gè)服務(wù)都是一個(gè)獨(dú)立的應(yīng)用,這些應(yīng)用對(duì)外提供公共的API,可以獨(dú)立承擔(dān)對(duì)外服務(wù)的職責(zé),通過(guò)此種思想方式所開(kāi)發(fā)的軟件服務(wù)實(shí)體就是“微服務(wù)”,而圍繞著微服務(wù)思想構(gòu)建的一系列結(jié)構(gòu)(包括開(kāi)發(fā)、測(cè)試、部署等),我們可以將它稱(chēng)之為“微服務(wù)架構(gòu)”。如圖所示:
缺點(diǎn)
- 開(kāi)發(fā)人員必須處理創(chuàng)建分布式系統(tǒng)的復(fù)雜性。
- 部署的復(fù)雜性。
- 增加內(nèi)存消耗。
微服務(wù)架構(gòu)與SOA的區(qū)別
四、如何構(gòu)建微服務(wù)架構(gòu)
微服務(wù)架構(gòu)的組件
(1)服務(wù)注冊(cè)中心:注冊(cè)系統(tǒng)中所有服務(wù)的地方。
(2)服務(wù)注冊(cè):服務(wù)提供方將自己調(diào)用地址注冊(cè)到服務(wù)注冊(cè)中心,讓服務(wù)調(diào)用方能夠方便地找到自己。
(3)服務(wù)發(fā)現(xiàn):服務(wù)調(diào)用方從服務(wù)注冊(cè)中心找到自己需要調(diào)用服務(wù)的地址。
(4)負(fù)載均衡:服務(wù)提供方一般以多實(shí)例的形式提供服務(wù),使用負(fù)載均衡能夠讓服務(wù)調(diào)用方連接到合適的服務(wù)節(jié)點(diǎn)。
(5)服務(wù)容錯(cuò):通過(guò)斷路器(也稱(chēng)熔斷器)等一系列的服務(wù)保護(hù)機(jī)制,保證服務(wù)調(diào)用者在調(diào)用異常服務(wù)時(shí)能快速地返回結(jié)果,避免大量的同步等待。
(6)服務(wù)網(wǎng)關(guān):也稱(chēng)為API網(wǎng)關(guān),是服務(wù)調(diào)用的唯一入口,可以在這個(gè)組件中實(shí)現(xiàn)用戶鑒權(quán)、動(dòng)態(tài)路由、灰度發(fā)布、負(fù)載限流等功能。
(7)分布式配置中心:將本地化的配置信息(properties、yml、yaml等)注冊(cè)到配置中心,實(shí)現(xiàn)程序包在開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境的無(wú)差別性,方便程序包的遷移。
微服務(wù)架構(gòu)的技術(shù)選型
(1)微服務(wù)實(shí)例的開(kāi)發(fā):SpringBoot
(2)服務(wù)的注冊(cè)與發(fā)現(xiàn):Spring Cloud Eureka
(3)負(fù)載均衡:Spring Cloud Ribbon
(4)服務(wù)容錯(cuò):Spring Cloud Hystrix
(5)API網(wǎng)關(guān):Spring Cloud Zuul
(6)分布式配置中心:Spring Cloud Config
(7)調(diào)試:Swagger
(8)部署:Docker
(9)持續(xù)集成:Jenkins
以上就是詳解Java 微服務(wù)架構(gòu)的詳細(xì)內(nèi)容,更多關(guān)于Java 微服務(wù)架構(gòu)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java實(shí)現(xiàn)學(xué)生管理系統(tǒng)(控制臺(tái)版本)
這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)控制臺(tái)版本的學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06關(guān)于jpa中無(wú)法刪除onetomany中many問(wèn)題的解決
這篇文章主要介紹了關(guān)于jpa中無(wú)法刪除onetomany中many問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot封裝自己的Starter的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04利用SpringBoot解決多個(gè)定時(shí)任務(wù)阻塞的問(wèn)題
當(dāng)我們?cè)赟pring Boot應(yīng)用中使用多個(gè)定時(shí)任務(wù)時(shí),任務(wù)之間的阻塞可能是一個(gè)常見(jiàn)的問(wèn)題,這可能會(huì)因任務(wù)之間的依賴、執(zhí)行時(shí)間過(guò)長(zhǎng)或資源爭(zhēng)用等原因而發(fā)生,本文讓我們深入探討如何利用Spring Boot來(lái)解決多個(gè)定時(shí)任務(wù)阻塞的問(wèn)題,感興趣的小伙伴跟著小編一起來(lái)看看吧2024-01-01Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁(yè)面置換算法
本文主要介紹了Java實(shí)現(xiàn)FIFO、LRU、LFU、OPT頁(yè)面置換算法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Mybatis中強(qiáng)大的resultMap功能介紹
這篇文章主要給大家介紹了關(guān)于Mybatis中強(qiáng)大的resultMap功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06詳解Java程序并發(fā)的Wait-Notify機(jī)制
這篇文章主要介紹了詳解Java程序并發(fā)的Wait-Notify機(jī)制,多線程并發(fā)是Java編程中的重要部分,需要的朋友可以參考下2015-07-07