亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

bawn / 1320人閱讀

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

1. 需求分析

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

支持客戶端緩存功能,并且支持斷電重啟(內(nèi)存緩存+文件緩存)

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

這個點其實設(shè)計的并不好,最好是開啟一個長鏈接,由服務(wù)端推送請求是最佳實現(xiàn),但是因為配置中心和客戶端之間有一個中間層,無法實現(xiàn)長鏈接,不過這兩個在實現(xiàn)上是類似的

2. 任務(wù)分解

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

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

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

針對緩存設(shè)計

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

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

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

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

輪詢方法

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

這里我做的輪詢邏輯其實非常簡單過程如下

拿到需要進行輪詢隊列

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

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

還需要那些改進?

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

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

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

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

相關(guān)文章

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

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

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

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

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

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

    codeKK 評論0 收藏0

發(fā)表評論

0條評論

bawn

|高級講師

TA的文章

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