老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊、服務(wù)器等服務(wù)

什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹

本篇內(nèi)容主要講解“什么是服務(wù)發(fā)現(xiàn)以及redis作為服務(wù)中介的介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹”吧!

創(chuàng)新互聯(lián)專注于泗陽企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城系統(tǒng)網(wǎng)站開發(fā)。泗陽網(wǎng)站建設(shè)公司,為泗陽等地區(qū)提供建站服務(wù)。全流程按需開發(fā)網(wǎng)站,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

什么是服務(wù)發(fā)現(xiàn)?

服務(wù)發(fā)現(xiàn)并沒有怎樣的高深莫測,它的原理再簡單不過。

服務(wù)提供者是什么,簡單點說就是一個HTTP服務(wù)器,提供了API服務(wù),有一個IP端口作為服務(wù)地址。服務(wù)消費者是什么,它就是一個簡單的進程,想要訪問服務(wù)提供者提供的服務(wù)來干一些事情。一個HTTP服務(wù)器既可以是服務(wù)提供者對外提供服務(wù),也可以是消費者需要別的服務(wù)提供者提供的服務(wù),這就是服務(wù)依賴,沒有你我就不是我自己。復(fù)雜的服務(wù)甚至有多個服務(wù)依賴。

服務(wù)發(fā)現(xiàn)有三個角色,服務(wù)提供者、服務(wù)消費者和服務(wù)中介。服務(wù)中介是聯(lián)系服務(wù)提供者和服務(wù)消費者的橋梁。服務(wù)提供者將自己提供的服務(wù)地址注冊到服務(wù)中介,服務(wù)消費者從服務(wù)中介那里查找自己想要的服務(wù)的地址,然后享受這個服務(wù)。服務(wù)中介提供多個服務(wù),每個服務(wù)對應(yīng)多個服務(wù)提供者。

什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹

image

服務(wù)中介就是一個字典,字典里有很多key/value鍵值對,key是服務(wù)名稱,value是服務(wù)提供者的地址列表。服務(wù)注冊就是調(diào)用字典的Put方法塞東西,服務(wù)查找就是調(diào)用字典的Get方法拿東西。

當服務(wù)提供者節(jié)點掛掉時,要求服務(wù)能夠及時取消注冊,比便及時通知消費者重新獲取服務(wù)地址。

當服務(wù)提供者新加入時,要求服務(wù)中介能及時告知服務(wù)消費者,你要不要嘗試一下新的服務(wù)。

Redis作為服務(wù)中介

Redis里面有豐富的數(shù)據(jù)結(jié)構(gòu),拿來存儲服務(wù)字典再合適不過了。對每一個服務(wù)名稱,我們用一個set結(jié)構(gòu)存儲服務(wù)的IP:Port字符串。如果服務(wù)提供者加入,調(diào)用sadd命令加入服務(wù)地址,如果服務(wù)掛掉,調(diào)用srem命令移除服務(wù)地址。對服務(wù)消費者使用smembers指令獲取所有服務(wù)地址然后在消費進程里隨機挑一個,或者使用srandmemember指令直接獲取隨機服務(wù)地址。

這個時候你也許會表示懷疑,服務(wù)發(fā)現(xiàn)真這么簡單么?答案是還差一點,關(guān)于上面的這個解決方案有幾個問題。

第一個問題是服務(wù)提供者進程如果被kill -9暴力殺死,不能主動調(diào)用srem命令怎么辦?

這個時候服務(wù)列表中多了一個黑地址指向了不存在的服務(wù)而消費者完全不知道,這個時候服務(wù)中介就成了黑中介了。那該怎么辦呢?

我們引入服務(wù)保活和檢查機制,并更換數(shù)據(jù)結(jié)構(gòu)。服務(wù)提供者需要每隔5秒左右向服務(wù)中介匯報存活,服務(wù)中介將服務(wù)地址和匯報時間記錄在zset數(shù)據(jù)結(jié)構(gòu)的value和score中。服務(wù)中介需要每隔10秒左右檢查zset數(shù)據(jù)結(jié)構(gòu),踢掉匯報時間嚴重落后的服務(wù)地址項。這樣就可以準實時地保證服務(wù)列表中服務(wù)地址的有效性。

第二個問題是服務(wù)列表變動時如何通知消費者。有兩種解決方案。

第一種是輪詢,消費者需要每隔幾秒查詢服務(wù)列表是否有改變。如果服務(wù)很多,服務(wù)列表很大,消費者很多,redis會有一定壓力。所以這時候可以引入服務(wù)列表的版本號機制,給每個服務(wù)提供一個key/value設(shè)置服務(wù)的版本號,就是在服務(wù)列表發(fā)生變動時,遞增這個版本號。消費者只需要輪詢這個版本號的變動即可知道服務(wù)列表是否發(fā)生了變化。因為服務(wù)列表比較穩(wěn)定,僅在網(wǎng)絡(luò)嚴重抖動的情況下才會頻繁發(fā)生變動,所以redis幾乎沒有壓力。

第二種是采用pubsub。這種方式及時性要明顯好于輪詢。缺點是每個pubsub都會占用消費者一個線程和一個額外的redis連接。為了減少對線程和連接的浪費,我們使用單個pubsub廣播全局版本號的變動。所謂全局版本號就是任意服務(wù)列表發(fā)生了變動,這個版本號都會遞增。接收到版本變動的消費者再去檢查各自的依賴服務(wù)列表的版本號是否發(fā)生了變動。這種全局版本號也可以用于第一種輪詢方案。

第三個問題是redis是單點的,如果掛掉了怎么辦?

這是個大問題。正是因為這個問題的存在,流行的服務(wù)發(fā)現(xiàn)系統(tǒng)都是使用分布式數(shù)據(jù)庫zookeeper/etcd/consul等來作為服務(wù)中介,它們是分布式的多節(jié)點的,掛掉了一個節(jié)點沒關(guān)系,系統(tǒng)仍然可以正常工作。

什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹

image

那如果整個zk集群掛掉會怎樣呢?其實每個服務(wù)消費者在本地內(nèi)存里都會存一份當前的服務(wù)列表,即使服務(wù)中介集群掛掉,也是可以使用當前的服務(wù)列表正常工作的。

那redis作為服務(wù)中介就真的不靠譜了么?其實還有個redis-sentinel可以消除redis的單點問題,redis-sentinel可以在主節(jié)點掛掉的時候,自動升級從節(jié)點為主節(jié)點。所以拿redis干這件事也是可以的。用redis干服務(wù)發(fā)現(xiàn)確實非常簡單,雖然這種方式非常不流行。

服務(wù)提供者不只是HTTP服務(wù)

上面提到服務(wù)提供者簡單來說就是HTTP服務(wù)器,其實服務(wù)多種多樣。可以是數(shù)據(jù)庫服務(wù),可以是RPC服務(wù),可以是UDP服務(wù)等等。

如果是MySQL數(shù)據(jù)庫,那如何將MySQL服務(wù)注冊到服務(wù)中介呢?原生的MySQL可沒有提供這樣功能。一般做法是提供一個Agent代理去注冊。這個代理除了將服務(wù)地址注冊到服務(wù)中介外,還需要監(jiān)控MySQL的健康狀況,以便當MySQL宕機時能及時切換到新的MySQL服務(wù)地址。一般這個Agent為了節(jié)省資源而不止監(jiān)控一個數(shù)據(jù)庫,它可以同時監(jiān)控多個數(shù)據(jù)庫,甚至是多種數(shù)據(jù)庫。

服務(wù)配置重加載

服務(wù)發(fā)現(xiàn)一般只是用來注冊和查找服務(wù)列表這樣一個比較單純的功能。不過現(xiàn)代的服務(wù)發(fā)現(xiàn)系統(tǒng)還會集成服務(wù)配置管理功能。這樣可以實現(xiàn)服務(wù)配置的實時重加載。原理也很簡單,就是對于每一個服務(wù)項,服務(wù)中介還會存儲一個單獨的key/value用來存儲這個服務(wù)的配置信息。當這個配置項在后臺被修改時,服務(wù)中介會實時通知相關(guān)服務(wù)器變更配置信息。比如數(shù)據(jù)庫地址變動,業(yè)務(wù)參數(shù)修改等。

服務(wù)管理后臺

為了便于服務(wù)管理,一般服務(wù)發(fā)現(xiàn)還會提供一個服務(wù)管理后臺,用于管理人員查看服務(wù)集群的狀態(tài)。如果服務(wù)注冊和匯報時提供冗余的配置信息,服務(wù)管理后臺就可以呈現(xiàn)更為詳細的服務(wù)信息。服務(wù)管理后臺還可以將所有的服務(wù)依賴組織起來,呈現(xiàn)出一顆漂亮的服務(wù)依賴樹。

服務(wù)發(fā)現(xiàn)的一個簡單實現(xiàn)

小編在閑暇之余基于Redis實現(xiàn)了一個簡單的服務(wù)發(fā)現(xiàn)系統(tǒng)Captain。讀者可以去github上下載這個項目進行學(xué)習(xí)。我除了編寫了服務(wù)發(fā)現(xiàn)的服務(wù)器之外,客戶端sdk也一塊做了開發(fā),可能不太穩(wěn)定,希望讀者體諒,不要用于線上的業(yè)務(wù)系統(tǒng)。

什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹

在Captain這個項目里,我的服務(wù)發(fā)現(xiàn)服務(wù)器將Redis提供的服務(wù)做了一層封裝,對外提供HTTP API進行服務(wù)的注冊和查找,沒有使用上文提到的pubsub功能。

到此,相信大家對“什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站名稱:什么是服務(wù)發(fā)現(xiàn)以及Redis作為服務(wù)中介的介紹
本文URL:http://www.xueling.net.cn/article/podepi.html

其他資訊

在線咨詢
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 欧美性欧美巨大黑白大战 | 久久久久久久久久久久久女国产乱 | 91国产精品入口 | 18禁成人网站免费观看 | 99re只有精品 | 99精品久久久久久久免费看蜜臀 | 婷婷久久综合九色综合97最多收藏 | 国产专区自拍 | 天天干天天草天天爽 | 国产色小视频 | 成人免费视频视频 | 又大又硬又爽免费视频 | 一级特黄色大片 | 国产亚洲日韩一区二区三区 | 狠狠躁夜夜躁青青草原软件 | 国产乱仑视频 | 欧美性感一区二区 | 亚洲日本在线在线看片4k超清 | 日韩精品久久久肉伦网站 | 成在人线AV无码免费看网站 | 成人久久久 | 精品无人区麻豆乱码无限制 | 国产精品女同一区二区久久夜 | 精品国产自在现线看久久 | 日本一区二区三区不卡免费 | 中文字幕在线国产 | 国产一级一片免费播放 | 蜜芽AⅤ色欲AV浪潮夜夜嗨 | 亚洲欧美视频在线观看 | 免费观看又黄又爽的视频 | 亚洲二区三区在线 | 草久视频免费观看 | 免费爆乳精品一区二区 | 免费人成在线观看视频无码 | 免费av国产 | 国产精品视频500部 大地影视资源中文 | 亚洲精品aaaaa | 美女草比视频 | 懂色一区二区二区av免费观看 | 美女一区 | 亚洲va中文字幕无码 |