Redis是壹個基於內存、持久日誌類型、鍵值數據庫的高性能存儲系統,並提供多種語言的API。
第二:背景。
數據結構需求越來越多,memcache中卻沒有,影響了開發效率。
隨著讀取操作量的增加,需要解決性能要求,經歷的過程如下:
數據庫讀寫分離(M/S)-》數據庫使用多個從服務器-》增加高速緩存(memcache)-》轉到Redis
解決寫作問題:
水平拆分,拆分表,將壹些用戶放在這個表中,將壹些用戶放在另壹個表中;
可靠性要求?
緩存的“雪崩”問題是否令人困惑?
緩存面臨快速恢復的挑戰。
開發成本要求?
維護緩存和DB壹致性的成本越來越高(先清理DB,再清理緩存,不行,太慢了!)?
發展是否需要跟上不斷增長的產品需求?
硬件成本最貴的是數據庫級別的機器,基本上比前端機器貴幾倍。它主要是IO密集型的,消耗硬件。
維護復雜性?
壹致性維護成本越來越高;?
BerkeleyDB使用B-tree,會壹直寫新的,內部不會有文件重組;這將導致文件越來越大;大了需要建檔,建檔操作要定期做;?
這樣,妳需要有壹定的停機時間;;
基於以上考慮,選擇了Redis。
第三,Redis在新浪微博中的應用。
Redis簡介
1.支持五種數據結構。
支持字符串,散列,列表,集合,排序集?
字符串是計數存儲的壹種很好的存儲方法。Sets非常適合構建索引庫;
2.K-V存儲與K-V緩存
目前新浪微博使用的應用98%是持久應用,2%是緩存,使用600+服務器?
Redis中的持久化應用和非持久化方式沒有太大區別:?
非持久是8-9萬tps,那麽持久大概是7-8萬TPS;?
在使用持久化時,需要考慮持久化與寫入性能的比值,即需要考慮redis使用的內存大小與硬盤寫入速度比值的計算;
3.活躍社區
目前Redis有3萬多行代碼,代碼簡潔,有很多巧妙的實現。作者有技術潔癖嗎?
Redis的社區活躍度很高,是衡量開源軟件質量的重要指標。在開源軟件的起步階段,壹般沒有商業化的技術服務支持。如果沒有活躍的社區支持,遇到問題時就無處求助。
Redis基本原則
Redis持久性(aof)附加在線文件:?
寫日誌(aof),在壹定程度上與內存合並,追加和追加,順序寫入磁盤,對性能影響不大。
1.單實例單流程
Redis使用單個進程,因此在配置時,壹個實例將只使用壹個CPU;?
配置時,如果需要最大化Cpu利用率,可以配置與CPU數量對應的Redis實例數量和與端口數量對應的Redis實例數量(8核CPU,8個實例,8個端口),以提高並發性。
單機測試時單機數據為200字節,測試結果為80,000 ~ 90,000 tps。
2.分身術
過程:將數據寫入主機–》主機存儲在從機的rdb中–》從機將rdb加載到內存中。?
保存點:網絡斷開時,連接後繼續傳輸。
主從方式下的第壹次同步是完全傳輸,隨後是增量同步;、
3.數據壹致性
長期運行後多個節點之間存在不壹致的可能性;?
開發兩個工具程序:?
1.對於數據量較大的數據,會定期進行全量檢查;?
2.實時檢查增量數據的壹致性;
主庫與從庫不能及時同步所導致的不壹致稱為延遲問題;?
對於壹致性要求不那麽嚴格的場景,我們只需要保證最終的壹致性即可;?
對於延遲問題,需要分析業務場景的特點,從應用層面添加策略來解決這壹問題;?
比如:?
1.新註冊的用戶必須首先查詢主圖書館;?
2.註冊成功後需要等待3s後才能跳轉,此時後臺正在做數據同步。
第四,分布式緩存的架構設計。
1.建築設計
因為redis是單點,需要在項目中使用,必須自己分發。基本架構圖如下:
2.分布式實現
通過key的壹致性哈希,實現了key對應的redis節點的分布。
壹致散列的實現;
Lhash值計算:通過支持MD5和MurmurHash,默認采用MurmurHash這種高效的哈希計算方式。
l壹致性的實現:通過java的TreeMap模擬環形結構,實現均勻分布。
3.3 .客戶的選擇
jedis的修改主要是分區模塊的修改,使其支持根據BufferKey進行分區,並且可以根據不同的redis節點信息初始化不同的ShardInfo。同時修改了JedisPool的底層實現,使其連接池支持key和value的構造方法,可以根據不同的shardinfo創建不同的jedis連接客戶端,達到分區供應用層調用的效果。
4.模塊的描述
l臟數據處理模塊,用於處理失敗的緩存操作。
l屏蔽監控模塊,監控jedis操作的異常,當某個節點異常時,可以控制redis節點的切除等操作。
整個分布式模塊通過hornetq切斷異常redis節點。對於新節點的添加,您還可以通過reload方法添加它們。(該模塊也可以輕松實現以添加節點。)
上述分布式架構的實現滿足了項目的需求。此外,對於壹些重要的緩存數據,可以單獨設置壹些redis節點來設置特定的優先級。此外,對於緩存接口的設計,我們還可以根據需要實現基本接口和壹些特殊的邏輯接口。對於cas相關的操作,以及壹些東西,操作都可以通過它的watch機制來實現。
免責聲明:所有博客都為分布式框架服務。作為框架的技術支撐和解釋,該框架面向企業,是壹個大規模的互聯網分布式企業架構。稍後將介紹在linux上部署高可用性集群的項目。