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

資訊專欄INFORMATION COLUMN

架構(gòu)設(shè)計(jì)-我的一個(gè)支持異步拉取數(shù)據(jù)和本地緩存client是如何設(shè)計(jì)的

bawn / 1261人閱讀

最近的工作內(nèi)容是封裝一個(gè)高性能的sdk,以便和我們的配置中心進(jìn)行交互,這里整理一下我是如何設(shè)計(jì)

1. 需求分析

我們要支持和配置中心的交互(網(wǎng)絡(luò)IO)

支持客戶端緩存功能,并且支持?jǐn)嚯娭貑ⅲ▋?nèi)存緩存+文件緩存)

配置中心沒有推送功能,sdk需要進(jìn)行輪詢(使用NIO網(wǎng)絡(luò)模型進(jìn)行輪詢)

這個(gè)點(diǎn)其實(shí)設(shè)計(jì)的并不好,最好是開啟一個(gè)長(zhǎng)鏈接,由服務(wù)端推送請(qǐng)求是最佳實(shí)現(xiàn),但是因?yàn)榕渲弥行暮涂蛻舳酥g有一個(gè)中間層,無法實(shí)現(xiàn)長(zhǎng)鏈接,不過這兩個(gè)在實(shí)現(xiàn)上是類似的

2. 任務(wù)分解

針對(duì)網(wǎng)絡(luò)IO 提供兩套模型

當(dāng)緩存中沒有所需要的數(shù)據(jù)的時(shí)候,使用BIO直接讀服務(wù)端(緩存擊穿)

當(dāng)緩存的存在的時(shí)候, 將緩存的數(shù)據(jù)添加到輪詢隊(duì)列中,等待下一次異步同步更新

針對(duì)緩存設(shè)計(jì)

內(nèi)存緩存:除了需要提供一個(gè)數(shù)據(jù)緩存,還需要提供一個(gè)狀態(tài)同步集合來標(biāo)記緩存中數(shù)據(jù)的狀態(tài),比如是否超時(shí),是否有效等

針對(duì)這個(gè)情況我們需要實(shí)現(xiàn)一個(gè)功能類---狀態(tài)處理類,通過這個(gè)類來處理緩存中狀態(tài)同步集合的狀態(tài),并同步處理數(shù)據(jù)緩存對(duì)應(yīng)的狀態(tài)

ps : 為什么設(shè)計(jì)成數(shù)據(jù)和狀態(tài)分離 -> 為了更高的可控性和解藕 1.如果需要狀態(tài)特殊處理的時(shí)候只需要拿出狀態(tài)隊(duì)列就可以進(jìn)行處理了不需要?jiǎng)泳彺?2. 如果狀態(tài)需要添加字段或者邏輯,只需要修改對(duì)應(yīng)的狀態(tài)隊(duì)列即可,不需要修改數(shù)據(jù)緩存

文件緩存: 這個(gè)本質(zhì)上很內(nèi)存緩存相似,只有一個(gè)點(diǎn)就是當(dāng)使用nio進(jìn)行數(shù)據(jù)同步的時(shí)候,nio從網(wǎng)絡(luò)中拉取的新數(shù)據(jù)需要同步更新緩存和文件,此時(shí)的文件操作應(yīng)該使用nio保證不堵塞。

輪詢方法

我在框架中使用的NIO網(wǎng)絡(luò)框架是vert.x 其實(shí)可以理解成java中的promise方法

這里我做的輪詢邏輯其實(shí)非常簡(jiǎn)單過程如下

拿到需要進(jìn)行輪詢隊(duì)列

for循環(huán)發(fā)起NIO網(wǎng)絡(luò)請(qǐng)求,并且處理結(jié)果

更新緩存狀態(tài)(更新緩存,處理超時(shí)等問題)

還需要那些改進(jìn)?

需要添加一個(gè)速率控制器,考慮這樣一個(gè)場(chǎng)景如果輪詢發(fā)起的請(qǐng)求過大,將可能會(huì)把配置中心打垮,所以sdk需要控制請(qǐng)求的速率動(dòng)態(tài)的調(diào)整qps來保證服務(wù)的穩(wěn)定。

3. sdk整體的架構(gòu)圖如下

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

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

相關(guān)文章

  • 分布式配置系統(tǒng)Apollo如何實(shí)時(shí)更新配置

    摘要:我們是不是很好奇配置中心如何做到實(shí)時(shí)更新并且通知到客戶端的這也是一個(gè)面試中經(jīng)常會(huì)問到的題目。客戶端得到狀態(tài)碼是并且會(huì)根據(jù)立即去服務(wù)端拉取最新的配置。引言 記得我們那時(shí)候剛開始學(xué)習(xí)Java的時(shí)候都只是一個(gè)單體項(xiàng)目,項(xiàng)目里面的配置基本都是寫在項(xiàng)目里面的properties文件中,比如數(shù)據(jù)庫(kù)配置啥的,各種邏輯開關(guān),一旦這些配置修改了,還需要重啟項(xiàng)目這修改才會(huì)生效。隨著各種微服務(wù)的誕生,服務(wù)的...

    NicolasHe 評(píng)論0 收藏0
  • 攜程一面:分布式配置系統(tǒng)Apollo如何實(shí)時(shí)更新配置?

    摘要:我們是不是很好奇配置中心如何做到實(shí)時(shí)更新并且通知到客戶端的這也是一個(gè)面試中經(jīng)常會(huì)問到的題目。雖然是攜程開源的,但是攜程內(nèi)部也不用它??蛻舳说玫綘顟B(tài)碼是并且會(huì)根據(jù)立即去服務(wù)端拉取最新的配置。通過定時(shí)任務(wù)的補(bǔ)充,可以讓配置達(dá)到最終的一致性。 引言記得我們那時(shí)候剛開始學(xué)習(xí)Java的時(shí)候都只是一個(gè)單體項(xiàng)目,項(xiàng)目里面的配...

    asce1885 評(píng)論0 收藏0
  • API網(wǎng)關(guān)如何實(shí)現(xiàn)對(duì)服務(wù)下線實(shí)時(shí)感知

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

    codeKK 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

bawn

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<