最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解redis在微服務(wù)領(lǐng)域的貢獻(xiàn)

 更新時(shí)間:2021年10月15日 16:15:50   作者:捉蟲(chóng)大師  
本文以dubbo為例看下redis是如何利用自身特性來(lái)完成注冊(cè)中心的功能,對(duì)redis微服務(wù)相關(guān)知識(shí)感興趣的朋友一起看看吧

前言

說(shuō)到redis,可能大家的腦海中蹦出的關(guān)鍵詞是:NoSQL、KV、高性能、緩存等。但今天的文章從另一個(gè)角度——微服務(wù)來(lái)展開(kāi)。

這篇文章的起因也是源自一次面試經(jīng)歷,在面試一位來(lái)自陌陌的候選人(就是那個(gè)交友的陌陌)時(shí),他提到一點(diǎn)讓我覺(jué)得很有意思,他說(shuō)redis在陌陌被使用的非常廣泛,除了常規(guī)的緩存外,某些場(chǎng)景下也當(dāng)NoSQL數(shù)據(jù)庫(kù)來(lái)使用,還用redis作為微服務(wù)的注冊(cè)中心,甚至連RPC的調(diào)用協(xié)議都用了redis協(xié)議。

注冊(cè)中心

最早了解到redis可以作為注冊(cè)中心是從dubbo的源碼中看到,但一直也沒(méi)有過(guò)多的了解,因?yàn)閺臎](méi)聽(tīng)說(shuō)哪家公司使用redis來(lái)做服務(wù)發(fā)現(xiàn)。

在dubbo中使用redis來(lái)做服務(wù)發(fā)現(xiàn)還是挺簡(jiǎn)單的,引入jedis依賴,將注冊(cè)中心地址改為redis地址即可:

<dependency>
	<groupId>redis.clients</groupId>
	<artifactId>jedis</artifactId>
	<version>2.9.0</version>
</dependency>

dubbo.registry.address=redis://127.0.0.1:6379

注冊(cè)上來(lái)的數(shù)據(jù)是這樣,類型是hash

/dubbo/${service}/${category}

/dubbo/com.newboo.sample.api.DemoService/consumers
/dubbo/com.newboo.sample.api.DemoService/providers

hash數(shù)據(jù)結(jié)構(gòu)下保存的key是注冊(cè)上來(lái)的url,value是過(guò)期時(shí)間

127.0.0.1:6379> hgetall /dubbo/com.newboo.sample.api.DemoService/providers
1) "dubbo://172.23.233.142:20881/com.newboo.sample.api.DemoService?anyhost=true&application=boot-samples-dubbo&deprecated=false&dubbo=2.0.2&dynamic=true&generic=false&interface=com.newboo.sample.api.DemoService&metadata-type=remote&methods=sayHello&pid=19807&release=2.7.8&side=provider&timestamp=1621857955355"
2) "1621858734778"

從理論上來(lái)說(shuō),注冊(cè)中心只要符合數(shù)據(jù)存儲(chǔ)、監(jiān)聽(tīng)推送變更、心跳檢測(cè)這幾個(gè)基本的功能即可。

以dubbo為例看下redis是如何利用自身特性來(lái)完成注冊(cè)中心的功能( 以dubbo 2.7.8版本為例):

服務(wù)注冊(cè)

  • provider在服務(wù)注冊(cè)時(shí),將服務(wù)提供方的url寫入/dubbo/${service}/providers下,數(shù)據(jù)類型為hash,key為提供方url,value為key的過(guò)期時(shí)間,默認(rèn)為60s,可配置
  • 寫入完成后以/dubbo/${service}/providers為key調(diào)用publish命令發(fā)布一個(gè)register事件provider在初始化時(shí)起一個(gè)單獨(dú)的線程每隔1/2過(guò)期時(shí)間(默認(rèn)30s)時(shí)對(duì)
  • provider進(jìn)行重新重新注冊(cè)并發(fā)布register事件

服務(wù)發(fā)現(xiàn)

  • 獲取匹配/dubbo/${service}/*的key(此處用到了keys命令),拿到的有這幾種:/dubbo/${service}/providers、/dubbo/${service}/routers/dubbo/${service}/configuators
  • 對(duì)/dubbo/${service}/*拿到的key進(jìn)行hgetall,拿到真實(shí)的provider列表以及配置等數(shù)據(jù),進(jìn)行組裝、匹配
  • 同時(shí)對(duì)每個(gè)subscribe的服務(wù)單獨(dú)開(kāi)一個(gè)線程,對(duì)/dubbo/${service}執(zhí)行psubscribe命令阻塞等待有事件發(fā)生

從源碼和測(cè)試來(lái)看,dubbo的redis注冊(cè)中心不能直接用于生產(chǎn)環(huán)境,原因有如下兩點(diǎn):

  • 使用了keys命令,會(huì)阻塞單線程的redis,keys執(zhí)行期間,其他命令都得排隊(duì)
  • 沒(méi)有心跳檢測(cè)這個(gè)功能,我測(cè)試了provider被kill -9殺死后,consumer是無(wú)法感知的。但從實(shí)現(xiàn)上來(lái)看是想通過(guò)存儲(chǔ)的過(guò)期時(shí)間來(lái)判斷服務(wù)是否可用,即需要對(duì)比url對(duì)應(yīng)的value與當(dāng)前的時(shí)間,如果過(guò)期應(yīng)被剔除,但這部分貌似沒(méi)有實(shí)現(xiàn)完整

雖然dubbo的redis注冊(cè)中心生產(chǎn)不可用,但這并不影響他可以構(gòu)建一個(gè)生產(chǎn)可用的注冊(cè)中心,陌陌就是個(gè)很好的例子。

RPC調(diào)用協(xié)議

redis協(xié)議作為RPC調(diào)用協(xié)議也是陌陌同學(xué)告訴我的,當(dāng)時(shí)我問(wèn)了他兩個(gè)問(wèn)題:

  • 為什么選擇redis協(xié)議作為RPC調(diào)用協(xié)議
  • redis協(xié)議如何透?jìng)黝愃苃eader的隱式參數(shù)

第一個(gè)問(wèn)題的答案也比較出乎意料,他說(shuō)是為了跨語(yǔ)言調(diào)用,當(dāng)時(shí)覺(jué)得只有http、gRPC等協(xié)議做到了跨語(yǔ)言,redis協(xié)議跨語(yǔ)言也是第一次聽(tīng)說(shuō)。但仔細(xì)一想,確實(shí)沒(méi)毛病,現(xiàn)在哪個(gè)后端語(yǔ)言沒(méi)有實(shí)現(xiàn)redis的客戶端呢?

之所以redis協(xié)議能夠做到跨語(yǔ)言,這也全仰仗它的設(shè)計(jì)非常簡(jiǎn)潔,易于實(shí)現(xiàn),詳細(xì)協(xié)議內(nèi)容可以參考這個(gè)鏈接:

http://redisdoc.com/topic/protocol.html

我就舉一個(gè)例子來(lái)證明redis協(xié)議簡(jiǎn)潔到了什么程度,這是我很久之前就關(guān)注的一個(gè)項(xiàng)目

https://github.com/jdp/redisent

它是一個(gè)php實(shí)現(xiàn)的redis客戶端,只有一個(gè)php文件,共196行,這196行包含了注釋,變量定義,鏈接建立等,真正解析協(xié)議的代碼非常少,請(qǐng)求的編碼和發(fā)送只用了17行代碼,解析返回的代碼只有58行!正如項(xiàng)目的介紹那樣:simple, no-nonsense

第二個(gè)問(wèn)題回答的和我的預(yù)期一致,從redis協(xié)議的層面暫時(shí)無(wú)法支持類似header的隱式參數(shù),但陌陌的RPC框架是自研的,所以他們?cè)诳蚣軐咏鉀Q了這個(gè)問(wèn)題,序列化他們選擇了json,如果要透?jìng)鱤eader參數(shù),框架將參數(shù)組裝到傳輸體中去。

遺憾的是dubbo中的redis協(xié)議實(shí)現(xiàn)并不完整,無(wú)法暴露redis協(xié)議,只能調(diào)用,所以測(cè)試也只能測(cè)試client連接到redis服務(wù)器進(jìn)行g(shù)et、set調(diào)用,意義不大。

總結(jié)

redis目前是個(gè)用途非常廣泛的存儲(chǔ)組件,雖然在微服務(wù)領(lǐng)域它不是主流,但這也給我們提供了一種思路,至少這條路是可以走通的。

到此這篇關(guān)于redis在微服務(wù)領(lǐng)域的貢獻(xiàn)的文章就介紹到這了,更多相關(guān)redis微服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • redisson鎖tryLock的正確使用方式

    redisson鎖tryLock的正確使用方式

    這篇文章主要介紹了redisson鎖tryLock的正確使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • redis中的常用5大數(shù)據(jù)類型

    redis中的常用5大數(shù)據(jù)類型

    這篇文章主要介紹了redis中的常用5大數(shù)據(jù)類型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • easyswoole3.5 redis使用詳細(xì)解析

    easyswoole3.5 redis使用詳細(xì)解析

    這篇文章主要介紹了easyswoole3.5 redis使用的相關(guān)知識(shí),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • Redis 存取 JSON 數(shù)據(jù)示例操作

    Redis 存取 JSON 數(shù)據(jù)示例操作

    JSON 是我們常用的數(shù)據(jù)類型,當(dāng)我們需要在Redis中保存json數(shù)據(jù)時(shí)是怎么存放的呢?一般是用String或者Hash,但還是不太方便,無(wú)法靈活的操作json 數(shù)據(jù),下面通過(guò)本文給大家介紹Redis存取JSON 數(shù)據(jù)示例操作,感興趣的的朋友一起看看吧
    2024-02-02
  • Redis刪除某個(gè)目錄下的數(shù)據(jù)的實(shí)現(xiàn)

    Redis刪除某個(gè)目錄下的數(shù)據(jù)的實(shí)現(xiàn)

    本文介紹了如何在Redis中刪除指定目錄下的數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • Redis中Scan命令的踩坑實(shí)錄

    Redis中Scan命令的踩坑實(shí)錄

    這篇文章主要給大家介紹了關(guān)于Redis中Scan命令踩坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • redis 主從備份及其主備切換的操作

    redis 主從備份及其主備切換的操作

    這篇文章主要介紹了redis 主從備份及其主備切換的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • 全網(wǎng)最完整的Redis新手入門指導(dǎo)教程

    全網(wǎng)最完整的Redis新手入門指導(dǎo)教程

    這篇文章主要給大家介紹了Redis新手入門的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • redis適合場(chǎng)景八點(diǎn)總結(jié)

    redis適合場(chǎng)景八點(diǎn)總結(jié)

    在本篇文章中我們給大家整理了關(guān)于redis適合什么場(chǎng)景的8點(diǎn)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。
    2019-06-06
  • Redis中LRU淘汰策略的深入分析

    Redis中LRU淘汰策略的深入分析

    這篇文章主要給大家介紹了關(guān)于Redis中LRU淘汰策略的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

安顺市| 衡阳市| 信丰县| 银川市| 布尔津县| 仁寿县| 顺平县| 洪湖市| 临猗县| 遵化市| 龙口市| 宜宾县| 通渭县| 黄山市| 探索| 连平县| 那曲县| 汉源县| 济宁市| 铅山县| 扶沟县| 辽中县| 天气| 丰宁| 浦北县| 什邡市| 德化县| 天津市| 札达县| 托克托县| 石河子市| 博爱县| 于都县| 镇原县| 南召县| 阳西县| 防城港市| 福安市| 新龙县| 葫芦岛市| 凭祥市|