• <strike id="fdgpu"><input id="fdgpu"></input></strike>
    <label id="fdgpu"></label>
    <s id="fdgpu"><code id="fdgpu"></code></s>

  • <label id="fdgpu"></label>
  • <span id="fdgpu"><u id="fdgpu"></u></span>

    <s id="fdgpu"><sub id="fdgpu"></sub></s>
    您當(dāng)前的位置是:  首頁 > 新聞 > 國內(nèi) >
     首頁 > 新聞 > 國內(nèi) >

    Kamailio/OpenSIPS學(xué)習(xí)筆記-使用Memcache提升注冊性能

    2018-03-30 09:44:12   作者:james.zhu   來源:Asterisk開源派   評論:0  點擊:


      Memcache 是開源軟交換模塊是用來支持SIP注冊和請求時使用的功能之一。大家知道,通常情況下,一般用戶的系統(tǒng)會使用數(shù)據(jù)庫來進行注冊和請求的發(fā)送。如果通過數(shù)據(jù)庫查詢的話,會產(chǎn)生大量的查詢數(shù)據(jù),頻率過搞的話,可能會引起數(shù)據(jù)庫負載的問題。對比頻繁的數(shù)據(jù)庫查詢,某些環(huán)境中,內(nèi)存查詢方式是一個效率比較高的方式。今天的講座中,我們使用兩種方式來演示如何使用數(shù)據(jù)庫查詢和內(nèi)存查詢方式來支持軟電話的注冊流程。
      1、在配置此示例前,用戶實現(xiàn)保證數(shù)據(jù)庫安裝配置成功,加載了必須的Memcache 模塊。Memcache 目前可以支持三中操作方式,包括
      store - cache_store()  // 保存數(shù)據(jù)
      fetch - cache_fetch() // 獲取數(shù)據(jù)
      remove - cache_remove()  // 刪除數(shù)據(jù)
      在此講座中,我們僅使用了前面2種方式。
      2、在進行測試之前,我們需要修改cfg 配置文件,幾個需要注意的地方是:
      ## 加載緩存模塊
      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ù),注冊密碼
      # 判斷是否有已保存在緩存中的密碼 ?
      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 {
      # 通過數(shù)據(jù)庫查詢認證查詢
      # 此數(shù)據(jù)庫獲取密碼
      if (!www_authorize("", "subscriber")) {
      # authentication failed -> do challenge
      www_challenge("", "0");
      exit;
      };
      # 數(shù)據(jù)庫查詢后,保存密碼
      xlog("SCRIPT: storing password <$avp(passwd)>\n");
      # 設(shè)置密碼生命周期為20 分鐘;
      cache_store("local","passwd_$tu","$avp(passwd)",1200);
      }
      3、配置成功以后,用戶可以通過軟電話來進行測試注冊流程。測試方法如下:
      首先注冊軟電話,打印mysql 日志,觀察是否是通過數(shù)據(jù)庫進行查詢?使用命令:tail /var/log/mysql/mysql.log 和 ngrep –p –q –W byline port 5060
      注冊以后,互相呼叫,然后退出注冊。
      然后再重新注冊,考察,SIP賬號是否是通過內(nèi)存查詢來獲得密碼?
      如果測試成功的話,可以看到第一次注冊使用的是數(shù)據(jù)庫查詢方式,第二次是使用的內(nèi)存查詢方式。注意,這里沒有對密碼錯誤的操作。
      4、在文章開始時,我們就簡單說明了數(shù)據(jù)庫查詢和內(nèi)存查詢的一些區(qū)別。內(nèi)存查詢方式比數(shù)據(jù)庫查詢相對比較快,如果注冊用戶在1000人以上,或者更多的用戶,我們就可以看到實際的測試效果。根據(jù)官方說明,通過數(shù)據(jù)庫查詢結(jié)合內(nèi)存查詢可以大幅降低查詢次數(shù)(可以降低大約83%),從而增加了系統(tǒng)的穩(wěn)定性,降低了系統(tǒng)的負載。
      不使用 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
      需要讀者注意的是對密碼錯誤的管理,如果用戶輸入錯誤的密碼,數(shù)據(jù)庫需要重新更新,可能需要同時刪除內(nèi)存中密碼數(shù)據(jù),保證用戶可以及時成功登錄系統(tǒng)。
      5、在本章節(jié)中,我們簡單介紹了如何通過數(shù)據(jù)庫結(jié)合內(nèi)存查詢方式來實現(xiàn)注冊請求的流程。通過以上cfg配置,在大型系統(tǒng)的應(yīng)用中,讀者可以進一步優(yōu)化數(shù)據(jù)庫查詢的負載,降低查詢次數(shù),從而來實現(xiàn)系統(tǒng)的穩(wěn)定性。
      參考資料:
      http://www.opensips.org/Documentation/Tutorials-MemoryCaching
      關(guān)注微信公眾號:asterisk-cn,獲得有價值的行業(yè)分享
      freepbx 技術(shù)論壇:www.ippbx.org.cn
      Asterisk, freepbx技術(shù)文檔: www.freepbx.org.cn
      融合通信商業(yè)解決方案,協(xié)同解決方案首選產(chǎn)品:www.hiastar.com
    【免責(zé)聲明】本文僅代表作者本人觀點,與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點判斷保持中立,不對所包含內(nèi)容的準確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

    專題

    亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 潞西市| 山阳县| 蒙山县| 建宁县| 舟曲县| 库尔勒市| 凌海市| 闽侯县| 梁山县| 石台县| 阳高县| 甘泉县| 将乐县| 平昌县| 深州市| 五莲县| 忻城县| 威宁| 农安县| 浏阳市| 长武县| 石景山区| 海口市| 滕州市| 确山县| 平武县| 沾益县| 甘泉县| 姚安县| 湖南省| 寿阳县| 应用必备| 安西县| 枣阳市| 榆树市| 自治县| 商城县| 安国市| 四会市| 工布江达县| 尤溪县| http://444 http://444 http://444 http://444 http://444 http://444