中文字幕无码久久精品,13—14同岁无码A片,99热门精品一区二区三区无码,菠萝菠萝蜜在线观看视频高清1

您當(dāng)前的位置是:  首頁 > 資訊 > 文章精選 >
 首頁 > 資訊 > 文章精選 >

OpenSIPS學(xué)習(xí)筆記-淺析如何使用MemCache優(yōu)化系統(tǒng)性能

2021-02-01 13:48:53   作者: james.zhu    來源:Asterisk開源派   評論:0  點(diǎn)擊:


  作為一個SIP信令服務(wù)器,因為需要承載運(yùn)營級的語音呼叫,OpenSIPS的性能是大家非常關(guān)心的問題。根據(jù)維基百科中的計算機(jī)基準(zhǔn)測試七大類型的測試類型中,如果要討論關(guān)于計算機(jī)的基準(zhǔn)測試時,我們需要涵蓋以上七類的測試。這里,我們重點(diǎn)討論關(guān)于IO,數(shù)據(jù)庫和軟件本身的性能測試討論。在其他的具體的測試場景中,技術(shù)研究人員也仍然遵從以上原則不斷進(jìn)行評測。哈佛大學(xué)研究人員J. Bradley Chen等研究人員早期發(fā)表的論文-The Measured Performance of Personal Computer Operating Systems是比較經(jīng)典的關(guān)于個人計算機(jī)測試的論文,他們也是從內(nèi)存訪問,文件讀取,平臺等方面做的研究,如果讀者有興趣的話,可以查看文章鏈接來學(xué)習(xí)。
  關(guān)于針對OpenSIPS性能優(yōu)化的討論中,無論從早期的研究還是當(dāng)前的研究中,大家對優(yōu)化的手段仍然集中在數(shù)據(jù)庫處理,CPU消耗和存儲設(shè)備的處理上。因為技術(shù)的不斷進(jìn)步和其他軟件手段的更新和資源的關(guān)系,一些優(yōu)化手段也逐漸被引入,包括了分布式部署,云計算的其他工具。因為本人能力和資源有限,筆者不可能涉及太多的討論,我們僅簡單討論通過自己資源可以優(yōu)化的方式,以便幫助讀者能夠?qū)penSIPS的優(yōu)化有一個非常基本的認(rèn)識,也是對OpenSIPS的性能做一個比較淺顯的分析。這里,筆者首先介紹了關(guān)于OpenSIPS的早期版本OpenSERR的優(yōu)化研究成果的背景介紹,然后介紹了關(guān)于MYSQL如何影響OpenSIPS的性能,接下來介紹了使用內(nèi)存做某些模塊優(yōu)化的概念,最后介紹了如何使用Cache實現(xiàn)SIP用戶注冊的示例實踐。
  測試前說明,如果用戶沒有安裝OpenSIPS和MYSQL數(shù)據(jù)庫的話,筆者不再介紹如何安裝OpenSIPS和mysql數(shù)據(jù)庫,用戶需要首先安裝OpenSIPS和MYSQL環(huán)境,然后再進(jìn)行下面的示例測試。具體安裝配置方式,讀者可以參考:
  最完整快速的安裝方式安裝開源OpenSIPS-3.1和CP控制界面-class 8
  如何使用OpenSIPS實現(xiàn)呼叫隊列/hunt group
  1關(guān)于OpenSIPS的性能研究背景介紹
  在早期的OpenSER(OpenSIPS/Kamailio前身)版本使用中,一些研究人員一直對其服務(wù)器的性能數(shù)據(jù)庫的使用做不同環(huán)境的研究,其中對數(shù)據(jù)庫和CPU操作的研究做了很多工作,研究人員也提出了很多有價值的建議和測試結(jié)果。除了官方的測試文檔以外,個人覺得幾位研究人員的論文也值得參考。C. P. Wright就在OpenSER的早期版本針對不同的硬件平臺和不同的mysql數(shù)據(jù)庫的處理發(fā)布了關(guān)于SIP server performance on multicore systems的論文。如果讀者對此論文有興趣的話,可以參考此另外作為一個理論支撐來優(yōu)化自己的系統(tǒng)。
  此圖片以及以下圖片均來自于互聯(lián)網(wǎng)資源
  Charles Shen和其他研究人員針對OpenSIPS的TLS加密對OpenSIPS的影響做了一個研究(The Impact of TLS on SIP Server Performance),通過其研究結(jié)果我們?nèi)匀豢梢钥吹结槍PU的性能的測試數(shù)據(jù)。
  2OpenSIPS使用mysql
  隨著OpenSIPS的技術(shù)架構(gòu)不斷優(yōu)化,各種應(yīng)用場景的優(yōu)化,OpenSIPS的性能也得到了很大的提升。官方對OpenSIPS的性能有一個關(guān)于壓力測試的檢測數(shù)據(jù)。在其結(jié)論中,數(shù)據(jù)庫的操作是影響OpenSIPS的CPS的一個非常重要的因素。如果想提高OpenSIPS的性能,官方推薦盡量使用Caching(緩存)來提升OpenSIPS的性能。在默認(rèn)的OpenSIPS環(huán)境中,到了使用了mysql數(shù)據(jù)庫對一些模塊的數(shù)據(jù)進(jìn)行查處,很多時候也對數(shù)據(jù)庫進(jìn)行調(diào)用。OpenSIPS中使用了數(shù)據(jù)庫的模塊包括:
  • AUTH_DB
  • USRLOC
  • PERMISSIONS
  • DIALPLAN
  • DROUTING
  • BLACKLIST
  • DOMAIN
  • AVPOPS
  • 其他模塊
  在一般中小型的平臺應(yīng)用環(huán)境中,這些模塊數(shù)據(jù)讀取可能不會影響OpenSIPS的性能。但是,如果SIP用戶數(shù)量達(dá)到一定的級別,呼叫路由規(guī)則,黑白名單模塊的數(shù)量達(dá)到一定級別以后,每個呼叫都要經(jīng)過這些流程的處理的話,如果這些數(shù)據(jù)通過數(shù)據(jù)庫的頻繁讀取就會嚴(yán)重影響系統(tǒng)的性能,可能數(shù)據(jù)庫也會受到嚴(yán)重影響。在默認(rèn)環(huán)境中,MYSQL的連接是100,這就會導(dǎo)致CPU不斷頻繁調(diào)用數(shù)據(jù)庫操作, 對存儲設(shè)備的使用頻率也會增加。很多時候,因為設(shè)計原因或者處理速度減慢,一些MYSQL具體的命令也會影響到CPU的消耗,這仍然需要用戶通過一定的命令手段來進(jìn)行排查。比較幸運(yùn)的是,目前MYSQL開源數(shù)據(jù)庫都支持了相應(yīng)的排查工具來實現(xiàn)跟蹤MYSQL命令檢測CPU的消耗。具體實現(xiàn)方式:
  pidstat -t -p <mysqld_pid> 1
  mysql > select * from performance_schema.threads where THREAD_OS_ID = XXXXX \G
  mysql > select * from performance_schema.threads where THREAD_OS_ID = XXXXX \G
  一步步排查每個SQL 命令的消耗狀態(tài)。具體排查方式,請參考鏈接。
  除了MYSQL數(shù)據(jù)庫的配置以外,存儲設(shè)備的讀取速度也是一個影響系統(tǒng)性能的重要因素。目前,無論是HDD還是SSD的存儲方式,它們的讀取速度仍然落后內(nèi)存讀取的速度。因此優(yōu)化內(nèi)存是一個比較可行的,相對低成本的方式。具體關(guān)于通過存儲設(shè)備選擇優(yōu)化系統(tǒng)的討論,讀者可以參考鏈接的內(nèi)容,這里不再贅述。
  3OpenSIPS中使用Cache緩存
  在緩存使用的優(yōu)化中,SIP用戶注冊就是一個非常典型的例子(其他模塊,例如TM/事務(wù)處理也非常消耗資源)。在我們的用戶場景中,假設(shè),SIP用戶需要一般每隔60秒對OpenSIPS進(jìn)行注冊,這樣OpenSIPS才能獲得其狀態(tài)。為了讓服務(wù)器端獲得其狀態(tài),SIP客戶端只能每隔一段時間對服務(wù)器支持,刷新數(shù)據(jù)庫的數(shù)據(jù)。這樣的操作其實是非常消耗系統(tǒng)的注意,數(shù)據(jù)庫性能也會大大下降。在OpenSIPS的模塊中,例如INVITE呼叫,撥號規(guī)則路由查詢等類似SIP注冊這樣的操作很多,需要經(jīng)常頻繁調(diào)用一些常規(guī)數(shù)據(jù)。這樣的操作可以通過一定的手段進(jìn)行優(yōu)化,從而達(dá)到系統(tǒng)優(yōu)化的目的。catching就是其中一種非常實用的優(yōu)化方式,通過在內(nèi)存存儲這些數(shù)據(jù),OpenSIPS可以不通過數(shù)據(jù)庫調(diào)用來查詢數(shù)據(jù),直接調(diào)用內(nèi)存中的數(shù)據(jù),從而提高了OpenSIPS的運(yùn)行速度。如果OpenSIPS優(yōu)化中使用caching(緩存方式)的話,可以直接從caching緩存中獲取用戶注冊信息,速度快,也無需訪問數(shù)據(jù)庫。在OpenSIPS環(huán)境中,目前支持的緩存是通過OpenSIPS core 模塊和其他模塊實現(xiàn)。支持的方式包括:Local Cache, MemCache,Redis, Cassandra, MongoDB和CouchBase。在OpenSIPS中的其設(shè)置非常簡單:
  除了存儲以外,OpenSIPS還可以移除cache,提取,查詢新的數(shù)據(jù)等功能。OpenSIPS支持的cache用戶驗證流程:
  
  通過以上圖例,我們可以看到,OpenSIPS關(guān)于緩存處理的基本處理邏輯是,OpenSIPS通過執(zhí)行MYSQL 認(rèn)證數(shù)據(jù)庫,把用戶名稱和密碼存儲在cache中,緩存數(shù)據(jù)保持一定的生命周期。如果新新用戶需要驗證的話,首先檢測緩存中存儲的數(shù)據(jù),如果此用戶的數(shù)據(jù)存儲在緩存中,則直接此緩存中查詢用戶驗證信息;如果在緩存中沒有此用戶的信息,則返回數(shù)據(jù)庫進(jìn)行查詢,執(zhí)行驗證流程。下一次用戶需要認(rèn)證時,OpenSIPS就會從緩存中提取用戶驗證信息而不是再次通過執(zhí)行數(shù)據(jù)庫驗證來驗證用戶信息,這樣就會降低對mysql的讀取次數(shù)。用戶名稱和用戶密碼通過不同的key pair來實現(xiàn)。
  4OpenSIPS中使用Memcache支持SIP注冊
  筆者介紹了基本的cache的操作步驟,現(xiàn)在我們針對SIP用戶注冊的緩存處理做一個配置示例,通過此示例說明OpenSIPS如何通過緩存數(shù)據(jù)來驗證用戶密碼的流程。OpenSIPS官方網(wǎng)站對此配置有簡單的說明,具體模塊配置的細(xì)節(jié)讀者可以參考官方配置文檔,我們這里僅通過一個配置cfg基本來說明演示SIP賬號的驗證處理流程。用戶需要按照以下幾個步驟來配置緩存驗證的流程。
  首先,用戶需要編輯cfg文件,添加必要的支持模塊:
  modparam("auth", "calculate_ha1", 1)
  modparam("auth","username_spec","$avp(userspec)")
  modparam("auth","password_spec","$avp(passwd)")
  然后加載此模塊:
  loadmodule "cachedb_local.so"
  處理cache數(shù)據(jù)的邏輯,添加緩存中的數(shù)據(jù)庫用戶名稱和用戶密碼。在注冊處理流程模塊做用戶驗證,cfg首先執(zhí)行緩存數(shù)據(jù)的驗證,然后執(zhí)行mysql數(shù)據(jù)庫驗證,最后保存緩存數(shù)據(jù)流程。
  route[handle_register] // 執(zhí)行緩存處理和數(shù)據(jù)庫驗證處理流程:
  if(cache_fetch("local","passwd_$tU@$td",$avp(passwd))) {
  $avp(userspec) = $tU;
  // 通過緩存數(shù)據(jù)驗證用戶名稱和密碼,否則執(zhí)行mysql數(shù)據(jù)庫驗證
  if (!pv_www_authorize("")) {
  www_challenge("", " auth,auth-int " );
  exit;
  }
  } else { // 執(zhí)行mysql數(shù)據(jù)庫驗證
  if (!www_authorize("", "subscriber")) {
  www_challenge("", "auth");
  exit;
  }
  // 執(zhí)行數(shù)據(jù)庫用戶的密碼驗證,保存到緩存中
  cache_store("local","passwd_$tU@$td","$avp(passwd)",1200);
  }
  // 完成驗證
  if (!$au==$tU) {
  send_reply(403,"Forbidden auth ID");
  exit;
  }
  if (!save("location"))
  sl_reply_error();
  exit;
  }
  保存cfg配置文件以后,用戶重新啟動OpenSIPS,然后通過mysql log日志觀察log消息,查看數(shù)據(jù)庫數(shù)據(jù)的變化。具體mysql數(shù)據(jù)庫的log設(shè)置,用戶可以通過:
  mysql -e "SET GLOBAL general_log=1;"
  mysql -e "SET GLOBAL general_log_file='mariadb.log';"
  其log保存的文件路徑在 /var/lib/mysql/mariadb.log 。
  如果用戶要測試其配置是否成功的話,用戶也可以使用一個SIP軟電話執(zhí)行注冊然后退出,再次執(zhí)行注冊流程,查看打印日志的變化。通過兩次SIP賬號注冊,如果配置正確的話,用戶注冊時應(yīng)該分別訪問了mysql數(shù)據(jù)庫和cache的保存的數(shù)據(jù)。
  通過緩存方式驗證SIP注冊以外,此用戶的密碼仍然可以使用在其他的請求中,例如INVITE請求呼叫或者訂閱消息中。如果實現(xiàn)INVITE呼叫的話,需要使用pv_proxy_authorize()來實現(xiàn),同時需要修改幾個相關(guān)的變量(例如,$fu等)來保存相關(guān)的緩存數(shù)據(jù)。用戶也可以通過此思路做進(jìn)一步的驗證,這里不做過多討論。
  通過以上示例,讀者可以看到,我們使用一個SIP 賬號實現(xiàn)的緩存數(shù)據(jù)驗證的流程。讀者可以想象一下,如果服務(wù)器啟動以后,成百上千個SIP用戶同時對OpenSIPS服務(wù)器端發(fā)起注冊的話,沒有緩存驗證的支持的話,對數(shù)據(jù)庫是一個非常大的挑戰(zhàn)。所以,通過緩存數(shù)據(jù)的調(diào)用可以優(yōu)化OpenSIPS的性能。
  另外,讀者可以看到,我們實際上實現(xiàn)的是一個按需驗證數(shù)據(jù)庫的過程,每個用戶注冊時,需要重復(fù)執(zhí)行以上的步驟,把數(shù)據(jù)庫數(shù)據(jù)緩存到內(nèi)存的緩存數(shù)據(jù)中。另外一個更加優(yōu)化的方式是,在OpenSIPS啟動以后,使用full caching的方式,在起始的啟動腳本邏輯模塊中就完全提取數(shù)據(jù)庫用戶驗證數(shù)據(jù),然后在緩存中保存這些完整的全部驗證數(shù)據(jù)。通過這樣的操作就避免了每一次用戶注冊都需要進(jìn)行數(shù)據(jù)庫的驗證處理,僅需要通過緩存驗證流程。
  5總結(jié)
  在本文章中,筆者首先介紹了關(guān)于系統(tǒng)性能測試的背景,然后介紹了mysql對OpenSIPS的影響,接下來筆者針對OpenSIPS中使用的一些必要模塊做了介紹,最后通過SIP注冊的示例說明使用緩存的方式。通過此基本示例讓讀者了解如何優(yōu)化自己的OpenSIPS平臺,實現(xiàn)更強(qiáng)大的性能處理能力。
  用戶使用MemCache可以優(yōu)化OpenSIPS的性能,但是使用內(nèi)存處理同樣也會引起其他的問題,例如系統(tǒng)維護(hù)問題,腳本處理流程需要規(guī)范,同步cache和拓展性的問題。用戶最終需要評估使用MemCache的風(fēng)險來決定是否使用MemCache。
  隨著技術(shù)的不斷進(jìn)步,用戶當(dāng)然也可以考慮使用其他的方式來優(yōu)化或者改善OpenSIPS的性能,例如,使用分布式數(shù)據(jù)庫,使用更高速的存儲設(shè)備,其他的軟件手段等方式。
  參考資料:
  C. P. Wright,SIP server performance on multicore systems
  Charles Shen,The Impact of TLS on SIP Server Performance
  J. Bradley Chen, The Measured Performance of Personal Computer Operating Systems
  https://en.wikipedia.org/wiki/Benchmark_(computing)
  https://core.ac.uk/download/pdf/207501118.pdf
  https://www.opensips.org/About/PerformanceTests-StressTests
  https://www.sqlite.org/fasterthanfs.html
  https://medium.com/@denisanikin/when-and-why-i-use-an-in-memory-database-or-a-traditional-database-management-system-5737f6d406b5
  https://web.archive.org/web/20120319101435/http://www.pcguide.com/ref/hdd/perf/perf/spec/posAccess-c.html
  https://www.opensips.org/Documentation/Tutorials-MemoryCaching
  融合通信/IPPBX/FreePBX商業(yè)解決方案:www.hiastar.com
  最新Asterisk完整中文用戶手冊詳解:www.asterisk.org.cn
  Freepbx/FreeSBC技術(shù)文檔: www.freepbx.org.cn
  如何使用免費(fèi)會話邊界控制器-FreeSBC,qq技術(shù)分享群:334023047
  關(guān)注微信公眾號:asterisk-cn,獲得有價值的通信行業(yè)技術(shù)分享
 
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對文中陳述、觀點(diǎn)判斷保持中立,不對所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請讀者僅作參考,并請自行承擔(dān)全部責(zé)任。

專題

CTI論壇會員企業(yè)