1、在配置此示例前,用戶實(shí)現(xiàn)保證數(shù)據(jù)庫(kù)安裝配置成功,加載了必須的Memcache 模塊。Memcache 目前可以支持三中操作方式,包括
store - cache_store() // 保存數(shù)據(jù)
fetch - cache_fetch() // 獲取數(shù)據(jù)
remove - cache_remove() // 刪除數(shù)據(jù)
在此講座中,我們僅使用了前面2種方式。
2、在進(jìn)行測(cè)試之前,我們需要修改cfg 配置文件,幾個(gè)需要注意的地方是:
## 加載緩存模塊
loadmodule "cachedb_local.so"
##調(diào)用功能
modparam("auth","username_spec","$avp(userspec)")
modparam("auth","password_spec","$avp(passwd)")
modparam("auth","calculate_ha1",1)
modparam("auth_db", "load_credentials", "$avp(passwd)=password")
##保存緩存數(shù)據(jù),注冊(cè)密碼
# 判斷是否有已保存在緩存中的密碼 ?
if(cache_fetch("local","passwd_$tu",$avp(passwd))) {
$avp(userspec) = $tU;
xlog("SCRIPT: stored password is $avp(passwd)\n"); // 打印日志
# $avp(userspec) 包含用戶名
# $avp(passwd) 包含用戶密碼
if (!pv_www_authorize("")) {
# authentication failed -> do challenge
www_challenge("", "0");
exit;
};
} else {
# 通過(guò)數(shù)據(jù)庫(kù)查詢認(rèn)證查詢
# 此數(shù)據(jù)庫(kù)獲取密碼
if (!www_authorize("", "subscriber")) {
# authentication failed -> do challenge
www_challenge("", "0");
exit;
};
# 數(shù)據(jù)庫(kù)查詢后,保存密碼
xlog("SCRIPT: storing password <$avp(passwd)>\n");
# 設(shè)置密碼生命周期為20 分鐘;
cache_store("local","passwd_$tu","$avp(passwd)",1200);
}
3、配置成功以后,用戶可以通過(guò)軟電話來(lái)進(jìn)行測(cè)試注冊(cè)流程。測(cè)試方法如下:
首先注冊(cè)軟電話,打印mysql 日志,觀察是否是通過(guò)數(shù)據(jù)庫(kù)進(jìn)行查詢?使用命令:tail /var/log/mysql/mysql.log 和 ngrep –p –q –W byline port 5060
注冊(cè)以后,互相呼叫,然后退出注冊(cè)。
然后再重新注冊(cè),考察,SIP賬號(hào)是否是通過(guò)內(nèi)存查詢來(lái)獲得密碼?
如果測(cè)試成功的話,可以看到第一次注冊(cè)使用的是數(shù)據(jù)庫(kù)查詢方式,第二次是使用的內(nèi)存查詢方式。注意,這里沒(méi)有對(duì)密碼錯(cuò)誤的操作。
4、在文章開(kāi)始時(shí),我們就簡(jiǎn)單說(shuō)明了數(shù)據(jù)庫(kù)查詢和內(nèi)存查詢的一些區(qū)別。內(nèi)存查詢方式比數(shù)據(jù)庫(kù)查詢相對(duì)比較快,如果注冊(cè)用戶在1000人以上,或者更多的用戶,我們就可以看到實(shí)際的測(cè)試效果。根據(jù)官方說(shuō)明,通過(guò)數(shù)據(jù)庫(kù)查詢結(jié)合內(nèi)存查詢可以大幅降低查詢次數(shù)(可以降低大約83%),從而增加了系統(tǒng)的穩(wěn)定性,降低了系統(tǒng)的負(fù)載。
不使用 Memory Caching
1000 users, per day : 1000 * 3 * 24 = 72000 queries per day for auth
使用Memory Caching
1000 * 0.5 * 24 = 12000 queries per day for auth
需要讀者注意的是對(duì)密碼錯(cuò)誤的管理,如果用戶輸入錯(cuò)誤的密碼,數(shù)據(jù)庫(kù)需要重新更新,可能需要同時(shí)刪除內(nèi)存中密碼數(shù)據(jù),保證用戶可以及時(shí)成功登錄系統(tǒng)。
5、在本章節(jié)中,我們簡(jiǎn)單介紹了如何通過(guò)數(shù)據(jù)庫(kù)結(jié)合內(nèi)存查詢方式來(lái)實(shí)現(xiàn)注冊(cè)請(qǐng)求的流程。通過(guò)以上cfg配置,在大型系統(tǒng)的應(yīng)用中,讀者可以進(jìn)一步優(yōu)化數(shù)據(jù)庫(kù)查詢的負(fù)載,降低查詢次數(shù),從而來(lái)實(shí)現(xiàn)系統(tǒng)的穩(wěn)定性。
參考資料:
http://www.opensips.org/Documentation/Tutorials-MemoryCaching
關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享
freepbx 技術(shù)論壇:www.ippbx.org.cn
Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com