nredis-proxy 高性能Redis 服務中間件

1、 NRedis-Proxy 介紹

NRedis-Proxy 是一個Redis中間件服務,第一個Java 版本開源Redis中間件,無須修改業務應用程序任何代碼與配置,與業務解耦;以Spring爲基礎開發自定義標籤,讓它可配置化,使其更加容易上手;以netty 做爲通訊傳輸工具,讓它具備高性能,高併發,可分佈式擴展部署等特色,單片性能損耗約5%左右。redis

2、 NRedis-Proxy 技術架構圖

3、 NRedis-Proxy 優點以及缺點

a)      功能優點

            1.        自帶鏈接池,簡單穩定且性能高效算法

            2.        支持讀寫分離,從讀按照權重算法後端

            3.        支持靈活主從配置策略網絡

            4.        默認支持一致性哈希分片策略,擴展性強架構

            5.        分片策略與從讀取策略可自定義化併發

            6.        支持主從自動切換,提供RedisServer監聽服務分佈式

            7.        支持HA 分佈式部署,節點可隨意擴展高併發

b)     自然缺點

中間件的存在,會自帶網絡損耗,可是網絡帶寬足夠,能夠忽略不計。相比客戶端分片等策略,中間件能夠解決客戶端應用過多,解決M*N 問題,Redis-Server鏈接數不夠,形成機器CPU性能下降;以下圖:工具

4、 NRedis-Proxy 類邏輯調用圖

5、 NRedis-Proxy 配置標籤

a)      redisProxyNode

            

序號性能

            名稱

描述

1

id

Spring 標籤惟一標誌

2

redisProxyHost

NRedis-proxy 對外提供主機號

3

redisProxyPort

NRedis-proxy 對外提供端口號

4

algorithm-ref

NRedis-proxy 多主分片實現類引用

5

address

Zookpeer 地址

 

b)     redisProxyMaster

序號

名稱

描述

1

id

Spring 標籤惟一標誌

2

host

RedisServer主主機名

3

port

RedisServer主端口號

4

timeout

鏈接超時時間

5

maxActiveConnection

最大活躍鏈接數

6

maxIdleConnection

最大空閒鏈接數

7

minConnection

最小鏈接數

8

algorithm-ref

NRedis-proxy 從分片讀取策略類引用

 

c)      redisProxyCluster

序號

名稱

描述

1

id

Spring 標籤惟一標誌

2

host

RedisServer從主機名

3

port

RedisServer從端口號

4

timeout

鏈接超時時間

5

maxActiveConnection

最大活躍鏈接數

6

maxIdleConnection

最大空閒鏈接數

7

minConnection

最小鏈接數

8

weight

權重

d)     默認兩個分片策略

6、 NRedis-Proxy 使用場景

a)      項目初始團隊

   當一個公司成立一個研發初始團隊,對於互聯網公司,研發時間週期短,迭代快,沒有時間與資源研發基礎中間件,若是有成熟的中間服務,不參合業務代碼,與應用解耦,讓研發專心專注研發業務自己 ,同時又可以讓後期上線業務穩定。NRedis-Proxy是一個高性能且穩定中間件服務,第一個真正意義Java 版本Redis中間件,讓研發團隊既能夠學習,又可控!

b)     秒殺場景,應用服務較多,RedisServer較少

 

一般靜態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 分片機制,採用虛擬捅算法以及配置中心繫統,當流量一旦來臨,在快超過最大容量時,改變分片規則以及流量,把不重要的業務流量涌向低性能機器,充分利用機器性能,保障服務性能.(後續開源)

 

 

7、 NRedis-Proxy 部署

1.      部署架構圖

2.      部署環境要求

1:JDK 1.7

2:Redis-Server

3:Zookpeer3.4.6

3.      調試步驟

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、項目地址

 http://www.oschina.net/p/nredis-proxy

相關文章
相關標籤/搜索