成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

API網(wǎng)關(guān)如何實(shí)現(xiàn)對服務(wù)下線實(shí)時感知

codeKK / 2276人閱讀

摘要:上篇文章緩存機(jī)制介紹了的緩存機(jī)制,相信大家對有了進(jìn)一步的了解,本文將詳細(xì)介紹網(wǎng)關(guān)如何實(shí)現(xiàn)服務(wù)下線的實(shí)時感知。目前網(wǎng)關(guān)實(shí)現(xiàn)的是對網(wǎng)關(guān)下游服務(wù)的實(shí)時感知,而且需滿足以下條件生產(chǎn)者需部署在容器管理平臺生產(chǎn)者做正常的下線升級或者縮容操作。

上篇文章《Eureka 緩存機(jī)制》介紹了Eureka的緩存機(jī)制,相信大家對Eureka 有了進(jìn)一步的了解,本文將詳細(xì)介紹API網(wǎng)關(guān)如何實(shí)現(xiàn)服務(wù)下線的實(shí)時感知。

一、前言

在基于云的微服務(wù)應(yīng)用中,服務(wù)實(shí)例的網(wǎng)絡(luò)位置都是動態(tài)分配的。而且由于自動伸縮、故障和升級,服務(wù)實(shí)例會經(jīng)常動態(tài)改變。因此,客戶端代碼需要使用更加復(fù)雜的服務(wù)發(fā)現(xiàn)機(jī)制。

目前服務(wù)發(fā)現(xiàn)主要有兩種模式:客戶端發(fā)現(xiàn)和服務(wù)端發(fā)現(xiàn)。

服務(wù)端發(fā)現(xiàn):客戶端通過負(fù)載均衡器向服務(wù)注冊中心發(fā)起請求,負(fù)載均衡器查詢服務(wù)注冊中心,將每個請求路由到可用的服務(wù)實(shí)例上。

客戶端發(fā)現(xiàn):客戶端負(fù)責(zé)決定可用服務(wù)實(shí)例的網(wǎng)絡(luò)地址,并且在集群中對請求負(fù)載均衡, 客戶端訪問服務(wù)登記表,也就是一個可用服務(wù)的數(shù)據(jù)庫,然后客戶端使用一種負(fù)載均衡算法選擇一個可用的服務(wù)實(shí)例然后發(fā)起請求。

客戶端發(fā)現(xiàn)相對于服務(wù)端發(fā)現(xiàn)最大的區(qū)別是:客戶端知道(緩存)可用服務(wù)注冊表信息。如果Client端緩存沒能從服務(wù)端及時更新的話,可能出現(xiàn)Client 與 服務(wù)端緩存數(shù)據(jù)不一致的情況。

二、網(wǎng)關(guān)與Eureka結(jié)合使用

Netflix OSS 提供了一個客戶端服務(wù)發(fā)現(xiàn)的好例子。Eureka Server 為注冊中心,Zuul 相對于Eureka Server來說是Eureka Client,Zuul 會把 Eureka Server 端服務(wù)列表緩存到本地,并以定時任務(wù)的形式更新服務(wù)列表,同時zuul通過本地列表發(fā)現(xiàn)其它服務(wù),使用Ribbon實(shí)現(xiàn)客戶端負(fù)載均衡。

正常情況下,調(diào)用方對網(wǎng)關(guān)發(fā)起請求即刻能得到響應(yīng)。但是當(dāng)對生產(chǎn)者做縮容、下線、升級的情況下,由于Eureka這種多級緩存的設(shè)計結(jié)構(gòu)和定時更新的機(jī)制,LoadBalance 端的服務(wù)列表B存在更新不及時的情況(由上篇文章《Eureka 緩存機(jī)制》可知,服務(wù)消費(fèi)者最長感知時間將無限趨近240s),如果這時消費(fèi)者對網(wǎng)關(guān)發(fā)起請求,LoadBalance 會對一個已經(jīng)不存在的服務(wù)發(fā)起請求,請求是會超時的。

三、解決方案 3.1 實(shí)現(xiàn)思路

生產(chǎn)者下線后,最先得到感知的是 Eureka Server 中的 readWriteCacheMap,最后得到感知的是網(wǎng)關(guān)核心中的 LoadBalance。但是 loadBalance 對生產(chǎn)者的發(fā)現(xiàn)是在 loadBalance 本地維護(hù)的列表中。

所以要想達(dá)到網(wǎng)關(guān)對生產(chǎn)者下線的實(shí)時感知,可以這樣做:首先生產(chǎn)者或者部署平臺主動通知 Eureka Server, 然后跳過 Eureka 多級緩存之間的更新時間,直接通知 Zuul 中的 Eureka Client,最后將 Eureka Client 中的服務(wù)列表更新到 Ribbon 中。

但是如果下線通知的邏輯代碼放在生產(chǎn)者中,會造成代碼污染、語言差異等問題。

借用一句名言:

“計算機(jī)科學(xué)領(lǐng)域的任何問題都可以通過增加一個間接的中間層來解決”

Gateway-SynchSpeed 相當(dāng)于一個代理服務(wù),它對外提供REST API來負(fù)責(zé)響應(yīng)調(diào)用方的下線請求,同時會將生產(chǎn)者的狀態(tài)同步到 Eureka Server 和 網(wǎng)關(guān)核心,起著 狀態(tài)同步 和 軟事物 的作用。

思路:在生產(chǎn)者做 縮容、下線、升級 前,spider 平臺(spider為容器管理平臺)會主動通知 Gateway-SynchSpeed 某個生產(chǎn)者的某個實(shí)例要下線了,然后 Gateway-SynchSpeed 會通知 Eureka Server 生產(chǎn)者的某個實(shí)例下線了;如果Eureka Server 下線成功,Gateway-SynchSpeed 會直接通知 網(wǎng)關(guān)核心。

設(shè)計特點(diǎn)

無侵入性、方便使用。不用關(guān)心調(diào)用方的基于何種語言實(shí)現(xiàn),調(diào)用者只要對 Gateway-SynchSpeed 發(fā)起一個http rest請求即可,真正的實(shí)現(xiàn)邏輯不用侵入到調(diào)用方而是交給這個代理來實(shí)現(xiàn)。

原子性。調(diào)用方先在Eureka Server下線,然后在所有相關(guān)網(wǎng)關(guān)核心中下線為最小工作執(zhí)行單元,Gateway-SynchSpeed 相當(dāng)于一個"軟事物",保證服務(wù)下線的某種程度上原子特性。

3.2 實(shí)現(xiàn)步驟

步驟說明

第一步:在生產(chǎn)者做 縮容、下線、升級 前,spider平臺會以http請求的形式通知到 Gateway-SynchSpeed 服務(wù),通知的粒度為服務(wù)實(shí)例所在的容器IP。

第二步:Gateway-SynchSpeed 接受到請求后,先校驗(yàn)IP的可用性,然后通知Eureka Server。

第三步:Eureka Server 將 Producer 置為失效狀態(tài),并返回處理結(jié)果(Eureka 下線形式分為兩種,一種是直接從服務(wù)注冊列表直接剔除,第二種是狀態(tài)下線,即是將 Producer 的狀態(tài)置為OUT_OF_SERVICE。 如果是以第一種形式下線,Spider平臺發(fā)出下線請求后,不能保證Producer進(jìn)程立刻被kill,如果這期間 Producer 還有心跳同步到 Eureka Server,服務(wù)會重新注冊到 Eureka Server)。

第四步:Gateway-SynchSpeed 得到上一步結(jié)果,如果結(jié)果為成功,則執(zhí)行下一步;反之,則停止。

第五步:Gateway-SynchSpeed 為Eureka Client。Gateway-SynchSpeed 通過 IP 到本地服務(wù)注冊列表中得到 Producer 的 Application-Name。

第六步:Gateway-SynchSpeed 通過 Application-Name 到網(wǎng)關(guān)核心庫中查詢所有與下線服務(wù)相關(guān)的 網(wǎng)關(guān)組名字。

第七步:Gateway-SynchSpeed 通過 網(wǎng)關(guān)組名字 到本地服務(wù)列表中查找網(wǎng)關(guān)組下所有的服務(wù)地址 ipAddress(ip : port)。

第八步:Gateway-SynchSpeed 異步通知所有相關(guān)網(wǎng)關(guān)節(jié)點(diǎn)。

第九步:Gateway-Core 收到通知后,對 Producer 做狀態(tài)下線,同時記錄所有狀態(tài)下線成功的實(shí)例信息到緩存 DownServiceCache 中。

第十步:Gateway-Core 更新本地 Ribbon 服務(wù)列表。

四、補(bǔ)償機(jī)制

Eureka 提供了一種安全保護(hù)機(jī)制。Eureka Client 從 Eureka Server 更新服務(wù)列表前,會校驗(yàn)相關(guān)Hash值是否改變( Client 服務(wù)列表被修改,hash值會改變),如果改變,更新方式會從增量更新變成全量更新,(由《Eureka 緩存機(jī)制》可知這30s內(nèi) readOnlyCacheMap 和 readWriteCacheMap 的數(shù)據(jù)可能存在差異),如果Client端緩存列表被readOnlyCacheMap 覆蓋,最終會導(dǎo)致 Ribbon 端服務(wù)列表與 readWriteCacheMap 數(shù)據(jù)不一致。

針對 Eureka 這種機(jī)制,引入監(jiān)聽器 EurekaEventListener 作為補(bǔ)償機(jī)制,它會監(jiān)聽 Eureka Client 全量拉取事件,對于緩存中未超過30s的服務(wù),將其狀態(tài)重新設(shè)置成 OUT_OF_SERVICE 。

五、API安全設(shè)計

考慮到系統(tǒng)的安全性問題,如果被人惡意訪問,可能會使生產(chǎn)者在Eureka Server中無故下線,導(dǎo)致消費(fèi)者無法通過 Eureka Server 來發(fā)現(xiàn)生產(chǎn)者。

使用黑白名單做安全過濾,基本流程如下:

對 Gateway-Synchspeed 中設(shè)置白名單網(wǎng)段(IP網(wǎng)段)

在 Gateway-Synchspeed 加入過濾器,對下線請求方進(jìn)行IP校驗(yàn),如果請求端IP在網(wǎng)段中,則放行;反之,過濾。

六、日志回溯

由于 Gateway-SynchSpeed 和 Gateway-Core 是部署在 Docker 容器中,如果容器重啟,會導(dǎo)致日志文件全部丟失。所以需要將 Gateway-SynchSpeed 和 Gateway-Core 中相關(guān)日志寫入到 Elasticsearch ,最終由 Kibana 負(fù)責(zé)查詢 Elasticsearch 的數(shù)據(jù)并以可視化的方式展現(xiàn)。

七、代碼片段展示

Gateway-SynchSpeed 做狀態(tài)同步

EurekaEventListener 處理緩存數(shù)據(jù)

八、 補(bǔ)充說明

目前網(wǎng)關(guān)實(shí)現(xiàn)對服務(wù)下線的實(shí)時感知中,使用的 Zuul 和 Eureka 版本為 Spring Cloud Zuul 1.3.6.RELEASE 、Spring Cloud Eureka 1.4.4.RELEASE。

目前網(wǎng)關(guān)實(shí)現(xiàn)的是對網(wǎng)關(guān)下游服務(wù)的實(shí)時感知,而且需滿足以下條件:

生產(chǎn)者需部署在 kubernetes 容器管理平臺

生產(chǎn)者做正常的下線、升級或者縮容操作。如果是由于容器資源不足,導(dǎo)致服務(wù)異常宕機(jī)等非正常下線,不支持。

網(wǎng)關(guān)服務(wù)下線實(shí)時感知是網(wǎng)關(guān)對業(yè)務(wù)方提供的一種可選的解決方案,在 spider 平臺中默認(rèn)是沒有開啟此功能,是否開啟此功能由業(yè)務(wù)方根據(jù)本身系統(tǒng)要求決定,具體如何配置可參考 API網(wǎng)關(guān)接入指南 中 《網(wǎng)關(guān)實(shí)時感知在spider上配置文檔說明》。

作者:謝國輝

來源:宜信技術(shù)學(xué)院

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/62127.html

相關(guān)文章

  • 程序員筆記|詳解Eureka 緩存機(jī)制

    摘要:和二級緩存影響狀態(tài)更新,縮短這兩個定時任務(wù)周期可減少滯后時間,例如配置更新周期更新周期服務(wù)提供者保證服務(wù)正常下線。服務(wù)提供者延遲下線。 引言 Eureka是Netflix開源的、用于實(shí)現(xiàn)服務(wù)注冊和發(fā)現(xiàn)的服務(wù)。Spring Cloud Eureka基于Eureka進(jìn)行二次封裝,增加了更人性化的UI,使用更為方便。但是由于Eureka本身存在較多緩存,服務(wù)狀態(tài)更新滯后,最常見的狀況是:服務(wù)...

    mgckid 評論0 收藏0
  • 網(wǎng)關(guān)實(shí)現(xiàn)灰度發(fā)布

    摘要:就是一種灰度發(fā)布方式,讓一部分用戶繼續(xù)用,一部分用戶開始用,如果用戶對沒有什么反對意見,那么逐步擴(kuò)大范圍,把所有用戶都遷移到上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)調(diào)整問題,以保證其影響度。 一、背景互聯(lián)網(wǎng)產(chǎn)品開發(fā)有個非常特別的地方,就是不停的升級,升級,再升級。采用敏捷開發(fā)的方式,基本上保持每周或者每兩周一次的發(fā)布頻率,系統(tǒng)升級總是伴隨著各種風(fēng)險,新舊版本兼...

    stormjun 評論0 收藏0
  • 外行人都能看懂的SpringCloud,錯過了血虧!

    摘要:集群系統(tǒng)中的單個計算機(jī)通常稱為節(jié)點(diǎn),通常通過局域網(wǎng)連接,但也有其它的可能連接方式。這樣就高興了,可以專心寫自己的,前端就專門交由小周負(fù)責(zé)了。于是,小周和就變成了協(xié)作開發(fā)。都是為了項(xiàng)目正常運(yùn)行以及迭代。 一、前言 只有光頭才能變強(qiáng) 認(rèn)識我的朋友可能都知道我這陣子去實(shí)習(xí)啦,去的公司說是用SpringCloud(但我覺得使用的力度并不大啊~~)... 所以,這篇主要來講講SpringClou...

    沈建明 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<