内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

springcloud——Eureka深入-創(chuàng)新互聯(lián)

服務(wù)治理機(jī)制

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),珙縣企業(yè)網(wǎng)站建設(shè),珙縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,珙縣網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,珙縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

    我們來進(jìn)一步了解一下Eureka 基礎(chǔ)架構(gòu)中各個元素的一些通信行為, 以此來理解基于Eureka 實現(xiàn)的服務(wù)治理體系是如何運作起來的。以下圖為例, 其中有這樣幾個重要元素:

springcloud——Eureka深入

? "服務(wù)注冊中心-1" 和“ 服務(wù)注冊中心-2", 它們互相注冊組成了高可用集群。

? "服務(wù)提供者” 啟動了兩個實例, 一個注冊到“ 服務(wù)注冊中心-1" 上, 另外一個注冊到“ 服務(wù)注冊中心-2" 上。

? 還有兩個“ 服務(wù)消費者“, 它們也都分別只指向了一個注冊中心。

一、服務(wù)提供者

1.服務(wù)注冊

    “服務(wù)提供者” 在啟動的時候會通過發(fā)送REST請求的方式將自己注冊到Eureka Server上, 同時帶上了自身服務(wù)的一些元數(shù)據(jù)信息。Eureka Server接收到這個REST請求之后,將元數(shù)據(jù)信息存儲在一個雙層結(jié)構(gòu)Map中, 其中第一層的key是服務(wù)名, 第二層的key是具體服務(wù)的實例名。(我們可以回想一下之前在實現(xiàn)Ribbon負(fù)載均衡的例子中, Eureka信息面板中一個服務(wù)有多個實例的清況, 這些內(nèi)容就是以這樣的雙層Map形式存儲的。)

    在服務(wù)注冊時, 需要確認(rèn)一下eureka.cli ent.register-with-eureka=true參數(shù)是否正確, 該值默認(rèn)為true。若設(shè)置為false將不會啟動注冊操作。

2.服務(wù)同步

    如架構(gòu)圖中所示, 這里的兩個服務(wù)提供者分別注冊到了兩個不同的服務(wù)注冊中心上,也就是說, 它們的信息分別被兩個服務(wù)注冊中心所維護(hù)。此時, 由于服務(wù)注冊中心之間因互相注冊為服務(wù), 當(dāng)服務(wù)提供者發(fā)送注冊請求到一個服務(wù)注冊中心時, 它會將該請求轉(zhuǎn)發(fā)給集群中相連的其他注冊中心, 從而實現(xiàn)注冊中心之間的服務(wù)同步。通過服務(wù)同步,兩個服務(wù)提供者的服務(wù)信息就可以通過這兩臺服務(wù)注冊中心中的任意一臺獲取到。

3.服務(wù)續(xù)約

    在注冊完服務(wù)之后,服務(wù)提供者會維護(hù)一個心跳用來持續(xù)告訴EurekaServer: "我還活著”, 以防止Eureka Server 的“ 剔除任務(wù)” 將該服務(wù)實例從服務(wù)列表中排除出去, 我們稱該操作為服務(wù)續(xù)約(Renew)。

    關(guān)于服務(wù)續(xù)約有兩個重要屬性,我們可以關(guān)注并根據(jù)需要來進(jìn)行調(diào)整:

    eureka.instance.lease-renewal-interval-in-seconds=30

    eureka.instance.lease-expiration-duration-in-seconds=90

    eureka.instance.lease-renewal-interval-in-seconds 參數(shù)用于定義服務(wù)續(xù)約任務(wù)的調(diào)用間隔時間,默認(rèn)為30秒。

    eureka.instance.lease-expiration-duration-in-seconds參數(shù)用于定義服務(wù)失效的時間,默認(rèn)為90秒。

二、服務(wù)消費者

1.獲取服務(wù)

    到這里, 在服務(wù)注冊中心已經(jīng)注冊了一個服務(wù), 并且該服務(wù)有兩個實例。當(dāng)我們啟動服務(wù)消費者的時候, 它會發(fā)送一個REST請求給服務(wù)注冊中心,來獲取上面注冊的服務(wù)清單。為了性能考慮, Eureka Server會維護(hù)一份只讀的服務(wù)清單來返回給客戶端,同時該緩存清單會每隔30秒更新一次。

    獲取服務(wù)是服務(wù)消費者的基礎(chǔ),所以必須確保eureka.client.fetch-registry=true參數(shù)沒有被修改成false, 該值默認(rèn)為true。若希望修改緩存清單的更新時間,可以通過eureka.client.registry-fetch-interval-seconds=30參數(shù)進(jìn)行修改,該參數(shù)默認(rèn)值為30, 單位為秒。

2.服務(wù)調(diào)用

    服務(wù)消費者在獲取服務(wù)清單后,通過服務(wù)名可以獲得具體提供服務(wù)的實例名和該實例的元數(shù)據(jù)信息。因為有這些服務(wù)實例的詳細(xì)信息, 所以客戶端可以根據(jù)自己的需要決定具體調(diào)用哪個實例,在ribbon中會默認(rèn)采用輪詢的方式進(jìn)行調(diào)用,從而實現(xiàn)客戶端的負(fù)載均衡。

    對于訪問實例的選擇,Eureka中有Region和Zone的概念, 一個Region中可以包含多個Zone, 每個服務(wù)客戶端需要被注冊到一個Zone中, 所以每個客戶端對應(yīng)一個Region和一個Zone。在進(jìn)行服務(wù)調(diào)用的時候, 優(yōu)先訪問同處一個Zone 中的服務(wù)提供方, 若訪問不到,就訪問其他的Zone。

3.服務(wù)下線

    在系統(tǒng)運行過程中必然會面臨關(guān)閉或重啟服務(wù)的某個實例的情況, 在服務(wù)關(guān)閉期間,我們自然不希望客戶端會繼續(xù)調(diào)用關(guān)閉了的實例。所以在客戶端程序中, 當(dāng)服務(wù)實例進(jìn)行正常的關(guān)閉操作時, 它會觸發(fā)一個服務(wù)下線的REST請求給Eureka Server, 告訴服務(wù)注冊中心:“我要下線了”。服務(wù)端在接收到請求之后, 將該服務(wù)狀態(tài)置為下線(DOWN), 并把該下線事件傳播出去。

三、服務(wù)注冊中心

1.失效剔除

    有些時候, 我們的服務(wù)實例并不一定會正常下線, 可能由于內(nèi)存溢出、網(wǎng)絡(luò)故障等原因使得服務(wù)不能正常工作, 而服務(wù)注冊中心并未收到“服務(wù)下線” 的請求。為了從服務(wù)列表中將這些無法提供服務(wù)的實例剔除, Eureka Server在啟動的時候會創(chuàng)建一個定時任務(wù),默認(rèn)每隔一段時間(默認(rèn)為60秒) 將當(dāng)前清單中超時(默認(rèn)為90秒)沒有續(xù)約的服務(wù)剔除出去。

2.自我保護(hù)

    當(dāng)我們在本地調(diào)試基于Eureka的程序時, 基本上都會碰到這樣一個問題, 在服務(wù)注冊中心的信息面板中出現(xiàn)類似下面的紅色警告信息:

EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.RENEWALS ARE LESSER TH邸THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPI邸D JUST TO BE SAFE.

    實際上, 該警告就是觸發(fā)了EurekaServer的自我保護(hù)機(jī)制。之前我們介紹過, 服務(wù)注冊到EurekaServer之后,會維護(hù)一個心跳連接,告訴EurekaServer自己還活著。EurekaServer在運行期間,會統(tǒng)計心跳失敗的比例在15分鐘之內(nèi)是否低于85%, 如果出現(xiàn)低于的情況(在單機(jī)調(diào)試的時候很容易滿足, 實際在生產(chǎn)環(huán)境上通常是由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致), Eureka Server會將當(dāng)前的實例注冊信息保護(hù)起來, 讓這些實例不會過期, 盡可能保護(hù)這些注冊信息。但是, 在這段保護(hù)期間內(nèi)實例若出現(xiàn)問題, 那么客戶端很容易拿到實際已經(jīng)不存在的服務(wù)實例, 會出現(xiàn)調(diào)用失敗的清況, 所以客戶端必須要有容錯機(jī)制, 比如可以使用請求重試、斷路器等機(jī)制。

    由于本地調(diào)試很容易觸發(fā)注冊中心的保護(hù)機(jī)制, 這會使得注冊中心維護(hù)的服務(wù)實例不那么準(zhǔn)確。所以, 我們在本地進(jìn)行開發(fā)的時候, 可以使用eureka.server.enableself-preservation=false 參數(shù)來關(guān)閉保護(hù)機(jī)制, 以確保注冊中心可以將不可用的實例正確剔除。

Eureka常用配置


1.Eureka服務(wù)監(jiān)控


添加依賴

<dependency>
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

注意:服務(wù)端已經(jīng)存在該依賴,可以不用添加。

# info自定義
info.build.name=@project.name@
info.build.description=@project.description@
info.build.groupId=@project.groupId@
info.build.artifact=@project.artifactId@
info.build.version=@project.version@
# 狀態(tài)頁面自定義訪問鏈接
eureka.instance.status-page-url-path=/info

springcloud——Eureka深入

注意:

1、 服務(wù)監(jiān)控依賴于 spring-boot-starter-actuator 這個 jar

2、 注意 management.context-path 的定義

3、 注意 server.servlet-path 的定義

4、 可以直接定義 eureka.instance.status-page-url=http://www.roncoo.com,這個優(yōu)先級高

2.Eureka客戶端的常用配置


# server
server.port=8888

# spring
spring.application.name=spring-cloud-consumer

# eureka
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

#自定義訪問路徑
eureka.instance.status-page-url-path=/info
#自定義實例ID
eureka.instance.instanceId=${spring.application.name}:${random.value}
#顯示IP地址
eureka.instance.prefer-ip-address=true

#設(shè)置拉取服務(wù)注冊信息時間,默認(rèn)60s
eureka.client.registry-fetch-interval-seconds=30

#指定續(xù)約更新頻率,默認(rèn)是30s
eureka.instance.lease-renewal-interval-in-seconds=15

#設(shè)置過期剔除時間,默認(rèn)90s
eureka.instance.lease-expiration-duration-in-seconds=45

3.Eureka服務(wù)端的常用配置

# server (eureka 默認(rèn)端口為:8761)
server.port=8761

# spring
spring.application.name=spring-cloud-server

# eureka
# 是否注冊到eureka
eureka.client.register-with-eureka=false
# 是否從eureka獲取注冊信息
eureka.client.fetch-registry=false
# eureka服務(wù)器的地址(注意:地址最后面的 /eureka/ 這個是固定值)
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

# info自定義,讀取pom文件中的內(nèi)容
info.build.name=@project.name@
info.build.description=@project.description@
info.build.groupId=@project.groupId@
info.build.artifact=@project.artifactId@
info.build.version=@project.version@

# 指定環(huán)境
eureka.environment=dev

#指定數(shù)據(jù)中心
eureka.datacenter=roncoo

# 關(guān)閉自我保護(hù)模式
eureka.server.enable-self-preservation=false

#設(shè)置清理無效節(jié)點的時間間隔,默認(rèn)60000,即是60s
eureka.server.eviction-interval-timer-in-ms=5000

Eureka服務(wù)認(rèn)證


1.指定注冊中心

在配置文件中指定注冊中心,主要通過eureka.client.serviceUrl 參數(shù)實現(xiàn)。該參數(shù)的定義如下所示,它的配置值存儲在HashMap 類型中,并且設(shè)置有一組默認(rèn)值, 默認(rèn)值的key 為defaultZone、value 為http://localhost:8761/eureka/。

private Map<String, String> serviceUrl = new HashMap<> ();
this.serviceUrl.put(DEFAULT_ZONE, DEFAULT_URL);
public static丘nal String DEFAULT_URL = "http://localhost:8761" + DEFAULT_PREFIX + "/";
public static final String DEFAULT_ZONE = "defaultZone";

所以我們做了如下配置, 來將應(yīng)用注冊到對應(yīng)的Eureka 服務(wù)端中。

eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

當(dāng)構(gòu)建了高可用的服務(wù)注冊中心集群時, 我們可以為參數(shù)的value 值配置多個注冊中心的地址(通過逗號分隔)。比如下面的例子:

eureka.client.serviceUrl.defaultZone=http://peerl:8761/eureka/, http://peer2:8762/eureka/

另外, 為了服務(wù)注冊中心的安全考慮, 很多時候我們都會為服務(wù)注冊中心加入安全校驗。這個時候,在配置serviceUrl 時, 需要在value 值的URL 中加入相應(yīng)的安全校驗信息, 比如http://<username>:<password>@localhost:1111/eureka。其中,<username>為安全校驗信息的用戶名, <password>為該用戶的密碼。

2.服務(wù)認(rèn)證

1、服務(wù)端添加依賴

<dependency>
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

2、服務(wù)端添加配置

# 服務(wù)認(rèn)證
security.basic.enabled=true
security.user.name=qb
security.user.password=123456

3、修改服務(wù)端和客戶端的配置

eureka.client.serviceUrl.defaultZone=http://qb:123456@localhost:8761/eureka/

建議:能在內(nèi)網(wǎng)的,盡量在內(nèi)網(wǎng),這樣既可以保障安全,也能降低復(fù)雜度。

Eureka高可用集群配置

springcloud——Eureka深入

說明:啟動3個注冊中心,我們將cloudtest1、cloudtest2、cloudtest3 各自都將serviceUrl 指向另外兩個節(jié)點,即是 cloudtest1、cloudtest2、cloudtest3 是兩兩互相注冊的。

步驟:

1、設(shè)置 hosts:C:\Windows\System32\drivers\etc\hosts;

# Cluster hosts
127.0.0.1 cloudtest1
127.0.0.1 cloudtest2
127.0.0.1 cloudtest3

2、修改配置

每個服務(wù)都需要相應(yīng)的修改,服務(wù)-01

spring.application.name=spring-cloud-server-01
eureka.instance.hostname=cloudtest1
eureka.client.serviceUrl.defaultZone=http://qb:123456@cloudtest2:8762/eureka/,http://qb:123456@cloudtest3:8763/eureka/

同理:服務(wù)-02,服務(wù)-03 都做相對應(yīng)的修改

3、配置修改

#這里是為了測試,生產(chǎn)應(yīng)該保持默認(rèn)值:30s 
eureka.instance.lease-renewal-interval-in-seconds=5
#剔除失效服務(wù)的檢測時間,默認(rèn)值:60000,即 60s 
eureka.server.eviction-interval-timer-in-ms=5000

聲明:"服務(wù)治理機(jī)制"這部分是截取《springcloud微服務(wù)實戰(zhàn)(翟永超)》,我本人覺得他講解的很到位,也很容易理解;至于常用配置、服務(wù)認(rèn)證、高可用注冊是經(jīng)過實踐總結(jié)的。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:springcloud——Eureka深入-創(chuàng)新互聯(lián)
分享URL:http://www.rwnh.cn/article28/cegpcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、企業(yè)網(wǎng)站制作、用戶體驗、網(wǎng)站收錄、網(wǎng)站內(nèi)鏈網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
高唐县| 贵州省| 西充县| 临潭县| 嘉义市| 清丰县| 颍上县| 明光市| 依兰县| 巴中市| 巴东县| 泰顺县| 大港区| 察隅县| 定结县| 萝北县| 南和县| 新沂市| 寿光市| 丽水市| 昭觉县| 平陆县| 永宁县| 宁远县| 东兴市| 枞阳县| 宜宾市| 姜堰市| 和龙市| 塘沽区| 十堰市| 金阳县| 怀宁县| 霸州市| 合江县| 哈巴河县| 石景山区| 宁陵县| 阿克苏市| 永昌县| 夹江县|