a级片网址,www.一级毛片,日批国产,中文字幕日韩精品有码视频,黄色毛片免费网站,久久久精品午夜免费不卡,天堂福利视频

您當(dāng)前的位置是:  首頁 > 新聞 > 國內(nèi) >
 首頁 > 新聞 > 國內(nèi) >

Kamailio/OpenSIPS學(xué)習(xí)筆記-九大核心模塊和進(jìn)程配置

2018-01-29 09:41:27   作者:   來源:CTI論壇   評(píng)論:0  點(diǎn)擊:


  在前面的筆記中我們介紹了一些和開源軟交換相關(guān)的SIP基本概念和消息內(nèi)容。今天,我們將討論Kamailio/OpenSIPS的九大核心模塊的技術(shù)架構(gòu),它們包括具體九大核心模塊的功能,軟交換的幾個(gè)核心進(jìn)程的介紹,軟交換進(jìn)程數(shù)量對(duì)系統(tǒng)的影響等相關(guān)話題。
  1、筆者在前面的講座中也提到過,兩個(gè)開源平臺(tái)的技術(shù)架構(gòu)基本上是完全一致的,但是可能在解釋上可能有所不同。今天,我們分別對(duì)各自的架構(gòu)做一個(gè)說明。這里,我們首先介紹Kamailio 技術(shù)架構(gòu)。根據(jù)以下圖例我們可以看到,Kamailio的核心的架構(gòu)包括九大部分。它們分別是:
  • SIP Parser 負(fù)責(zé)解析SIP消息內(nèi)容。
  • SIP Transport Layer 負(fù)責(zé)收發(fā)UDP,SCTP,TUP和TLS加密。
  • Configuration file Interpreter負(fù)責(zé)處理各種配置文件,并且在runtime執(zhí)行。
  • Variabels Framework是一個(gè)API接口負(fù)責(zé)處理系統(tǒng)偽變量,選擇和轉(zhuǎn)譯功能。
  • Locking Manager負(fù)責(zé)對(duì)內(nèi)部資源的同步管理。
  • DNS Resolver負(fù)責(zé)執(zhí)行DNS查詢和對(duì)結(jié)果進(jìn)行緩存處理。
  • Control Interface API是一個(gè)API接口負(fù)責(zé)處理系統(tǒng)的控制命令。
  • Memory Manager負(fù)責(zé)對(duì)private和shared 內(nèi)存進(jìn)行管理。
  • Modules Interface 是一個(gè)API接口,負(fù)責(zé)加載模塊和導(dǎo)入已導(dǎo)出參數(shù)和函數(shù)。
  2、OpenSIPS 核心模塊介紹和kamailio模塊基本上是一樣架構(gòu)。只是模塊的命名稍微有差異。
  筆者會(huì)根據(jù)Kamailio的命名來進(jìn)一步介紹各個(gè)模塊的具體功能。
  3、因?yàn)閮蓚(gè)軟交換的架構(gòu)基本一致,所以我們這里我們重點(diǎn)介紹一下Kamailio的九大模塊的基本功能:
  • SIP Parser解析器。Kamailio有自己的解析器,其主要作用是支持SIP proxy的解析需要。和一些SIP終端的解析器相比,它可以同時(shí)處理上千個(gè)transactions和dialogcs,而一般終端只能同時(shí)處理幾個(gè)dialogcs。另外,解析器可以僅處理它本身需要的消息內(nèi)容,無需全部解析,同時(shí)對(duì)解析的消息進(jìn)行緩存處理。解析器可以對(duì)SIP消息體中的消息頭和body解析解析并且根據(jù)需要對(duì)部分信息進(jìn)行刪除添加等功能。
  • Memory Manager內(nèi)存管理器。Kamailio有自己的內(nèi)存管理工具對(duì)其進(jìn)程進(jìn)行管理。因?yàn)镵amailio是基于多進(jìn)程設(shè)計(jì)的平臺(tái),它本身的同步管理管理比較簡(jiǎn)單。有時(shí),為了配合第三方的軟件平臺(tái),系統(tǒng)又需要共享內(nèi)存的支持。Kamailio的內(nèi)存管理器可以按照不同的內(nèi)存需求來靈活調(diào)整內(nèi)存大小。啟動(dòng)時(shí)附加不同的內(nèi)存參數(shù)設(shè)置來實(shí)現(xiàn)共享內(nèi)存和私有內(nèi)存的配置。啟動(dòng)命令設(shè)置時(shí)用戶需要根據(jù)內(nèi)存命令來設(shè)置。例如,kamailio -m 521 -M 8 表示 使用的是512M的共享內(nèi)存,使用 8M的私有內(nèi)存。這里,讀者一定要注意大小寫的區(qū)別。M表示設(shè)置的是私有內(nèi)存,m表示設(shè)置的是共享內(nèi)存。另外,配置的變量存儲(chǔ)在共享內(nèi)存還是私有內(nèi)存完全取于變量類型。大部分情況下,一般的SIP屬性參數(shù)保存在私有內(nèi)存($ru,$fu,$dbr等),一些avp變量/shv變量則保存在共享內(nèi)存。但是明確一點(diǎn),如果當(dāng)正在處理一個(gè)SIP請(qǐng)求時(shí),想保存此變量值用于處理相應(yīng)的響應(yīng)時(shí),則必須使用共享內(nèi)存變量。
  Locking manager 制鎖管理。通過API支持互斥管理和內(nèi)存范圍管理。因?yàn)橛袝r(shí)系統(tǒng)同時(shí)使用一個(gè)變量時(shí),我們需要更新一個(gè)變量時(shí),如果不先鎖定此變量,就不可能對(duì)其進(jìn)行同步更新,因?yàn)榭赡芡瑫r(shí)有其他進(jìn)程正在使用此變量。此管理器的目的就是通過先鎖定變量,更新此變量后,然后再其變量進(jìn)行解鎖操作。例如:
  • lock(“x”);// 鎖定變量x
  • $shv()=$shv(x)+5 // 使用共享內(nèi)存保存更新后的變量
  • unlock(); // 解鎖操作
  Transport layer 傳輸層管理。此模塊支持IPv4和IPv6,支持的傳輸方式包括UDP,TCP,TLS和SCTP。傳輸方式完全取決于用戶的配置文件設(shè)置,軟交換本身可以同時(shí)支持UDP和TCP傳輸。SCTP協(xié)議設(shè)計(jì)目的是專門針對(duì)SIP技術(shù)架構(gòu)的,但是目前使用的場(chǎng)景比較少,所以也沒有大規(guī)模商用。
  Configuration File Interpreter 配置文件解析器。從字面意思我們就可以知道,此接口負(fù)責(zé)處理對(duì)軟交換配置文件的解析。軟交換配置文件是一個(gè)文本配置文件,它主要包括三個(gè)部分的配置:全局變量設(shè)置自定義變量和預(yù)處理的文件,模塊名稱和參數(shù)設(shè)置和路由管理設(shè)置負(fù)責(zé)SIP路由管理。在軟交換啟動(dòng)時(shí),系統(tǒng)會(huì)加載經(jīng)過優(yōu)化的配置文件存儲(chǔ)在內(nèi)存中,以便在runtime時(shí)使用。解析器會(huì)編譯正則表達(dá)式,檢測(cè)靜態(tài)變量,檢測(cè)條件語句判斷,重構(gòu)路由和子路由路徑結(jié)構(gòu),在runtime環(huán)境中添加各種函數(shù)的變量值。
  Variabels Framework 接口對(duì)變量進(jìn)行處理。軟交換本身支持了很多種變量,而且因?yàn)橐郧绊?xiàng)目的繼承和兼容性的問題,導(dǎo)致現(xiàn)在的支持兩種變量:pseudo-variables(來自于OpenSER/Kamailio,使用$開始變量標(biāo)注) 和selects(來自于SER,使用@開始變量標(biāo)注)。關(guān)于具體每個(gè)變量的學(xué)習(xí),大家可以查閱兩個(gè)軟交換的官方文檔。
  DNS Reslover 負(fù)責(zé)軟交換的DNS查詢處理。目前軟交換支持的DNS類型包括:A(IPv4),AAAA(IPv6),CNAME別名查詢,SRV查詢(服務(wù)器主機(jī)和端口),NAPTR(傳輸方式,服務(wù)地址和端口),TXT(服務(wù)器獲取的任意數(shù)據(jù)內(nèi)容)。軟交換的DNS模塊可以支持基于DNS SRV結(jié)果的均衡負(fù)載處理和基于DNS記錄的黑名單管理。
  Control Interface 接口負(fù)責(zé)提供兩種對(duì)軟交換進(jìn)行控制的接口命令,這兩個(gè)接口包括RPC接口(SER開發(fā)),MI管理接口(Openser/Kamailio開發(fā)而來)。兩種接口都提供同樣的功能-對(duì)軟交換通過人工命令進(jìn)行互動(dòng)管理,例如獲取內(nèi)存內(nèi)容,后臺(tái)加載數(shù)據(jù),在運(yùn)行時(shí)修改一些這些命令,發(fā)送SIP消息等功能。
  Modules Interface 此核心模塊負(fù)責(zé)加載系統(tǒng)執(zhí)行時(shí)需要的相關(guān)模塊和其模塊的傳遞參數(shù),并且導(dǎo)入負(fù)責(zé)導(dǎo)入以導(dǎo)出的函數(shù)參數(shù)等數(shù)值。此模塊是軟交換非常重要的核心模塊,所有的軟交換認(rèn)證模塊,數(shù)據(jù)庫對(duì)接模塊,其他定位服務(wù),路由等都需要相應(yīng)的模塊提前加載才能執(zhí)行。這個(gè)模塊接口對(duì)于一個(gè)非常龐大的模塊數(shù)量,用戶可以到官方網(wǎng)站查閱對(duì)應(yīng)的模塊使用說明。
  4、前面我們提到過,Kamailio是一個(gè)多進(jìn)程的軟交換平臺(tái),進(jìn)程數(shù)量是一個(gè)變量,數(shù)量的多少取決于配置文件的設(shè)置。對(duì)于每個(gè)Kamailio的實(shí)例來說,每個(gè)進(jìn)程都有其特別的功能角色。它們包括以下多種進(jìn)程維護(hù)功能:
  主進(jìn)程維護(hù)功能:進(jìn)程啟動(dòng),監(jiān)控解析文件配置,設(shè)置創(chuàng)建環(huán)境變量,創(chuàng)建SIP worker 進(jìn)程和定時(shí)器。
  TCP 維護(hù)進(jìn)程:管理TCP worker 和連接的過程。
  SIP TCP 接收方:處理通過TCP收到的數(shù)據(jù)過程。
  SIP UDP 接收方:處理通過UDP端口的數(shù)據(jù)。
  SIP SCTP 接收方:處理通過SCTP傳輸?shù)臄?shù)據(jù)。
  Control Interface Receiver:負(fù)責(zé)處理MI/RPC 命令的數(shù)據(jù)交互,它們可能是FIFO,TCP/UDP/UNIXSOCK或者XML,RPC 接收方數(shù)據(jù)。
  定時(shí)器進(jìn)程:此進(jìn)程處理正在運(yùn)行的周期性的任務(wù),可能是core 模塊或其他模塊調(diào)用的。定時(shí)器進(jìn)程可能是Core 定時(shí)器(main timers和slow times)和自定義的定時(shí)器包括NAT ping 定時(shí)器(發(fā)送保持NAT 存活數(shù)據(jù)包)和rtimer定時(shí)器,在定時(shí)器內(nèi)執(zhí)行執(zhí)行一個(gè)配置文件的路由設(shè)置。
  Modue specific wokers:此進(jìn)程是通過啟動(dòng)各種模塊執(zhí)行具體的任務(wù),例如異步處理等。
  5、這里我們特別討論一下關(guān)于子進(jìn)程對(duì)系統(tǒng)性能的影響(children和tcp_children)。通過以上的介紹,我們知道軟交換配置中的參數(shù)配置可以影響到子進(jìn)程(默認(rèn)設(shè)置會(huì)產(chǎn)生8個(gè)進(jìn)程-默認(rèn)children=4,兩個(gè)UDP socket)數(shù)量的實(shí)現(xiàn),這些進(jìn)程數(shù)量的多少會(huì)直接影響系統(tǒng)的執(zhí)行性能。這些參數(shù)決定著SIP worker的進(jìn)程數(shù)量。因此我們必須注意,所有進(jìn)程都是在啟動(dòng)時(shí)創(chuàng)建,啟動(dòng)以后,在運(yùn)行環(huán)境中,不能再次創(chuàng)建進(jìn)程或者結(jié)束結(jié)束進(jìn)程。
  可能有讀者問,進(jìn)程數(shù)量到底多少是合適的?不幸的是,沒有一個(gè)完整的公式可以計(jì)算出一個(gè)運(yùn)行環(huán)境中究竟需要多少進(jìn)程,這都完全取決于配置文件的復(fù)雜程度和腳本邏輯的復(fù)雜程度。當(dāng)然,創(chuàng)建的進(jìn)程越多,則需要更多的并行處理機(jī)制來處理數(shù)據(jù)流量。但是,如果創(chuàng)建了太多的進(jìn)程則會(huì)導(dǎo)致系統(tǒng)性能下降。很多的進(jìn)程處理的切換需要系統(tǒng)時(shí)間,內(nèi)部同步和制鎖都需要時(shí)間處理。因此,讀者需要在系統(tǒng)進(jìn)程數(shù)量和系統(tǒng)穩(wěn)定性上做一個(gè)平衡。
  在配置文件的路由邏輯腳本中,很多的邏輯運(yùn)算是依賴于CPU IO操作和計(jì)算能力。例如,基本上無IO操作的DNS,數(shù)據(jù)庫簡(jiǎn)單操作和HTTP等。相對(duì)比較消耗IO操作的大量頻繁的數(shù)據(jù)庫查詢命令,DNS 查詢等。如果沒有涉及太多的IO操作的進(jìn)程,系統(tǒng)的默認(rèn)進(jìn)程設(shè)置基本上可以滿足這些要求;如果是大量的IO操作的進(jìn)程,需要用戶創(chuàng)建更多的進(jìn)程來保證運(yùn)行的穩(wěn)定性。如果涉及到太多的寫入操作或者數(shù)據(jù)庫連接等邏輯,用戶也要考慮數(shù)據(jù)庫的連接問題。
  用戶可以通過每個(gè)SIP消息對(duì)IO操作的平均數(shù)和IO操作的平均時(shí)間來大致估算所需進(jìn)程數(shù)量。大部分的軟交換用戶可能沒有注意到children參數(shù)具體的細(xì)節(jié),其實(shí),這些參數(shù)的設(shè)置一開始就已經(jīng)限定了系統(tǒng)的性能,有一些開發(fā)人員僅是一味地強(qiáng)調(diào)CPU性能和內(nèi)存大小。讀者可以查看cfg中的全局變量參數(shù)fork,children和tcp_children來進(jìn)行配置。另外,如果系統(tǒng)確實(shí)確認(rèn)不需要某些傳輸協(xié)議的話,可以通過配置文件來關(guān)閉這些傳輸協(xié)議。但是,一定要注意,UDP是不能關(guān)閉的,它總是處于開啟狀態(tài)。
  硬件服務(wù)器的CPU,網(wǎng)卡都是直接影響CPU性能的重要指標(biāo),另外硬件中斷(CPU,網(wǎng)卡,硬盤,語音卡)的優(yōu)先級(jí)同樣影響服務(wù)器的性能。優(yōu)先級(jí)高的中斷可以優(yōu)先運(yùn)行執(zhí)行某些進(jìn)程,優(yōu)先級(jí)低的中斷則可能稍后執(zhí)行。如果把網(wǎng)卡的優(yōu)先級(jí)設(shè)置的比較低,則可能直接影響軟交換對(duì)SIP數(shù)據(jù)的處理和鎖切換時(shí)間。用戶可能需要一些系統(tǒng)工具來嘗試調(diào)整所需要的優(yōu)先級(jí)(irqblance)。
  Italo Dacosta和他的團(tuán)隊(duì)的軟交換(OpenSER)性能研究中也明確了關(guān)于數(shù)據(jù)庫和進(jìn)程數(shù)量影響軟交換性能的測(cè)試數(shù)據(jù)。讀者可以根據(jù)參考鏈接做進(jìn)一步的研究。
  6、在本章節(jié)的討論中,筆者和大家分享了Kamailio九大核心接口的主要功能和各自負(fù)責(zé)的任務(wù)處理,另外,也介紹了系統(tǒng)創(chuàng)建的主要進(jìn)程和各個(gè)進(jìn)程對(duì)特定任務(wù)的處理。為了幫助讀者能夠掌握軟交換穩(wěn)定性的配置問題,筆者也重點(diǎn)介紹了進(jìn)程數(shù)量的設(shè)置,CPU(核數(shù)量)或IO操作的影響和硬件服務(wù)器的CPU,網(wǎng)卡以及相應(yīng)中斷的優(yōu)先級(jí)問題。最后,筆者和大家分享了國外一位研究人員對(duì)OpenSER的性能測(cè)試數(shù)據(jù),讀者可以根據(jù)這些測(cè)試環(huán)境來進(jìn)一步掌握本章節(jié)的重點(diǎn)內(nèi)容。
  參考資料:
  http://blog.csrpswitch.com/tuning-kamailio-for-high-throughput-and-performance/
  Italo Dacosta, Improving Authentication Performance of Distributed SIP Proxies
  關(guān)注微信公眾號(hào):asterisk-cn,獲得有價(jià)值的行業(yè)分享。訪問5060社區(qū)-開源IPPBX論壇獲得技術(shù)幫助:www.ippbx.org.cn/www.hiastar.com
【免責(zé)聲明】本文僅代表作者本人觀點(diǎn),與CTI論壇無關(guān)。CTI論壇對(duì)文中陳述、觀點(diǎn)判斷保持中立,不對(duì)所包含內(nèi)容的準(zhǔn)確性、可靠性或完整性提供任何明示或暗示的保證。請(qǐng)讀者僅作參考,并請(qǐng)自行承擔(dān)全部責(zé)任。

專題

永州市| 大港区| 松原市| 宁津县| 鄂伦春自治旗| 化州市| 长宁县| 渭南市| 保德县| 司法| 扎囊县| 灵石县| 织金县| 固原市| 景宁| 门源| 屏东县| 蓬安县| 嘉荫县| 龙川县| 高雄县| 西盟| 密云县| 泸州市| 灵寿县| 灌云县| 土默特左旗| 沙坪坝区| 佛教| 介休市| 射阳县| 家居| 青岛市| 绥滨县| 桃园市| 怀来县| 峨眉山市| 都兰县| 山阳县| 杭锦旗| 康平县|