新聞中心
利用Redis灰度庫實(shí)現(xiàn)應(yīng)用灰度發(fā)布

創(chuàng)新互聯(lián)自2013年創(chuàng)立以來,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元巴楚做網(wǎng)站,已為上家服務(wù),為巴楚各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
應(yīng)用灰度發(fā)布是指在發(fā)布新版本的應(yīng)用時,僅僅對一部分用戶進(jìn)行測試和觀察,通過相互交流和觀察,確認(rèn)網(wǎng)站新版本所存在的問題,并及時處理,最終把新版本完美地發(fā)布到所有用戶手中?;叶劝l(fā)布能夠降低新版本發(fā)布的風(fēng)險,保證數(shù)據(jù)的完整性,縮短恢復(fù)時間。Redis是一種高性能的NoSQL數(shù)據(jù)庫,它提供了高速讀寫的能力,使其在應(yīng)用灰度發(fā)布過程中起到了極為重要的作用。
1、Redis在應(yīng)用灰度發(fā)布中的優(yōu)點(diǎn)
Redis在應(yīng)用灰度發(fā)布中的優(yōu)點(diǎn)主要體現(xiàn)在以下幾個方面:
(1)高度可擴(kuò)展性:Redis采用主從模式和集群模式,可以擴(kuò)展到成百上千個節(jié)點(diǎn)上,從而降低請求的響應(yīng)時間和增大應(yīng)對請求的容量,使得應(yīng)用的性能更加優(yōu)良;
(2)高速讀寫性能:由于采用了基于內(nèi)存的存儲方式,并且采用了多線程模式,因此,Redis在讀寫方面具有很高的速度,適合于多種大規(guī)模的高性能應(yīng)用場景;
(3)多種數(shù)據(jù)類型:Redis支持多種數(shù)據(jù)類型,包括字符串、哈希、列表、集合、有序集合等等,使得應(yīng)用在灰度發(fā)布過程中更加靈活和多樣化;
(4)定制化:Redis提供基于事件驅(qū)動和Lua腳本方式的自定義事件處理和自定義數(shù)據(jù)操作方式,從而使得應(yīng)用在灰度發(fā)布過程中更加簡單和自由。
2、利用redis灰度庫實(shí)現(xiàn)應(yīng)用灰度發(fā)布的流程
(1)設(shè)置分組命中率
在實(shí)現(xiàn)應(yīng)用灰度發(fā)布的過程中,只有特定比例的用戶可以獲得新版本應(yīng)用,在Redis中實(shí)現(xiàn)灰度發(fā)布的第一步是,給用戶設(shè)置分組的命中率。所有的用戶會隨機(jī)分為五組,每組的命中率分別是:1%、3%、9%、27%、60%。為簡化模擬,同一個用戶通過一個UID的形式用來記錄命中或不命中的情況,并將UID填入Redis中:
import redis
import random
def set_user_GROUP():
R = redis.Redis(host=’127.0.0.1′, port=6379, db=0)
for i in range(10000):
uid = str(i)
rate = random.random()
if rate
group = ‘group4’
elif rate
group = ‘group3’
elif rate
group = ‘group2’
elif rate
group = ‘group1’
else:
group = ‘group0’
R.set(uid, group)
(2)實(shí)現(xiàn)灰度發(fā)布控制
在實(shí)現(xiàn)應(yīng)用灰度發(fā)布的過程中,我們需要對新版本應(yīng)用根據(jù)上面步驟得到的分組命中率進(jìn)行控制,只有特定比例的用戶可以獲得新版本應(yīng)用。下面我們來演示碎片取模的方式實(shí)現(xiàn)控制:
import redis
def get_user_group():
R = redis.Redis(host=’127.0.0.1′, port=6379, db=0)
groups = [‘group0’, ‘group1’, ‘group2’, ‘group3’, ‘group4’]
group_count = {}
group_mods = {}
for group in groups:
group_mods[group] = 0
for uid in R.keys():
if R.get(uid) == group:
if group not in group_count:
group_count[group] = 0
group_count[group] += 1
group_mods[group] += hash(uid)
max_judgment = 0
new_group = ”
for group in groups:
judgment = float(group_count[group]) / float(group_mods[group])
if judgment > max_judgment:
max_judgment = judgment
new_group = group
return new_group
目的是借助Redis提供的快速讀寫的能力,快速執(zhí)行碎片取模的方式,調(diào)整用戶分組的機(jī)制,從而提升控制的效果,并在新分組中的用戶中,隨機(jī)選擇一個命中率,如果選定的命中率低于實(shí)際應(yīng)選的命中率,則該用戶不獲得新版本應(yīng)用,并將UID記錄在Redis中。
(3)實(shí)現(xiàn)新版本應(yīng)用發(fā)布
在完成以上的過程后,我們可以在控制時開放新版本應(yīng)用,并且使用與舊版本應(yīng)用不同的端口。而新舊版本應(yīng)用之間的差別大部分都是通過客戶端實(shí)現(xiàn),因此在較遲的時間點(diǎn),可以逐漸將新版本應(yīng)用替換舊版本應(yīng)用。
在應(yīng)用灰度發(fā)布中,Redis提供了高效的速度和靈活多樣的數(shù)據(jù)類型,方便實(shí)現(xiàn)命中率設(shè)置、灰度發(fā)布控制、新版應(yīng)用發(fā)布等一系列灰度發(fā)布工作,從而幫助企業(yè)在影響用戶最小的情況下擴(kuò)大應(yīng)用測試范圍,縮短發(fā)布時間,提高業(yè)務(wù)系統(tǒng)的可用性和穩(wěn)定性,實(shí)現(xiàn)了更高效、更安全的灰度發(fā)布方式。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務(wù)眾多企業(yè)。電話:028-86922220
分享題目:利用Redis灰度庫實(shí)現(xiàn)應(yīng)用灰度發(fā)布(redis灰度庫)
分享網(wǎng)址:http://m.fisionsoft.com.cn/article/djhecoj.html


咨詢
建站咨詢
