溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

服務(wù)注冊(cè)的方式有幾種

發(fā)布時(shí)間:2020-06-05 09:53:52 來源:億速云 閱讀:457 作者:Leah 欄目:編程語言

服務(wù)注冊(cè)的方式有幾種?針對(duì)這個(gè)問題,今天小編總結(jié)這篇有關(guān)服務(wù)注冊(cè)與注冊(cè)工具的文章,可供感興趣的小伙伴們參考借鑒,希望對(duì)大家有所幫助。

客戶端注冊(cè)(zookeeper)

客戶端注冊(cè)是服務(wù)自身要負(fù)責(zé)注冊(cè)與注銷的工作。當(dāng)服務(wù)啟動(dòng)后向注冊(cè)中心注冊(cè)自身,當(dāng)服務(wù)下線時(shí)注銷自己。期間還需要和注冊(cè)中心保持心跳。心跳不一定要客戶端來做,也可以由注冊(cè)中心負(fù)責(zé)(這個(gè)過程叫探活)。這種方式的缺點(diǎn)是注冊(cè)工作與服務(wù)耦合在一起,不同語言都要實(shí)現(xiàn)一套注冊(cè)邏輯。

服務(wù)注冊(cè)的方式有幾種
第三方注冊(cè)(獨(dú)立的服務(wù) Registrar)

第三方注冊(cè)由一個(gè)獨(dú)立的服務(wù)Registrar負(fù)責(zé)注冊(cè)與注銷。當(dāng)服務(wù)啟動(dòng)后以某種方式通知Registrar,然后 Registrar 負(fù)責(zé)向注冊(cè)中心發(fā)起注冊(cè)工作。同時(shí)注冊(cè)中心要維護(hù)與服務(wù)之間的心跳,當(dāng)服務(wù)不可用時(shí),向注冊(cè)中心注銷服務(wù)。這種方式的缺點(diǎn)是 Registrar 必須是一個(gè)高可用的系統(tǒng),否則注冊(cè)工作沒法進(jìn)展。

服務(wù)注冊(cè)的方式有幾種
客戶端發(fā)現(xiàn)

客戶端發(fā)現(xiàn)是指客戶端負(fù)責(zé)查詢可用服務(wù)地址,以及負(fù)載均衡的工作。這種方式最方便直接,而且也方便做負(fù)載均衡。再者一旦發(fā)現(xiàn)某個(gè)服務(wù)不可用立即換另外一個(gè),非常直接。缺點(diǎn)也在于多語言時(shí)的重復(fù)工作,每個(gè)語言實(shí)現(xiàn)相同的邏輯。

服務(wù)注冊(cè)的方式有幾種
服務(wù)端發(fā)現(xiàn)

服務(wù)端發(fā)現(xiàn)需要額外的 Router 服務(wù),請(qǐng)求先打到 Router,然后 Router 負(fù)責(zé)查詢服務(wù)與負(fù)載均衡。

這種方式雖然沒有客戶端發(fā)現(xiàn)的缺點(diǎn),但是它的缺點(diǎn)是保證 Router 的高可用。

服務(wù)注冊(cè)的方式有幾種
API 網(wǎng)關(guān)
API Gateway 是一個(gè)服務(wù)器,也可以說是進(jìn)入系統(tǒng)的唯一節(jié)點(diǎn)。這跟面向?qū)ο笤O(shè)計(jì)模式中的Facade 模式很像。API Gateway 封裝內(nèi)部系統(tǒng)的架構(gòu),并且提供 API 給各個(gè)客戶端。它還可能有其他功能,如授權(quán)、監(jiān)控、負(fù)載均衡、緩存、請(qǐng)求分片和管理、靜態(tài)響應(yīng)處理等。下圖展示了一個(gè)適應(yīng)當(dāng)前架構(gòu)的 API Gateway。

服務(wù)注冊(cè)的方式有幾種

API Gateway 負(fù)責(zé)請(qǐng)求轉(zhuǎn)發(fā)、合成和協(xié)議轉(zhuǎn)換。所有來自客戶端的請(qǐng)求都要先經(jīng)過 API Gateway,然后路由這些請(qǐng)求到對(duì)應(yīng)的微服務(wù)。API Gateway 將經(jīng)常通過調(diào)用多個(gè)微服務(wù)來處理一個(gè)請(qǐng)求以及聚合多個(gè)服務(wù)的結(jié)果。它可以在 web 協(xié)議與內(nèi)部使用的非 Web 友好型協(xié)議間進(jìn)行轉(zhuǎn)換,如HTTP 協(xié)議、WebSocket 協(xié)議。

請(qǐng)求轉(zhuǎn)發(fā)

服務(wù)轉(zhuǎn)發(fā)主要是對(duì)客戶端的請(qǐng)求安裝微服務(wù)的負(fù)載轉(zhuǎn)發(fā)到不同的服務(wù)上響應(yīng)合并

把業(yè)務(wù)上需要調(diào)用多個(gè)服務(wù)接口才能完成的工作合并成一次調(diào)用對(duì)外統(tǒng)一提供服務(wù)。

協(xié)議轉(zhuǎn)換

重點(diǎn)是支持 SOAP,JMS,Rest 間的協(xié)議轉(zhuǎn)換。

數(shù)據(jù)轉(zhuǎn)換

重點(diǎn)是支持 XML 和 Json 之間的報(bào)文格式轉(zhuǎn)換能力(可選)

安全認(rèn)證

  1. 基于 Token 的客戶端訪問控制和安全策略

  2. 傳輸數(shù)據(jù)和報(bào)文加密,到服務(wù)端解密,需要在客戶端有獨(dú)立的 SDK 代理包

  3. 基于 Https 的傳輸加密,客戶端和服務(wù)端數(shù)字證書支持

  4. 基于 OAuth3.0 的服務(wù)安全認(rèn)證(授權(quán)碼,客戶端,密碼模式等)

配置中心
配置中心一般用作系統(tǒng)的參數(shù)配置,它需要滿足如下幾個(gè)要求:高效獲取、實(shí)時(shí)感知、分布式訪問。

zookeeper 配置中心

實(shí)現(xiàn)的架構(gòu)圖如下所示,采取數(shù)據(jù)加載到內(nèi)存方式解決高效獲取的問題,借助 zookeeper 的節(jié)點(diǎn)監(jiān)聽機(jī)制來實(shí)現(xiàn)實(shí)時(shí)感知。
服務(wù)注冊(cè)的方式有幾種
配置中心數(shù)據(jù)分類

服務(wù)注冊(cè)的方式有幾種
事件調(diào)度(kafka)
消息服務(wù)和事件的統(tǒng)一調(diào)度,常用用 kafka ,activemq 等。

服務(wù)跟蹤(starter-sleuth)
隨著微服務(wù)數(shù)量不斷增長(zhǎng),需要跟蹤一個(gè)請(qǐng)求從一個(gè)微服務(wù)到下一個(gè)微服務(wù)的傳播過程, Spring Cloud Sleuth 正是解決這個(gè)問題,它在日志中引入唯一 ID,以保證微服務(wù)調(diào)用之間的一致性,這樣你就能跟蹤某個(gè)請(qǐng)求是如何從一個(gè)微服務(wù)傳遞到下一個(gè)。

  1. 為了實(shí)現(xiàn)請(qǐng)求跟蹤,當(dāng)請(qǐng)求發(fā)送到分布式系統(tǒng)的入口端點(diǎn)時(shí),只需要服務(wù)跟蹤框架為該請(qǐng)求創(chuàng)建一個(gè)唯一的跟蹤標(biāo)識(shí),同時(shí)在分布式系統(tǒng)內(nèi)部流轉(zhuǎn)的時(shí)候,框架始終保持傳遞該唯一標(biāo)識(shí),直到返回給請(qǐng)求方為止,這個(gè)唯一標(biāo)識(shí)就是前文中提到的 Trace ID。通過 Trace ID 的記錄,我們就能將所有請(qǐng)求過程日志關(guān)聯(lián)起來。

  2. 為了統(tǒng)計(jì)各處理單元的時(shí)間延遲,當(dāng)請(qǐng)求達(dá)到各個(gè)服務(wù)組件時(shí),或是處理邏輯到達(dá)某個(gè)狀態(tài)時(shí),也通過一個(gè)唯一標(biāo)識(shí)來標(biāo)記它的開始、具體過程以及結(jié)束,該標(biāo)識(shí)就是我們前文中提到的 Span ID,對(duì)于每個(gè) Span 來說,它必須有開始和結(jié)束兩個(gè)節(jié)點(diǎn),通過記錄開始 Span 和結(jié)束 Span 的時(shí)間戳,就能統(tǒng)計(jì)出該 Span 的時(shí)間延遲,除了時(shí)間戳記錄之外,它還可以包含一些其他元數(shù)據(jù),比如:事件名稱、請(qǐng)求信息等。

  3. 在快速入門示例中,我們輕松實(shí)現(xiàn)了日志級(jí)別的跟蹤信息接入,這完全歸功于spring-cloudstarter-sleuth 組件的實(shí)現(xiàn)。在 Spring Boot 應(yīng)用中,通過在工程中引入 spring-cloudstarter-sleuth 依賴之后, 它會(huì)自動(dòng)的為當(dāng)前應(yīng)用構(gòu)建起各通信通道的跟蹤機(jī)制,比如:

? 通過諸如 RabbitMQ、Kafka(或者其他任何 Spring Cloud Stream 綁定器實(shí)現(xiàn)的消息中間件)傳遞的請(qǐng)求。

? 通過 Zuul 代理傳遞的請(qǐng)求。

? 通過 RestTemplate 發(fā)起的請(qǐng)求。

服務(wù)熔斷(Hystrix)
在微服務(wù)架構(gòu)中通常會(huì)有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會(huì)導(dǎo)致級(jí)聯(lián)故障,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用,并將不可用逐漸放大的過程。
熔斷器的原理很簡(jiǎn)單,如同電力過載保護(hù)器。它可以實(shí)現(xiàn)快速失敗,如果它在一段時(shí)間內(nèi)偵測(cè)到許多類似的錯(cuò)誤,會(huì)強(qiáng)迫其以后的多個(gè)調(diào)用快速失敗,不再訪問遠(yuǎn)程服務(wù)器,從而防止應(yīng)用程序不斷地嘗試執(zhí)行可能會(huì)失敗的操作,使得應(yīng)用程序繼續(xù)執(zhí)行而不用等待修正錯(cuò)誤,或者浪費(fèi) CPU時(shí)間去等到長(zhǎng)時(shí)間的超時(shí)產(chǎn)生。熔斷器也可以使應(yīng)用程序能夠診斷錯(cuò)誤是否已經(jīng)修正,如果已經(jīng)修正,應(yīng)用程序會(huì)再次嘗試調(diào)用操作。

服務(wù)注冊(cè)的方式有幾種
Hystrix 斷路器機(jī)制

斷路器很好理解, 當(dāng) Hystrix Command 請(qǐng)求后端服務(wù)失敗數(shù)量超過一定比例(默認(rèn) 50%), 斷路器會(huì)切換到開路狀態(tài)(Open). 這時(shí)所有請(qǐng)求會(huì)直接失敗而不會(huì)發(fā)送到后端服務(wù). 斷路器保持在開路狀態(tài)一段時(shí)間后(默認(rèn) 5 秒), 自動(dòng)切換到半開路狀態(tài)(HALF-OPEN). 這時(shí)會(huì)判斷下一次請(qǐng)求的返回情況,如果請(qǐng)求成功, 斷路器切回閉路狀態(tài)(CLOSED), 否則重新切換到開路狀態(tài)(OPEN). Hystrix 的斷路器,就像我們家庭電路中的保險(xiǎn)絲, 一旦后端服務(wù)不可用, 斷路器會(huì)直接切斷請(qǐng)求鏈, 避免發(fā)送大量無效請(qǐng)求影響系統(tǒng)吞吐量, 并且斷路器有自我檢測(cè)并恢復(fù)的能力。

API 管理

SwaggerAPI 管理工具。

看完上述內(nèi)容,你們對(duì)服務(wù)注冊(cè)與注冊(cè)工具有進(jìn)一步的了解嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI