受飛凡電商技術(shù)負(fù)責(zé)人劉兵先生的獨(dú)家授權(quán),在csdn博客我原創(chuàng)發(fā)表《NRedis-Proxy 高性能Redis 中間件服務(wù)》的架構(gòu)原理,以及項(xiàng)目開(kāi)源介紹。
一、 NRedis-Proxy 介紹
NRedis-Proxy 是一個(gè)Redis中間件服務(wù),第一個(gè)Java 版本開(kāi)源Redis中間件,無(wú)須修改業(yè)務(wù)應(yīng)用程序任何代碼與配置,與業(yè)務(wù)解耦;以Spring為基礎(chǔ)開(kāi)發(fā)自定義標(biāo)簽,讓它可配置化,使其更加容易上手;以netty 作為通信傳輸工具,讓它具有高性能,高并發(fā),可分布式擴(kuò)展部署等特點(diǎn),單片性能損耗約5%左右。
二、 NRedis-Proxy 技術(shù)架構(gòu)圖
三、NRedis-Proxy 優(yōu)勢(shì)以及缺點(diǎn)
a) 功能優(yōu)勢(shì) 1. 自帶連接池,簡(jiǎn)單穩(wěn)定且性能高效 2. 支持讀寫(xiě)分離,從讀按照權(quán)重算法 3. 支持靈活主從配置策略 4. 默認(rèn)支持一致性哈希分片策略,擴(kuò)展性強(qiáng) 5. 分片策略與從讀取策略可自定義化 6. 支持主從自動(dòng)切換,提供RedisServer監(jiān)聽(tīng)服務(wù) 7. 支持HA 分布式部署,節(jié)點(diǎn)可隨意擴(kuò)展
b) 天然缺點(diǎn) 中間件的存在,會(huì)自帶網(wǎng)絡(luò)損耗,但是網(wǎng)絡(luò)帶寬足夠,可以忽略不計(jì)。相比客戶端分片等策略,中間件可以解決客戶端應(yīng)用過(guò)多,解決M*N 問(wèn)題,Redis-Server連接數(shù)不夠,造成機(jī)器CPU性能降低;如下圖:
四、NRedis-Proxy 類邏輯調(diào)用圖
五、 NRedis-Proxy 配置標(biāo)簽
1、redisProxyNode
2、redisProxyMaster
3、redisProxyCluster
4、默認(rèn)兩個(gè)分片策略
六、NRedis-Proxy 使用場(chǎng)景
1、項(xiàng)目初始團(tuán)隊(duì) 當(dāng)一個(gè)公司成立一個(gè)研發(fā)初始團(tuán)隊(duì),對(duì)于互聯(lián)網(wǎng)公司,研發(fā)時(shí)間周期短,迭代快,沒(méi)有時(shí)間與資源研發(fā)基礎(chǔ)中間件,如果有成熟的中間服務(wù),不參合業(yè)務(wù)代碼,與應(yīng)用解耦,讓研發(fā)專心專一研發(fā)業(yè)務(wù)本身 ,同時(shí)又能夠讓后期上線業(yè)務(wù)穩(wěn)定。NRedis-Proxy是一個(gè)高性能且穩(wěn)定中間件服務(wù),第一個(gè)真正意義Java 版本Redis中間件,讓研發(fā)團(tuán)隊(duì)既可以學(xué)習(xí),又可控!
2、秒殺場(chǎng)景,應(yīng)用服務(wù)較多,RedisServer較少
1、怎么樣保證讀取高性能,滿足高并發(fā)請(qǐng)求?
2.、怎么樣保證數(shù)據(jù)一致性,保證MySQL 數(shù)據(jù)不丟失,與Redis 數(shù)據(jù)保持一致性
3、 RedisServer 連接數(shù)不夠,應(yīng)用程序RedisClient 客戶端連接數(shù)過(guò)多,造成 Redis Server 機(jī)器CPU 性能降低,以至于Redis Server 性能低
4.、Redis Server 機(jī)器性能不一樣,當(dāng)大流量風(fēng)暴 怎么樣保障高性能RedisServer 機(jī)器 支持支撐 重要的業(yè)務(wù)實(shí)時(shí)性,高并發(fā)性
解決問(wèn)題方案如下圖:
2、怎么樣保證數(shù)據(jù)一致性,保證MySQL 數(shù)據(jù)不丟失,與Redis 數(shù)據(jù)保持一致性 使用MQ 消息以及消息冪等性,采取補(bǔ)償機(jī)制,記錄錯(cuò)誤日志,補(bǔ)寫(xiě)數(shù)據(jù),保障數(shù)據(jù)最終一致性
3、RedisServer 連接數(shù)不夠,應(yīng)用程序RedisClient 客戶端連接數(shù)過(guò)多,造成Redis Server 機(jī)器CPU 性能降低,以至于Redis Server 性能低 使用NRedis-Proxy 集群 部署,對(duì)應(yīng)用程序透明化,保障連接數(shù)可用,避免此問(wèn)題
4、Redis Server 機(jī)器性能不一樣,當(dāng)大流量風(fēng)暴 怎么樣保障高性能RedisServer 機(jī)器 支持支撐 重要的業(yè)務(wù)實(shí)時(shí)性,高并發(fā)性 自定義Redis 分片機(jī)制,采用虛擬捅算法以及配置中心系統(tǒng),當(dāng)流量一旦來(lái)臨,在快超過(guò)最大容量時(shí),改變分片規(guī)則以及流量,把不重要的業(yè)務(wù)流量涌向低性能機(jī)器,充分利用機(jī)器性能,保障服務(wù)性能.(后續(xù)開(kāi)源)
七、NRedis-Proxy 部署
1、部署架構(gòu)圖
2、部署環(huán)境要求 JDK 1.7 Redis-Server Zookpeer3.4.6
3、調(diào)試步驟 a、啟動(dòng)Redis Server 主機(jī)器
b、啟動(dòng)Redis Server
c、啟動(dòng) zookpeer
d、啟動(dòng)NRedis-Proxy Server
e、使用Redis 命令行連接NRedis-Proxy
g、部署方式 執(zhí)行nredis-proxy-sample 中 sing.sh 文件
八、 NRedis-Proxy 未來(lái)規(guī)劃
1、Redis Server 集群監(jiān)控報(bào)警 2、NRedis-Proxy頁(yè)面可控制流量以及RedisServer主從切換
九、項(xiàng)目開(kāi)源地址