首頁(yè)技術(shù)文章正文

微服務(wù)架構(gòu)解決方案介紹[java培訓(xùn)]

更新時(shí)間:2020-03-19 來(lái)源:傳智播客 瀏覽量:

1、微服務(wù)架構(gòu)

目前微服務(wù)是非?;鸬募軜?gòu)或者說(shuō)概念,也是在構(gòu)建大型互聯(lián)網(wǎng)項(xiàng)目時(shí)采用的架構(gòu)方式。

1.1 單體架構(gòu)

在軟件設(shè)計(jì)中,經(jīng)常提及和使用經(jīng)典的3層模型,即表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層。

·表示層:用于直接和用戶交互,也稱為交互層,通常是網(wǎng)頁(yè)、UI 等。

·業(yè)務(wù)邏輯層:即業(yè)務(wù)邏輯處理層,例如用戶輸入的信息要經(jīng)過(guò)業(yè)務(wù)邏輯層的處理后,才能展現(xiàn)給用戶。

·數(shù)據(jù)訪問(wèn)層:用于操作數(shù)據(jù)庫(kù),用戶在表示層會(huì)產(chǎn)生大量的數(shù)據(jù),通過(guò)數(shù)據(jù)訪問(wèn)層對(duì)數(shù)據(jù)庫(kù)進(jìn)行讀寫操作。

雖然在軟件設(shè)計(jì)中劃分了經(jīng)典的3層模型,但是對(duì)業(yè)務(wù)場(chǎng)景沒(méi)有劃分。一個(gè)典型的單體應(yīng)用就是將所有的業(yè)務(wù)場(chǎng)景的表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層放在一個(gè)工程中,最終經(jīng)過(guò)編譯、打包,部署在一臺(tái)服務(wù)器上。

單體架構(gòu)圖如下所示:

Spring-Cloud微服務(wù)01

1.1.1 單體架構(gòu)的優(yōu)點(diǎn)

·部署簡(jiǎn)單由于是完整的結(jié)構(gòu)體,可以直接部署在一個(gè)服務(wù)器上即可。

·技術(shù)單一 項(xiàng)目不需要復(fù)雜的技術(shù)棧,往往一套熟悉的技術(shù)棧就可以完成開發(fā)。

·用人成本低 單個(gè)程序員可以完成業(yè)務(wù)接口到數(shù)據(jù)庫(kù)的整個(gè)流程。

1.1.2 單體架構(gòu)的缺點(diǎn)

·系統(tǒng)啟動(dòng)慢 , 一個(gè)進(jìn)程包含了所有的業(yè)務(wù)邏輯,涉及到的啟動(dòng)模塊過(guò)多,導(dǎo)致系統(tǒng)的啟動(dòng)、重啟時(shí)間周期過(guò)長(zhǎng)

·系統(tǒng)錯(cuò)誤隔離性差、可用性差,任何一個(gè)模塊的錯(cuò)誤均可能造成整個(gè)系統(tǒng)的宕機(jī)

·可伸縮性差;系統(tǒng)的擴(kuò)容只能只對(duì)這個(gè)應(yīng)用進(jìn)行擴(kuò)容,不能做到對(duì)某個(gè)功能點(diǎn)進(jìn)行擴(kuò)容

·線上問(wèn)題修復(fù)周期長(zhǎng);任何一個(gè)線上問(wèn)題修復(fù)需要對(duì)整個(gè)應(yīng)用系統(tǒng)進(jìn)行全面升級(jí)

1.2 微服務(wù)架構(gòu)

就目前來(lái)看微服務(wù)并沒(méi)有一個(gè) 嚴(yán)格 的定義 每一個(gè)人對(duì) 微服務(wù) 的理解都是不一樣的 . Martin Fowler在它的博客中是這樣表述微服務(wù)的

Spring-Cloud微服務(wù)02

博客地址 : https://martinfowler.com/articles/microservices.html

微服務(wù)架構(gòu)風(fēng)格是一種將一個(gè)單一應(yīng)用程序開發(fā)為一組小型服務(wù)的方法每一個(gè)服務(wù)運(yùn)行在自己的進(jìn)程中服務(wù)間通信采用的輕量級(jí)通信機(jī)制通(常用HTTP 資源 API ). 這些服務(wù)圍繞業(yè)務(wù)能力構(gòu)建并且可通過(guò)全自動(dòng)部署機(jī)制獨(dú)立部署這些服務(wù)公用一個(gè)最小型的集中式的管理服務(wù)可用不同的語(yǔ)言開發(fā),使用不同的數(shù)據(jù)存儲(chǔ)技術(shù)。

微服務(wù)架構(gòu)架構(gòu)如如下圖所示下圖所示:

Spring-Cloud微服務(wù)03


1.2.1 微服務(wù)微服務(wù)的的優(yōu)點(diǎn)優(yōu)點(diǎn)

·易于開發(fā)和維護(hù):一個(gè)微服務(wù)只會(huì)關(guān)注一個(gè)特定的業(yè)務(wù)功能,所以它業(yè)務(wù)清晰、代碼量少。開發(fā)和維護(hù)單個(gè)微服務(wù)相當(dāng)簡(jiǎn)單。而整個(gè)應(yīng)用是若干個(gè)微服務(wù)構(gòu)建而成的,所以整個(gè)應(yīng)用也被維持在一個(gè)可控狀態(tài)。

·單個(gè)微服務(wù)啟動(dòng)較快 單個(gè)微服務(wù)代碼量較少,所以啟動(dòng)會(huì)比較快。

·局部修改容易部署:?jiǎn)蝹€(gè)應(yīng)用只要有修改,就得重新部署整個(gè)應(yīng)用,微服務(wù)解決了這樣的問(wèn)題。一般來(lái)說(shuō),對(duì)某個(gè)微服務(wù)進(jìn)行修改,只需要重新部署這個(gè)服務(wù)即可。

·技術(shù)棧不受限:在微服務(wù)架構(gòu)中,可以結(jié)合項(xiàng)目業(yè)務(wù)及團(tuán)隊(duì)的特點(diǎn),合理選擇技術(shù)棧。例如某些服務(wù)可以使用關(guān)系型數(shù)據(jù)庫(kù)Mysql有些服務(wù)。可以使用非關(guān)系型數(shù)據(jù)庫(kù)如redis;甚至可根據(jù)需求,部分微服務(wù)使用Java開發(fā),部分微服務(wù)使用Node.js開發(fā)。

·按需收縮可根據(jù)需求,實(shí)現(xiàn)細(xì)粒度的擴(kuò)展。例如,系統(tǒng)中的某個(gè)微服務(wù)遇到了瓶頸,可以結(jié)合這個(gè)微服務(wù)的業(yè)務(wù)特點(diǎn),增加內(nèi)存、升級(jí)CPU或者增加節(jié)點(diǎn)。


1.2.2 微服務(wù)的缺點(diǎn)

·運(yùn)維要求較高: 更多的服務(wù)意味著更多的運(yùn)維投入。在單體架構(gòu)中,只需要保證一個(gè)應(yīng)用的正常運(yùn)行。而在微服務(wù)中,需要保證幾十甚至幾百個(gè)服務(wù)正常運(yùn)行與協(xié)作,這給運(yùn)維帶來(lái)了很大的挑戰(zhàn)。

·分布式固有的復(fù)雜性:使用微服務(wù)構(gòu)建的是分布式 系統(tǒng)。對(duì)于一個(gè)分布式系統(tǒng),系統(tǒng)容錯(cuò)、網(wǎng)絡(luò)延遲等都會(huì)帶來(lái)巨大的挑戰(zhàn)。

·接口調(diào)整成本高:微服務(wù)之間通過(guò)接口進(jìn)行通信。如果修改某一個(gè)微服務(wù) API ,可能所有使用該接口的微服務(wù)都需要調(diào)整。


2、Spring Cloud 簡(jiǎn)介


2.1 簡(jiǎn)介

Spring Cloud項(xiàng)目的官方網(wǎng)址: https://projects.spring.io/spring-cloud/

Spring-Cloud微服務(wù)04

Spring Cloud并不是一個(gè)項(xiàng)目而是一組項(xiàng)目的集合在Spring Cloud中包含了很多的子項(xiàng)目每一個(gè)子項(xiàng)目都是一種微服務(wù)開發(fā)過(guò)程中遇到的問(wèn)題的一種解決方案它利用Spring Boot的開發(fā)便利性巧妙地簡(jiǎn)化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā),如服務(wù)發(fā)現(xiàn)注冊(cè)、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用Spring Boot的開發(fā)風(fēng)格做到一鍵啟動(dòng)和部署。Spring Cloud并沒(méi)有重復(fù)制造輪子,它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來(lái),通過(guò)Spring Boot風(fēng)格進(jìn)行再封裝屏蔽掉了復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者留出了一套簡(jiǎn)單易懂、易部署和易維護(hù)的分布式系統(tǒng)開發(fā)工具包。


2.2 子項(xiàng)目介紹

Spring-Cloud微服務(wù)05


2.3 Spring Cloud的版本介紹

當(dāng)我們通過(guò)搜索引擎查找一些Spring Cloud 的文章或者示例的時(shí)候往往可以在依賴中看到很多不同版本的名字 , 比如 : Angel.SR6, Brixton.SR5等。 那么,為什么 Spring Cloud 沒(méi)有像其他的 Spring 的項(xiàng)目使用類似1.x.x 版本命名規(guī)則呢?

由于Spring Cloud不像Spring社區(qū)其他項(xiàng)目那樣相對(duì)獨(dú)立,它是擁有諸多子項(xiàng)目的大型綜合項(xiàng)目??梢哉f(shuō)是對(duì)微服務(wù)架構(gòu)解決方案的綜合套件的組合,起包含的各個(gè)子項(xiàng)目也都是進(jìn)行獨(dú)立的更新和迭代,各自都維護(hù)自己的發(fā)布版本號(hào)。因此,每一個(gè)Spring Cloud的版本都會(huì)包含多個(gè)不同版本的子項(xiàng)目,為了管理每一個(gè)版本的子項(xiàng)目清單避免Spring Cloud的版本號(hào)與其子項(xiàng)目的版本號(hào)相混淆,沒(méi)有采用版本號(hào)的方式,而是通過(guò)命名的方式。

我們也可以在spring的官網(wǎng)上查看到對(duì)應(yīng)的最新穩(wěn)定版本信息 : https://projects.spring.io/spring-cloud/

Spring-Cloud微服務(wù)06

并且也可以看到最新Edgware.SR4穩(wěn)定版對(duì)應(yīng)的子項(xiàng)目的各個(gè)版本號(hào)。

Spring-Cloud微服務(wù)07

關(guān)于Spring Cloud的歷史版本信息我們可以在github上查看到 : https://github.com/spring-cloud/spring-cloud/release/releases

Spring-Cloud微服務(wù)08

我們本次講解的是最新的穩(wěn)定版本Edgware.SR4 ,是基于Spring Boot 1.5.14.RELEASE版本實(shí)現(xiàn)的。


3、Spring Boot 實(shí)現(xiàn)微服務(wù)

在正式學(xué)習(xí)Spring Cloud 之前我們先使用Spring Boot實(shí)現(xiàn)一個(gè)微服務(wù)。

業(yè)務(wù)非常簡(jiǎn)單:

1、商品微服務(wù):通過(guò)商品id 查詢商品的服務(wù);

2、訂單微服務(wù):通過(guò)訂單id 查詢訂單數(shù)據(jù),同時(shí)需要調(diào)用商品微服務(wù)查詢出訂單詳情數(shù)據(jù)對(duì)應(yīng)的商品數(shù)據(jù)。

Spring-Cloud微服務(wù)09

說(shuō)明:
1、對(duì)于商品微服務(wù)而言,商品微服務(wù)是服務(wù)的提供者,訂單微服務(wù)是服務(wù)的消費(fèi)者
2、對(duì)于訂單微服務(wù)而言,訂單微服務(wù)是服務(wù)的提供者,人是服務(wù)的消費(fèi)者。


3.1 實(shí)現(xiàn)商品微服務(wù)


3.1.1 pom .xml文件的配置

Spring-Cloud微服務(wù)10


3.1.2 創(chuàng)建實(shí)體Item

Spring-Cloud微服務(wù)11


3.1.3 編寫ItemService

Spring-Cloud微服務(wù)11.1


3.1.4 編寫ItemController

Spring-Cloud微服務(wù)11.2


3.1.5 程序入口

Spring-Cloud微服務(wù)11.3


3.1.6 創(chuàng)建配置文件

在src/main/resources目錄下創(chuàng)建一個(gè)application.properties配置文件在該文件中可以配置如下內(nèi)容

server.port=8081

指定服務(wù)啟動(dòng)占用的端口

3.1.7 啟動(dòng)項(xiàng)目進(jìn)行訪問(wèn)

Spring-Cloud微服務(wù)12


3.2 實(shí)現(xiàn)訂單微服務(wù)


3.2.1 pom.xml文件的配置

Spring-Cloud微服務(wù)13


3.2.2 創(chuàng)建實(shí)體Order

Spring-Cloud微服務(wù)11


3.2.3 創(chuàng)建實(shí)體OrderDetail

Spring-Cloud微服務(wù)12.1


3.2.4 復(fù)制Item實(shí)體

Spring-Cloud微服務(wù)14


3.2.5 編寫OrderService
該Service實(shí)現(xiàn)的根據(jù)訂單Id查詢訂單的服務(wù),為了方便測(cè)試,我們將構(gòu)造數(shù)據(jù)實(shí)現(xiàn),不采用查詢數(shù)據(jù)庫(kù)的方式。
Spring-Cloud微服務(wù)13.1


3.2.6 實(shí)現(xiàn)ItemService

Spring-Cloud微服務(wù)13.2


3.2.7 完善OrderService
Spring-Cloud微服務(wù)13.3


3.2.8 編寫OrderController

Spring-Cloud微服務(wù)13.4


3.2.9 編寫啟動(dòng)類

Spring-Cloud微服務(wù)13.5


3.2.10 創(chuàng)建配置文件

在src/main/resources 目錄下創(chuàng)建一個(gè)application.properties 配置文件在該文件中可以配置如下內(nèi)容

server.port=8082


3.2.11 啟動(dòng)測(cè)試

Spring-Cloud微服務(wù)15


3.3 發(fā)現(xiàn)問(wèn)題與解決問(wèn)題


3.3.1 問(wèn)題描述

·在剛才的服務(wù)調(diào)用過(guò)程中我們的商品服務(wù)地址是直接寫死在程序中存在硬編碼問(wèn)題

·如果商品微服務(wù)部署了多個(gè),那么我們訂單微服務(wù)如何去調(diào)用呢?


3.3.2 問(wèn)題處理

關(guān)于硬編碼的問(wèn)題我們可以使用配置文件處理,我們可以將地址信息編寫到配置文件中然后讀取配置文件獲取請(qǐng)求地址信息。

在配置文件中加入如下配置:

itcast.item.url=http://127.0.0.1:8081/item/

修改ItemService的實(shí)現(xiàn)通過(guò)@Value 注解獲取該值

Spring-Cloud微服務(wù)13.6

2. 如果商品微服務(wù)部署了多個(gè)那么我們訂單微服務(wù)如何去調(diào)用呢?

關(guān)于這個(gè)問(wèn)題有的開發(fā)人員可能會(huì)想 . 我們可以將多個(gè)商品微服務(wù)的地址配置到配置文件中,然后在進(jìn)行讀取配置文件的地址進(jìn)行調(diào)用聽起來(lái)好像可以,但是我們需要考慮以后問(wèn)題就是后期維護(hù)的問(wèn)題。

·如果商品微服務(wù)的我們又添加或者減少了一個(gè)部署,相應(yīng)的我們需要去更改配置文件的內(nèi)容;

·如果商品微服務(wù)的ip地址發(fā)送了改變,那么我們也需要相應(yīng)的修改配置文件的地址。

所以我們自己這樣實(shí)現(xiàn)比較麻煩。

我們可以使用服務(wù)注冊(cè)于發(fā)現(xiàn)機(jī)制來(lái)完成。


4 Spring Cloud快速入門

服務(wù)注冊(cè)于發(fā)現(xiàn)機(jī)制架構(gòu)圖如下:

Spring-Cloud微服務(wù)16

由上圖可以看出:

1、服務(wù)提供者將服務(wù)注冊(cè)到注冊(cè)中心

2、服務(wù)消費(fèi)者通過(guò)注冊(cè)中心查找服務(wù)

3、查找到服務(wù)后進(jìn)行調(diào)用(這里就是無(wú)需硬編碼 url 的解決方案)


4.1 注冊(cè)中心 Eureka

Spring Cloud提供了多種注冊(cè)中心的支持,如: Eureka 、 ZooKeeper 等。推薦使用Eureka 。

Spring Cloud Eureka是Spring Cloud Netflix 微服務(wù)套件中的一部分,它基于Netflix Eureka做了二次封裝。主要負(fù)責(zé)完成微服務(wù)架構(gòu)中的服務(wù)治理功能。

原理如下圖所示

Spring-Cloud微服務(wù)17

Eureka包含兩個(gè)組件: Eureka Server 和 Eureka Client 。

Eureka Server 提供服務(wù)注冊(cè)服務(wù),各個(gè)節(jié)點(diǎn)啟動(dòng)后,會(huì)在 Eureka Server中進(jìn)行注冊(cè),這樣 EurekaServer中的服務(wù)注冊(cè)表中將會(huì)存儲(chǔ)所有可用服務(wù)節(jié)點(diǎn)的信息,服務(wù)節(jié)點(diǎn)的信息可以在界面中直觀的看到。

Eureka Client是一個(gè)java 客戶端,用于簡(jiǎn)化與 Eureka Server的交互在應(yīng)用啟動(dòng)后,將會(huì)向Eureka Server發(fā)送心跳默認(rèn)周期為 30 秒,如果 Eureka Server在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè)節(jié)點(diǎn)的心跳,Eureka Server將會(huì)從服務(wù)注冊(cè)表中把這個(gè)服務(wù)節(jié)點(diǎn)移除默認(rèn) 90 秒 。

Eureka Server之間通過(guò)復(fù)制的方式完成數(shù)據(jù)的同步,Eureka還提供了客戶端緩存機(jī)制,即使所有的Eureka Server都掛掉,客戶端依然可以利用緩存中的信息消費(fèi)其他服務(wù)的 API 。綜上,Eureka通過(guò)心跳檢查、客戶端緩存等機(jī)制,確保了系統(tǒng)的高可用性、靈活性和可伸縮性。


4.2 編寫Eureka Server

4.2.1 pom.xml

Spring-Cloud微服務(wù)13.7


啟動(dòng)類

Spring-Cloud微服務(wù)14


4.2.3 配置文件

Spring-Cloud微服務(wù)15


4.2.4 啟動(dòng)程序訪問(wèn)服務(wù)端

訪問(wèn)地址 : http://localhost:6868/

Spring-Cloud微服務(wù)18


4.3 商品微服務(wù)注冊(cè)到注冊(cè)中心

接下來(lái),我們需要將商品的微服務(wù)注冊(cè)到Eureka服務(wù)中。


4.3.1 修改pom文件

引入Spring Cloud的管理依賴以及Eureka服務(wù)依賴。

Spring-Cloud微服務(wù)16


4.3.2 修改配置文件

Spring-Cloud微服務(wù)18.1


4.3.3 修改啟動(dòng)類

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@EnableDiscoveryClient     // 聲明這是 Eureka 的客戶端

@SpringBootApplication     // 聲明這是一個(gè) Spring Boot 項(xiàng)目

public class ItemApplication {

    public static void main(String[] args) {

        SpringApplication.run(ItemApplication.class, args);

    }

}


4.3.4 啟動(dòng)商品微服務(wù)
Spring-Cloud微服務(wù)4.3.4
至此我們就已經(jīng)將商品微服務(wù)注冊(cè)到Eureka注冊(cè)中心了

4.4 訂單系統(tǒng)從Eureka中發(fā)現(xiàn)服務(wù)

4.4.1 修改pom.xml
Spring-Cloud微服務(wù)4.4.1
之前我們?cè)谟唵蜗到y(tǒng)中是將商品微服務(wù)的地址進(jìn)行了硬編碼,現(xiàn)在,由于已經(jīng)將商品服務(wù)注冊(cè)到Eureka中,所以,只需要從Eureka中發(fā)現(xiàn)服務(wù)即可。引入Spring Cloud 的管理依賴以及Eureka服務(wù)依賴。

4.4.2 修改配置文件
Spring-Cloud微服務(wù)4.4.2


4.4.3 修改ItemService
Spring-Cloud微服務(wù)4.4.3


4.4.4 修改啟動(dòng)
Spring-Cloud微服務(wù)4.4.4

4.4.5 啟動(dòng)測(cè)試
Spring-Cloud微服務(wù)4.4.5.1
響應(yīng)的數(shù)據(jù)如下:
Spring-Cloud微服務(wù)4.4.5.2

可以看到以及獲取到數(shù)據(jù),但是,我們發(fā)現(xiàn)響應(yīng)的數(shù)據(jù)變成了xml結(jié)構(gòu)。


4.4.6 解決響應(yīng)變成xml的問(wèn)題
由于我們引入了eureka server的依賴,導(dǎo)致破壞了之前SpringMVC默認(rèn)的配置,從而導(dǎo)致了響應(yīng)成了xml 。
解決方法:排除eureka server中的xml依賴,如下:
Spring-Cloud微服務(wù)4.4.6.1
測(cè)試
Spring-Cloud微服務(wù)4.4.6.2

4.5     Eureka詳解
4.5.1    為Eureka添加用戶認(rèn)證
在前面的示例中,我們可以看到我們需要登錄即可訪問(wèn)到Eureka服務(wù),這樣其實(shí)是不安全的。
接下來(lái),我們?yōu)镋ureka添加用戶認(rèn)證。

為itcast microservice eureka添加安全認(rèn)證依賴
Spring-Cloud微服務(wù)4.5.1

在application.properties配置文件中添加如下內(nèi)容

開啟http basic的登錄方式
# security.basic.enable= true
# 配置用戶賬號(hào)信息
security.user.name= itcast
security.user.password= itcast123
重啟 Eureka服務(wù)端測(cè)試

Spring-Cloud微服務(wù)4.5.2
4.5.2 服務(wù)注冊(cè)和發(fā)現(xiàn)設(shè)置賬號(hào)

http://USER:PASSWORD@127.0.0.1:6868/eureka/

配置如下:
eureka.client.serviceUrl.defaultZone=http://itcast:itcast123 @127.0.0.1:6868/

4.5.3 Eureka的自我保護(hù)模式
Spring-Cloud微服務(wù)4.5.3.1

大家有的時(shí)候在訪問(wèn)Eureka服務(wù)端的時(shí)候會(huì)出現(xiàn)紅色的提示信息這個(gè)就是Eureka的自我保護(hù)模式。
默認(rèn)情況下,如何Eureka Server在一定時(shí)間內(nèi)沒(méi)有接收到某一個(gè)微服務(wù)實(shí)例的心跳,Eureka Server將會(huì)注銷該實(shí)例(默認(rèn)是90秒). 但是這種行為是不安全的, 因?yàn)橛械臅r(shí)候監(jiān)聽不到客戶端的心跳,有可能是因?yàn)榫W(wǎng)絡(luò)故障導(dǎo)致的,而并非是服務(wù)本身出現(xiàn)了問(wèn)題,服務(wù)本身是健康的.這么草率的將服務(wù)注銷是不安全的。
Eureka通過(guò)“自我保護(hù)模式”來(lái)解決個(gè)問(wèn)題當(dāng)Eureka Server節(jié)點(diǎn)在短時(shí)間內(nèi)丟失過(guò)多的客戶端時(shí)可能發(fā)生了網(wǎng)絡(luò)分區(qū)故障),那么,這個(gè)節(jié)點(diǎn)就會(huì)進(jìn)入自我保護(hù)模式 一旦進(jìn)入該模式,Eureka Server就會(huì)保護(hù)服務(wù)注冊(cè)表紅的信息不在刪除服務(wù)注冊(cè)表中的數(shù)據(jù),也就,不會(huì)注銷任何的微服務(wù)。當(dāng)網(wǎng)絡(luò)故障恢復(fù)后該Eureka Server節(jié)點(diǎn)會(huì)自動(dòng)退出自我保護(hù)模式。
綜上自我保護(hù)模式是一種應(yīng)對(duì)網(wǎng)絡(luò)異常的安全保護(hù)措施。它的架構(gòu)哲學(xué)是寧可同時(shí)保留所有的微服務(wù)(健康的微服務(wù)和不健康的微服務(wù)),也不盲目注銷任何健康的微服務(wù),使用自我保護(hù)模式,可以讓Eureka集群更加的健壯穩(wěn)定,默認(rèn)。
Eureka自我保護(hù)模式是開啟的,無(wú)需處理。如果,需要禁用自我保護(hù)模式,只需要在配置文件中添加配置即可:

# 禁用eureka的自我保護(hù)模式
eureka.server.enable self preservation=false

但是當(dāng)我們禁用了自我保護(hù)模式以后,在此訪問(wèn)Eureka Server的時(shí)候又出現(xiàn)了一個(gè)新的錯(cuò)誤。
Spring-Cloud微服務(wù)4.5.4.3

意思是:現(xiàn)在我們禁用了自我保護(hù)模式會(huì)帶來(lái)一些不安全的問(wèn)題。
因此一般情況下我們都是開啟自我保護(hù)模式的。

4.5.4 Eureka的高可用

前面的測(cè)試,我們會(huì)發(fā)現(xiàn),Eureka服務(wù)是一個(gè)單點(diǎn)服務(wù),在生產(chǎn)環(huán)境就會(huì)出現(xiàn)單點(diǎn)故障,為了確保Eureka服務(wù)的高可用,我需要搭建Eureka服務(wù)的集群。

搭建Eureka集群非常簡(jiǎn)單,只要啟動(dòng)多個(gè)Eureka服務(wù)并且讓這些服務(wù)之間彼此進(jìn)行注冊(cè)即可實(shí)現(xiàn)。

修改itcast microservice eureka的application.properties配置文件

Spring-Cloud微服務(wù)4.5.4.1

修改配置文件的內(nèi)容 再啟動(dòng)一個(gè)Eureka Server
Spring-Cloud微服務(wù)4.5.4.2

啟動(dòng)兩個(gè)Eureka Server 看結(jié)果
Spring-Cloud微服務(wù)4.5.4.3

可以看到,2個(gè)Eureka服務(wù)進(jìn)行了彼此注冊(cè)

4.5.5 將服務(wù)注冊(cè)到 Eureka集群中

修改配置文件

eureka.client.serviceUrl.defaultZone= http://itcast:itcast123@127.0.0.1:6868/eureka/,http://itcast:itcast123@127.0.0.1:6869/eureka/

訪問(wèn)Eureka Server的6868服務(wù)顯示結(jié)果如下
Spring-Cloud微服務(wù)4.5.5.1

訪問(wèn)Eureka Server的6869 服務(wù)顯示結(jié)果如下

Spring-Cloud微服務(wù)4.5.5.2

發(fā)現(xiàn)在Eureka的兩個(gè)Server中都注冊(cè)對(duì)應(yīng)的商品服務(wù)
注:我們可以嘗試關(guān)閉一個(gè)Eureka Server進(jìn)行測(cè)試看看我們的訂單服務(wù)是否可以調(diào)用商品服務(wù)

猜你喜歡

Spring Cloud Alibaba技術(shù)棧超全面視頻教程
分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!