NRedis-Proxy 是一個Redis中間件服務,第一個Java 版本開源Redis中間件,無須修改業務應用程序任何代碼與配置,與業務解耦;以Spring爲基礎開發自定義標籤,讓它可配置化,使其更加容易上手;以netty 做爲通訊傳輸工具,讓它具備高性能,高併發,可分佈式擴展部署等特色,單片性能損耗約5%左右。redis
1. 自帶鏈接池,簡單穩定且性能高效算法
2. 支持讀寫分離,從讀按照權重算法後端
3. 支持靈活主從配置策略網絡
4. 默認支持一致性哈希分片策略,擴展性強架構
5. 分片策略與從讀取策略可自定義化併發
6. 支持主從自動切換,提供RedisServer監聽服務分佈式
7. 支持HA 分佈式部署,節點可隨意擴展高併發
中間件的存在,會自帶網絡損耗,可是網絡帶寬足夠,能夠忽略不計。相比客戶端分片等策略,中間件能夠解決客戶端應用過多,解決M*N 問題,Redis-Server鏈接數不夠,形成機器CPU性能下降;以下圖:工具
序號性能 |
名稱 |
描述 |
1 |
id |
Spring 標籤惟一標誌 |
2 |
redisProxyHost |
NRedis-proxy 對外提供主機號 |
3 |
redisProxyPort |
NRedis-proxy 對外提供端口號 |
4 |
algorithm-ref |
NRedis-proxy 多主分片實現類引用 |
5 |
address |
Zookpeer 地址 |
序號 |
名稱 |
描述 |
1 |
id |
Spring 標籤惟一標誌 |
2 |
host |
RedisServer主主機名 |
3 |
port |
RedisServer主端口號 |
4 |
timeout |
鏈接超時時間 |
5 |
maxActiveConnection |
最大活躍鏈接數 |
6 |
maxIdleConnection |
最大空閒鏈接數 |
7 |
minConnection |
最小鏈接數 |
8 |
algorithm-ref |
NRedis-proxy 從分片讀取策略類引用 |
序號 |
名稱 |
描述 |
1 |
id |
Spring 標籤惟一標誌 |
2 |
host |
RedisServer從主機名 |
3 |
port |
RedisServer從端口號 |
4 |
timeout |
鏈接超時時間 |
5 |
maxActiveConnection |
最大活躍鏈接數 |
6 |
maxIdleConnection |
最大空閒鏈接數 |
7 |
minConnection |
最小鏈接數 |
8 |
weight |
權重 |
當一個公司成立一個研發初始團隊,對於互聯網公司,研發時間週期短,迭代快,沒有時間與資源研發基礎中間件,若是有成熟的中間服務,不參合業務代碼,與應用解耦,讓研發專心專注研發業務自己 ,同時又可以讓後期上線業務穩定。NRedis-Proxy是一個高性能且穩定中間件服務,第一個真正意義Java 版本Redis中間件,讓研發團隊既能夠學習,又可控!
一般靜態HTML等內容,是經過CDN的部署,通常壓力不大,核心瓶頸實際上在後臺請求接口上。這個後端接口,必須可以支持高併發請求,同時,很是重要的一點,必須儘量「快」,在最短的時間裏返回用戶的請求結果。面臨下面幾個問題
1. 怎麼樣保證讀取高性能,知足高併發請求?
2. 怎麼樣保證數據一致性,保證MySQL 數據不丟失,與Redis 數據保持一致性
3. RedisServer 鏈接數不夠,應用程序RedisClient 客戶端鏈接數過多,形成Redis Server 機器CPU 性能下降,以致於Redis Server 性能低
4. Redis Server 機器性能不同,當大流量風暴 怎麼樣保障高性能RedisServer 機器 支持支撐 重要的業務實時性,高併發性
解決問題方案以下圖:
1. 怎麼樣保證讀取高性能,知足高併發請求?
使用內存級別NOSQL 數據-Redis,保障高性能高併發
2. 怎麼樣保證數據一致性,保證MySQL 數據不丟失,與Redis 數據保持一致性
使用MQ 消息以及消息冪等性,採起補償機制,記錄錯誤日誌,補寫數據,保障數據最終一致性
3. RedisServer 鏈接數不夠,應用程序RedisClient 客戶端鏈接數過多,形成Redis Server 機器CPU 性能下降,以致於Redis Server 性能低
使用NRedis-Proxy 集羣 部署,對應用程序透明化,保障鏈接數可用,避免此問題
4. Redis Server 機器性能不同,當大流量風暴 怎麼樣保障高性能RedisServer 機器 支持支撐 重要的業務實時性,高併發性
自定義Redis 分片機制,採用虛擬捅算法以及配置中心繫統,當流量一旦來臨,在快超過最大容量時,改變分片規則以及流量,把不重要的業務流量涌向低性能機器,充分利用機器性能,保障服務性能.(後續開源)
1:JDK 1.7
2:Redis-Server
3:Zookpeer3.4.6
1. 啓動Redis Server 主機器
2. 啓動Redis Server
3. 啓動 zookpeer
4. 啓動NRedis-Proxy Server
5:使用Redis 命令行鏈接NRedis-Proxy
4. 部署方式
執行nredis-proxy-sample 中 sing.sh 文件
8、NRedis-Proxy 將來規劃
1:Redis Server 集羣監控報警
2:NRedis-Proxy頁面可控制流量以及RedisServer主從切換
9、項目地址