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