Asterisk權威指南/第二章 Asterisk架構

Asterisk和其他傳統(tǒng)的PBX完全不同,因為Asterisk的撥號計劃以同樣的方式處理所有的入局信道(incoming channels)。

傳統(tǒng)的PBX在邏輯上區(qū)分工作站信道(連接電話機)和電話局信道(連接到外部世界)。這意味著,你不可能無縫地在一個工作站端口配置一個外部網(wǎng)關。同樣,傳統(tǒng)PBX也很難實現(xiàn)對離站(off-site,不在座位上或外出辦事)資源的訪問,比如前臺如果外出辦事就什么事都做不了,因為她哪怕能打電話回公司,也是不能訪問內部資源的。

Asterisk在內部不區(qū)分工作站信道和電話局信道,而是一律統(tǒng)稱信道。有很多種信道類型(驅動不同),但Asterisk撥號計劃以不加區(qū)別(接口一致)的方式處理這些信道,也就是說,一個內部用戶可能位于電話局端口,但撥號計劃可以把他當成在工作站端口一樣。如果你沒有用過傳統(tǒng)PBX,可能還體會不到Asterisk這種方式的強大和靈活。下圖顯示了兩種架構的區(qū)別。

目錄

1. 模塊
    1.1 應用程序
    1.2 橋接模塊
    1.3 電話詳單記錄模塊
    1.4 信道事件日志模塊
    1.5 信道驅動
    1.6 編碼解碼器
    1.7 格式解釋器
    1.8 撥號計劃函數(shù)
    1.9 PBX模塊
    1.10 資源模塊
    1.11 附加模塊
    1.12 測試模塊
2. 文件結構
    2.1 配置文件
    2.2 模塊
    2.3 資源庫
    2.4 spool
    2.5 日志
3. 撥號計劃
4. 硬件
5. Asterisk版本
    5.1 以前的版本方案
    5.2 現(xiàn)在的版本方案
6. 結束語

模塊

Asterisk是基于模塊構建的。一個模塊提供特定的功能,是一個可裝載的組件,比如信道驅動(chan_sip.so),或者一項可以連接到外部技術的資源(func_odbc.so)。Asterisk按照/etc/asterisk/modules.conf配置文件裝載模塊。后面我們會討論各個模塊的使用。這里我們只會介紹模塊的概念,以及模塊的各種類型。

運行一個不加載任何模塊的Asterisk也是有可能的,盡管它什么都做不了。你只有理解了Asterisk模塊化的特點,才能充分理解Asterisk的架構。

Note:你可以啟動一個沒有加載任何模塊的Asterisk,然后手工在控制臺一個個地添加;這種方法一般用于性能調優(yōu),可以保證僅加載所需要的模塊。

Asterisk模塊類型包括:

- 應用程序(即撥號計劃中的命令)
- 橋接模塊
- 呼叫詳單記錄模塊
- 信道事件日志模塊
- 信道驅動
- 編碼解碼器
- 格式解釋器
- 撥號計劃函數(shù)
- PBX模塊
- 資源模塊
- 附加模塊
- 測試模塊

接下來我們會列出分屬各個類型的所有模塊,他們的用途,以及我們所認為的受歡迎程度和重要程度(有一些很常用,但有一些不太有用,僅僅是為了兼容而保留)。這些模塊的細節(jié)會在本書中陸續(xù)介紹,根據(jù)各自的情況,有些會被全面的討論,有些則根本不會涉及。
下面這些術語反映了我們對各個模塊的看法:
- 不重要

這個模塊是個老古董。如果你要使用它,就不要指望能在社區(qū)中得到很好的支持。

- 不可靠

新設計的或者試驗性的模塊,不要用于生產環(huán)境。

- 很有用

很時新,有人維護,受歡迎而且被推薦。

- 可以用

能夠用,但用得不多,可能不完整。不推薦。

- 不好說

新出現(xiàn)的模塊,時間短,完整性和受歡迎程度都不太好說。

- 已廢棄

已經(jīng)被更好的模塊取代了。

- 有局限

有局限性,不能滿足要求。

- 很重要

必須的。   

應用程序

應用程序用于撥號計劃中,能夠處理呼叫流程。比如Dial()就是一個很重要的應用程序,負責建立出局連接。

名稱 用途 評價
app_adsiprog 給兼容模擬電話加載模擬顯示服務接口(ADSI)腳本 不重要
app_alarmreceiver 支持接受警報設備的報告 不重要
app_amd 檢測電話答錄機 不穩(wěn)定
app_authenticate 比較雙音多頻(DTMF)輸入和一個給定的字符串(通常是密碼) 很有用
app_cdr 寫CDR記錄 很有用
app_celgenuserevent 為CEL產生用戶自定義事件 不好說
app_chanisavail 檢測信道的狀態(tài) 不穩(wěn)定
app_channelredirect 強制另一個信道進入撥號計劃的另一個地方 很有用
app_chanspy 允許一個信道收聽另一個信道 很有用
app_confbridge 電話會議(新版) 不好說
app_controlplayback 播放提示,并提供快進和倒帶功能 很有用
app_dahdibarge 允許在DAHDI信道中插話(已廢棄,見app_chanspy) 已廢棄
app_dahdiras 在DAHDI信道上建立RAS服務器 不重要
app_db 訪問Asterisk內置的伯克利數(shù)據(jù)庫(已廢棄,見func_db) 已廢棄
app_dial 把信道連接起來(例如,打電話) 很重要
app_dictate 播放一段錄音,并提供開始/停止功能 很有用
app_directed_pickup 應答另外一部分機上的呼叫 很有用
app_directory 給出voicemail.conf中的姓名列表 很有用
app_disa 提供撥號音并接受DTMF輸入 很有用
app_dumpchan 在Asterisk控制臺打印信道變量 很有用
app_echo 回放從信道中收到的語音 很有用
app_exec 包含Exec(),TryExec()和ExecIf()根據(jù)條件執(zhí)行應用程序 很有用
app_externalivr 類似于AGI,但是異步的 很有用
app_fax 提供SendFax()和ReceiveFax() 很有用
app_festival “文本-轉-語音”引擎 可以用
app_flash 在信道上執(zhí)行一次瞬間掛機 很有用
app_followme 根據(jù)followme.conf文件執(zhí)行找到我/跟隨我功能 很有用
app_forkcdr 在當前呼叫上開始一條新的CDR記錄 可以用
app_getcpeid 獲得ADSI CPE ID 不重要
app_ices 把音頻發(fā)送到一個icecast服務器 可以用
app_image 向可以支持的設備上傳輸圖像 有局限
app_ivrdemo 開發(fā)者的示例應用程序 不重要
app_jack 使用JACK音頻連接工具包共享音頻 很有用
app_macro 觸發(fā)撥號計劃宏(已廢棄,見GoSub()) 已廢棄
app_meetme 多方會議 很有用
app_milliwatt 產生1004赫茲的音頻,以測試模擬電路 很有用
app_minivm 提供基本的函數(shù),使得你可以構造自己的語音信箱 可以用
app_mixmonitor 兩頭錄音,然后合并 很有用
app_morsecode 產生莫爾斯電碼 可以用
app_mp3 用mpg123播放mp3 不重要
app_nbscat 獲得NBS音頻 不重要
app_originate 允許發(fā)起一次呼叫 很有用
app_osplookup 執(zhí)行OSP查找 可以用
app_page 尋呼 很有用
app_parkandannounce 自動播報保持的電話 可以用
app_playback 播放音頻文件,不接受輸入 很有用
app_playtones 播放按鍵音 很有用
app_privacy 如果沒有收到CallerID,就要求輸入用戶號碼 不重要
app_queue 提供自動呼叫分配 很有用
app_read 要求用戶輸入,并把輸入存入變量 很有用
app_readexten 要求用戶輸入,并把當前呼叫轉移到指定分機和上下文 可以用
app_readfile 把文件內容存入一個信道變量(已廢棄,見func_env中的FILE()) 已廢棄
app_record 把收到的音頻存入文件 很有用
app_rpt 使用聲卡 有局限
app_sayunixtime 已指定的格式播放時間 很有用
app_senddtmf 向呼叫者傳輸DTMF音頻 很有用
app_sendtext 向兼容的信道發(fā)送文本 不重要
app_setcallerid 在信道上設置CallerID(已廢棄,見func_callerid) 已廢棄
app_skel 開發(fā)者的示例應用程序 很有用
app_sms 在支持的地區(qū)發(fā)送SMS消息 有局限
app_softhangup 請求關閉信道 很有用
app_speech_utils 語音識別 很有用
app_stack 提供GoSub()等堆棧相關的操作 很重要
app_system 執(zhí)行操作系統(tǒng)命令 很有用
app_talkdetect 類似于app_background,但允許收到音頻后中斷播放 很有用
app_test C/S測試應用程序 可以用
app_transfer 在當前信道上執(zhí)行轉移 很有用
app_url 向被呼叫信道傳遞URI 有局限
app_userevent 在AMI中產生一個定制事件 很有用
app_verbose 在CLI中產生一個定制時間 很有用
app_voicemail 提供語音信箱功能 很重要
app_waitforring (TODO:不明白) 不重要
app_waitforsilence 包括WaitForSilent()和WaitForNoise();監(jiān)聽入局信道,有超時限制 很有用
app_waituntil 等待一個指定的Linux時間(從1970第一秒開始的計數(shù)值)到來 很有用
app_while 包括While(),EndWhile()等,用于循環(huán) 很有用
app_zapateller 播放特殊音調,以阻止電話推銷者 可以用

橋接模塊

橋接模塊是Asterisk 1.8的新功能;他們以新的方式執(zhí)行信道之間的橋接。他們每一個都提供不同的特性,用于不同的橋接需求。這些模塊只用于app_confbridge。

名稱 用途 評價
bridge_builtin_features 當使用內置用戶特性(在features.conf中定義)時,執(zhí)行橋接 不好說
bridge_multiplexed 執(zhí)行復雜的多路轉發(fā),用于大型會議室 不好說
bridge_simple 執(zhí)行簡單的“信道-到-信道”橋接 不好說
bridge_softmix 執(zhí)行簡單的多路轉發(fā),用于大型會議室(TODO:不明白和bridge_multiplexed的區(qū)別) 不好說

電話詳單記錄模塊

CDR模塊是為了讓各種形式的話單記錄更方便。你可以把CDR存入文件、數(shù)據(jù)庫、RADIUS、或syslog。

注:CDR不是為了計費而設計的。計費功能應該使用CEL。

名稱 用途 評價
cdr_adaptive_odbc 通過ODBC寫CDR,允許添加自定義字段 很有用
cdr_csv 把CDR寫入CSV文件 可以用
cdr_custom 和cdr_csv一樣,但允許添加自定義字段 很有用
cdr_manager 把CDR輸出到AMI接口 很有用
cdr_odbc 通過ODBC寫CDR 可以用
cdr_pgsql 把CDR寫到PostgreSQL 很有用
cdr_radius 把CDR寫到RADIUS 可以用
cdr_sqlite 把CDR寫到sqlite2數(shù)據(jù)庫(已廢棄,見cdr_sqlite3_custom) 已廢棄
cdr_sqlite3_custom 把CDR寫到sqlite3數(shù)據(jù)庫,允許添加自定義字段 很有用
cdr_syslog 把CDR寫到syslog 很有用
cdr_tds 把CDR寫到Microsoft SQL或Sybase數(shù)據(jù)庫,需要老版tds 可以用

Web接口中會有一些和CDR相關的報告功能。

信道事件日志模塊

信道事件日志可以完整記錄所有的呼叫活動。這也意味著你需要更小心地規(guī)劃擬撥號計劃,畢竟它不可能自動開始工作。Asterisk的CEL模塊如下:

名稱 用途 評價
cel_custom 寫到磁盤文件 很有用
cel_manager 寫到AMI 很有用
cel_odbc 寫到ODBC 很有用
cel_pgsql 寫到PostgreSQL 很有用
cel_radius 寫到RADIUS 可以用
cel_sqlite3_custom 寫到sqlite3 很有用
cel_tds 寫到Microsoft SQL或Sybase,需要老版tds 可以用

信道驅動

沒有信道驅動,Asterisk就不可能建立呼叫。每種協(xié)議或信道類型都有自己特定的信道驅動。信道模塊可以看做是通往Asterisk內核的網(wǎng)管。Asterisk的信道驅動如下:

名稱 用途 評價
chan_agent 為Queue()提供坐席信道 很有用
chan_alsa 提供到高級Linux聲音架構(ALSA)的連接 很有用
chan_bridge 僅供ConfBridge()內部使用 很重要
chan_console 提供到portaudio的連接 不好說
chan_dahdi 提供到DAHDI接口卡的連接 很有用
chan_gtalk 提供到Google Talk的連接 可以用
chan_h323 提供H.323連接(已廢棄,見chan_ooh323) 已廢棄
chan_iax2 提供IAX2連接 很有用
chan_jingle 提供jingle連接 可以用
chan_local 把一部分撥號計劃當成信道 很有用
chan_mgcp 提供媒體網(wǎng)管控制協(xié)議(MGCP)連接 可以用
chan_misdn 連接到支持mISDN的ISDN卡 有局限
chan_multicast_rtp 連接到RTP多播流 很有用
chan_nbs 網(wǎng)絡廣播聲音(NBS)連接 不重要
chan_oss 開放聲音系統(tǒng)驅動 很有用
chan_phone LInux電話接口驅動,相當老 不重要
chan_sip 回話啟動協(xié)議 很重要
chan_skinny 思科瘦客戶端控制協(xié)議(SCCP) 可以用
chan_unistim 北電Unistim協(xié)議 可以用
chan_usbradio CM108 USB無線電接口卡 可以用
chan_vpb Voicetronix信道 不重要

編碼解碼器

編碼解碼器允許Asterisk轉換不同呼叫之間的音頻格式。如果一個呼叫來自PRI電路(使用G.711編碼),需要連接到一個SIP壓縮信道(使用G.729,SIP支持的編碼之一),那么相應的編碼解碼器就會執(zhí)行所需的轉換。

注:如果編碼解碼需要復雜的算法,大量的轉碼工作會對CPU造成負擔。有些像Sangoma和Digium廠商的卡會提供硬件解碼編碼。

名稱 用途 評價
codec_adpcm 自適應差分脈碼調制解調 不重要
codec_alaw 全世界PSTN(除了美國、加拿大)采用脈沖編碼調制的A-law算法 很重要
codec_a_mu A-law到Mu-law的轉換 很有用
codec_dahdi 使用Digium硬件解碼(需要Digium轉碼卡) 很重要
codec_g722 寬頻帶音頻編碼解碼 很有用
codec_g726 (TODO:不懂,大概類似于codec_adpcm) 不重要
codec_gsm 全球移動通訊系統(tǒng) 很有用
codec_ilbc 因特網(wǎng)低比特率編碼解碼 不重要
codec_lpc10 線性預測編碼生硬合成器 不重要
codec_resample 8-bit和16-bit間帶符號線性采樣 可以用
codec_speex speex編碼 可以用
codec_ulaw 用于美國、加拿大的 脈沖編碼調制的Mu-law算法 很重要

格式解釋器

格式解釋器調用編碼解碼器的功能,但他們操作文件而不是信道。如果你錄制了一段GSM音頻,要播放到其他非GSM信道,就需要一個格式解釋器。

如果你錄制成了多種格式(GSM,WAV),當某個信道需要該音頻時,Asterisk會選擇一個轉換代價最小的格式。

名稱 用途 評價
format_g723 G.723 .g723 不重要
format_g726 G.726 .g726 不重要
format_g729 G.729 .g729 很有用
format_gsm RPE-LTP (original GSM codec) .gsm 可以用
format_h263 H.263—video .h263 可以用
format_h264 H.264—video .h264 可以用
format_ilbc Internet Low Bitrate Codec .ilbc 不重要
format_jpeg Graphic file .jpeg .jpg 不重要
format_ogg_vorbis Ogg container .ogg 可以用
format_pcm Various Pulse-Coded Modulation formats: .alaw, .al, .alw, .pcm, .ulaw, .ul, .mu, .ulw, .g722, .au 很有用
format_siren14 G.722.1 Annex C (14 kHz) .siren14 不好說
format_siren7 G.722.1 (7 kHz) .siren7 不好說
format_sln16 16-bit signed linear .sln16 不好說
format_sln 8-bit signed linear .sln .raw 很有用
format_vox .vox 不重要
format_wav .wav 很有用
format_wav_gsm GSM audio in a WAV container .WAV, .wav49 可以用

撥號計劃函數(shù)

撥號計劃函數(shù)是對撥號計劃應用程序的補充,提供了一些有用的增強功能,比如字符串處理、日期時間轉換、ODBC連接性等。

名稱 用途 評價
func_aes 加密、解密AES字符串 很有用
func_audiohookinherit 允許呼叫轉移后仍被錄音 很有用
func_base64 編碼、解碼base-64字符串 可以用
func_blacklist 讀、寫astdb中的黑名單 很有用
func_callcompletion 存取信道的呼叫完成配置參數(shù) 不好說
func_callerid 存取CallerID 很有用
func_cdr 存取CDR變量 很有用
func_channel 存取信道信息 很有用
func_config 包括AST_CONFIG();從配置文件讀取變量 可以用
func_connectedline 改變已連接的信道信息(需要電話的支持) 不好說
func_curl 使用curl訪問URL 很有用
func_cut 對字符串切片或者切塊 很有用
func_db 提供astdb函數(shù) 很有用
func_devstate 獲得設備狀態(tài) 很有用
func_dialgroup 創(chuàng)建一個同時撥號組 很有用
func_dialplan 驗證指定的撥號計劃目標是否存在 很有用
func_enum 執(zhí)行ENUM查找 很有用
func_env 包括FILE(),STAT(),ENV()。執(zhí)行操作系統(tǒng)動作 很有用
func_extstate 返回指定的分機狀態(tài) 很有用
func_global 存取全局變量 很有用
func_groupcount 存取一個組的信道數(shù) 很有用
func_iconv 字符編碼轉換 可以用
func_lock 包括LOCK(),UNLOCK(),TRYLOCK();用于撥號計劃中的競爭控制 很有用
func_logic 邏輯判斷函數(shù),包括ISNULL(),SET(),EXISTS(),IF(),IFTIME(),IMPORT() 很有用
func_math 數(shù)學函數(shù),包括MATH(),INC(),DEC() 很有用
func_md5 生成MD5指紋 很有用
func_module 檢測模塊是否已經(jīng)裝載 可以用
func_odbc 訪問ODBC 很有用
func_pitchshift 修改音頻流的音調 很有用
func_rand 生成一個隨機數(shù) 很有用
func_realtime 在Asterisk實時架構中執(zhí)行查找 很有用
func_redirecting 獲取本次呼叫的轉發(fā)信息 很有用
func_sha1 生成SHA1指紋 很有用
func_shell 執(zhí)行shell命令,并返回結果 很有用
func_speex 執(zhí)行聲音調優(yōu) 很有用
func_sprintf 字符串格式化 很有用
func_srv 執(zhí)行SRV查找 很有用
func_strings 字符串處理函數(shù) 很有用
func_sysinfo 獲取系統(tǒng)信息,例如內存,交換空間和CPU負荷等 很有用
func_timeout 存取信道的超時時間 很有用
func_uri 把字符串做URI安全編碼 很有用
func_version 獲取Asterisk版本信息 可以用
func_vmcount 獲取語音信箱的消息數(shù) 很有用
func_volume 設置信道音量 很有用

PBX模塊

PBX模塊提供增強的控制和配置機制。

名稱 用途 評價
pbx_ael 提供AEL支持(很少有人用,如果不想用傳統(tǒng)的撥號計劃配置文件的話,大多數(shù)人會選擇AMI+AGI) 可以用
pbx_config 用于解釋extensions.conf,最傳統(tǒng)、用得最多的撥號計劃語言 很有用
pbx_dundi 執(zhí)行遠程Asterisk數(shù)據(jù)查找 很有用
pbx_loopback 類似于撥號計劃的include,有點過時 不重要
pbx_lua 支持使用lua編寫撥號計劃 很有用
pbx_realtime 提供Asterisk實時架構相關的功能 很有用
pbx_spool 和Asterisk外呼文件有關,提供外呼連接池 很有用

資源模塊

資源模塊用于集成外部資源。例如res_odbc用于訪問ODBC數(shù)據(jù)庫連接。

名稱 用途 評價
res_adsi 提供ADSI(盡管大多數(shù)ADSI功能Asterisk是不用的,但語音信箱用到這個資源) 很重要
res_ael_share 為pbx_ael提供共享程序(如果你使用AEL的話,這個模塊就很重要。) 很重要
res_agi 提供Asterisk網(wǎng)管接口 很有用
res_ais 使用注入OpenAIS一類的AIS實現(xiàn), 提供分布式消息等待指示和設備狀態(tài)通知 很有用
res_calendar 提供日歷系統(tǒng)的集成 很有用
res_calendar_caldav 提供CalDAV特定的能力 很有用
res_calendar_exchange 提供微軟Exchange的特定能力 很有用
res_calendar_icalendar 提供蘋果/谷歌的iCalendar特定能力 很有用
res_clialiases 創(chuàng)建CLI別名 很有用
res_clioriginate 從CLI發(fā)起一次呼叫 可以用
res_config_curl 使用curl拉取配置信息 很有用
res_config_ldap 從LDAP拉取配置信息 可以用
res_config_odbc 從ODBC拉取配置信息 很有用
res_config_pgsql 從PostgreSQL拉取配置信息 可以用
res_config_sqlite 從SQLite拉取配置信息 可以用
res_convert 使用CLI執(zhí)行文件編碼轉換 可以用
res_crypto 提供加密功能 很有用
res_curl 為其他curl模塊提供公共服務 很有用
res_fax 為其他fax模塊提供公共服務 很有用
res_fax_spandsp 為使用spandsp的傳真功能提供插件 很有用
res_http_post 為Asterisk的HTTP服務器提供POST上傳功能 可以用
res_jabber 提供Jabber/XMPP資源 很有用
res_limit 允許調整Asterisk進程的系統(tǒng)限制 可以用
res_monitor 提供呼叫錄音資源 很有用
res_musiconhold 提供等待音樂(MOH)功能 很重要
res_mutestream 提供音頻流的禁音和放音功能 不好說
res_odbc 為其他ODBC模塊提供公共功能 很有用
res_phoneprov (TODO:提供來自Asterisk HTTP 服務器的電話?不懂) 不好說
res_pktccops 提供PacketCable COPS資源 不好說
res_realtime 為Asterisk實時架構(ARA)提供CLI命令 很有用
res_rtp_asterisk 提供RTP 很重要
res_rtp_multicast 提供多播RTP 不好說
res_security_log 啟用安全日志 不好說
res_smdi 通過SMDI協(xié)議提供語音信箱通知 有局限
res_snmp 向SNMP管理的網(wǎng)絡提供系統(tǒng)狀態(tài)信息 可以用
res_speech 通用語音識別API 有局限
res_timing_dahdi 通過DAHDI內核接口提供時鐘 很有用
res_timing_kqueue 通過某些操作系統(tǒng)的特性提供時鐘 不好說
res_timing_pthread 使用標準pthread API提供時鐘;不是很有效率,但移植性好 很有用
res_timing_timerfd 通過新版Linux內核的timerfd API提供時鐘 很有用

附加模塊

附加模塊是社區(qū)開發(fā)的模塊,用法和版權條款都和Asterisk的主代碼不一樣。它們位于不同的目錄,缺省是不會編譯和安裝的。要啟用這些模塊就要使用menuselect構建配置工具。

名稱 用途 評價
app_mysql 在撥號計劃中執(zhí)行MySQL查詢(已廢棄,見func_odbc) 已廢棄
app_saycountpl 用波蘭語播報計數(shù)(已廢棄,已經(jīng)集成到say.conf中) 已廢棄
cdr_mysql 在MySQL中記錄CDR(我們推薦cdr_adaptive_odbc) 可以用
chan_mobile 允許手機通過藍牙接聽或撥打電話 有局限
chan_ooh323 支持H.323協(xié)議 可以用
format_mp3 支持播放MP3文件 可以用
res_config_mysql 使用MySQL數(shù)據(jù)庫作為實時配置后端 很有用

測試模塊

測試模塊被Asterisk開發(fā)團隊用來驗證新代碼。它們會被頻繁地添加或修改,對你沒什么用,除非你要開發(fā)Asterisk。

如果你是Asterisk開發(fā)者,你也許會對Asterisk測試套件有興趣,你可以執(zhí)行自動測試并將結果反饋給Asteisk項目。通過不斷地添加測試用例,Asterisk可以防止代碼腐爛。通過添加你自己的測試用例,升級的時候會更有把握些。

更多信息可以參考:
http://blogs.asterisk.org/2010/04/29/installing-the-asterisk-test-suite/
[http://svn.asterisk.org/svn/testsuite/asterisk/trunk/README.txt#asterisk-testing@'Freenode IRC network'](http://svn.asterisk.org/svn/testsuite/asterisk/trunk/README.txt#asterisk-testing@'Freenode IRC network')

文件結構

Asterisk是一個復雜的系統(tǒng),由很多資源組成。這些資源以不同的方式使用文件系統(tǒng)。既然Linux在這一點上很靈活,那就很有必要搞清楚什么數(shù)據(jù)存在什么地方(比如語音信箱文件、日志文件等)。
配置文件

Asterisk配置文件包括extensions.conf,sip.conf,modules.conf,以及各種信道、資源、模塊和函數(shù)用到的參數(shù)定義文件。這些文件一般位于/etc/asterisk,在做Asterisk的配置和管理工作時你經(jīng)常會進到這個目錄。
模塊

Asterisk的模塊一般會安裝到/usr/lib/asterisk/modules目錄。你一般不用關心這個目錄;但你知道模塊在什么地方有時候也很有用。例如,如果你升級Asterisk,并且用menuselect構建配置工具選擇了不同的模塊,老的(不兼容)模塊又沒有刪除,安裝腳本會提示警告信息。 應該從modules目錄中刪除 這些老的模塊文件 。要么手工刪除,要么調用make uninstall。
資源庫

有些模塊是需要外部數(shù)據(jù)源的。例如,等待音樂(MOH)就需要音樂文件才能播放。系統(tǒng)的語音提示也需要存儲到硬盤的某個地方。/var/lib/asterisk就是存放系統(tǒng)語音提示、AGI腳本、等待音樂(MOH)和其他資源文件的地方。

spool

spool是Linux操作系統(tǒng)的一種任務緩沖和資源共享機制。例如,Linux的打印任務和待發(fā)郵件都是先寫到spool然后在處理的。對Asterisk來說,spool用來存儲臨時性數(shù)據(jù),諸如語音消息,呼叫錄音,呼叫文件等。Asterisk的spool文件位于/var/spool/asterisk目錄。
日志

Asterisk能夠產生幾種不同的日志文件。/var/log/asterisk是存放CDR,CEL,調試(debug)日志,隊列日志,消息,錯誤和其他輸出的地方。這個目錄對調試、排錯至關重要。
撥號計劃

撥號計劃是Asterisk的核心。所有接入Asterisk的信道都要經(jīng)過撥號計劃。撥號計劃包含呼叫流腳本,處理所有呼叫。

有三種方式可以編寫撥號計劃:

使用傳統(tǒng)的撥號計劃語法:/etc/asterisk/extensions.conf

使用Asterisk擴展邏輯(AEL)語言:/etc/asterisk/extensions.ael

使用LUA腳本語言:/etc/asterisk/extensions.lua

本書后面會有幾章專門介紹撥號計劃語法(這也是用得最多的方式)。一旦你學會了這種語法,你可以考慮選擇轉向AEL或者LUA,看你自己。

硬件

Asterisk可以和各種技術通訊。一般來說,這種通訊是基于某種網(wǎng)絡連接的;當然,和傳統(tǒng)的電信網(wǎng)絡通訊(像PSTN)是需要特殊硬件的。

很多公司生產這種硬件,比如Digium(Asterisk的贊助商、所有人和主要開發(fā)者), Sangoma, Rhino, OpenVox,Pika,Voicetronix,Junghanns,Dialogic,Xorcom,beroNet,還有很多其他的。我們推薦Digium和Sangoma,當然其他廠商的產品可能更適合你的需求。

大多數(shù)硬件都是針對Digium Asteirsk硬件設備接口(DAHDI)設計的。這些硬件會有不同的安裝要求和文件位置。

在“第七章 外部連接性”中,我們會更詳細地討論DAHDI;當然,我們也會僅限于DAHDI的討論。你在安裝硬件的時候應該參考廠商的文檔。

Asterisk版本

Asterisk的發(fā)布方案在過去幾年中已經(jīng)經(jīng)歷了幾個來回了,本節(jié)的目的是為了幫助你理解版本號的含義。需要注意的是1.6.x系列的版本策略的變化,它跟所有其他的Asterisk版本都不一樣(從1.0到1.8,包括可以預見的未來)

以前的版本方案

當我們只有Asterisk 1.2和Asterisk 1.4的時候,所有的開發(fā)工作都在主線上進行,1.2分支和1.4分支上只進行缺陷修復。Asterisk 1.2已經(jīng)被標記為EOF(End of Life),不會再進行任何缺陷修復和安全更新。在1.6.x之前,所有的缺陷修復只會在1.4上進行。

由于所有的開發(fā)工作都在主線上進行,除非創(chuàng)建1.6分支,否則人們不可能得到新特性和新功能。也不是完全不可能,主要是由于主線上可能發(fā)生任何變化,要在生產環(huán)境上部署主線的話就要求管理員非常精通Asterisk(C源代碼級的精通)。

為了減輕管理員的壓力,也為了用戶盡快用上新特性(等幾個月而不是等幾年),一個新的版本方案建立了。1.6分支實際上變成了一個系列1.6.0,1.6.1,1.6.2,等等……,每添加一個新特性就升一個小版本號。目標是每3、4個月就能得到一個新版本,為管理員提供一個更短更清晰的升級路線。如果你需要新特性的話,只需要等上幾個月就可以了。

這些分支的標簽看起來就會像這樣: 1.6.0.1 -- 1.6.0.2 -- 1.6.0.3 -- 1.6.0.4 -- etc. 1.6.1.1 -- 1.6.1.2 -- 1.6.1.3 -- 1.6.1.4 -- etc. 1.6.2.1 -- 1.6.2.2 -- 1.6.2.3 -- 1.6.2.4 -- etc.

圖示如下:

所以到目前為止,我們有了這樣一些分支:1.2,1.4,1.6.0,1.6.1,1.6.2(沒有分支1.6)。在這些分支中,我們又創(chuàng)建標簽,比如1.2.14,1.4.30,1.6.0.12,和1.6.2.15。

很不幸,并不是像我們想的那樣每3、4個月就出一個小版本:至少也要6-8個月。不僅如此,1.6.x這種版本方案也有自己的問題。人們很困惑,不知道應該運行那個版本。

現(xiàn)在的版本方案

開發(fā)團隊從1.6.x系列中吸取了教訓。出發(fā)點是好的,但實施起來完全不是那么回事。所以,1.8的版本方案又變回去了,和1.2、1.4一樣。

雖然開發(fā)團隊仍然想盡快提供新特性使用(目前的目標定在一年一次),并且認識到對一個穩(wěn)定的版本提供長期支持也很重要。你可以認為1.4是一個長期支持版本(LTS),1.6.x系列可以看作是1.4的一部分。然后1.8是下一個長期支持版本(包括四年的缺陷修復和五年的安全更新)。

結束語

Asterisk由很多技術構成,其中很多自身就很復雜。所以,理解Asterisk的架構是很重要的。當然,Asterisk的設計還是很優(yōu)秀的,在我們看來,它很好地平衡了復雜度和靈活性。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,538評論 19 139
  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,613評論 9 468
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,208評論 2 33
  • 寒風蕭蕭起 白潮緩緩遲 秋意無需尋 念中冬將至
    傾新閱讀 107評論 0 0
  • 中午吃完飯,媽媽叫我洗碗,我不肯洗,媽媽就用碗轉的語氣說我的小洗碗機,快去洗碗吧!我就高興的去洗碗了。我一...
    張稼豐2閱讀 359評論 0 0

友情鏈接更多精彩內容