注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

isblog主页

或许不一定要做得最多,但一定要做得最好! 能力就是一种财富,积累越多,就越体现你

 
 
 

日志

 
 

AGISPEEDY提升 Asterisk 10倍应用处理性能  

2012-03-06 09:11:37|  分类: Asterisk |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

转载:http://blog.sina.com.cn/s/blog_92e1da3101010ws8.html

据不完全统计,国内现在流行的托管式呼叫中心,中小型呼叫中心,高达80%的产品是基于开源的Asterisk开发的。Asterisk是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案。Asterisk是一种功能非常齐全的应用程序,提供了许多电信功能,能够把你的x86机 器变成你自己的交换机,还能够当作一台企业级的商用交换机。

    而Asterisk下的所有呼叫都受到Asterisk Extensions Language的控制管理,Extensions简单来说是一种脚本语言,而由于Extensions过于简单无法直接满足对于复杂业务流程有所需要的呼叫中心市场,这就有了AGI技术作为替代。AGI为(Asterisk Gateway Interface)简单的说就是Asterisk关口程序。通过由Asterisk向指定的一个程序发起呼叫请求,在这个程序进行处理后反馈给Asterisk。

类似这样:

Asterisk          操作系统

应答呼叫

处理流程--------->

                 启动PHP解析器

                 启动agi.php

                 处理业务流程

                 返回数据

       <----------

收到返回数据

处理余下流程

 

    这个过程,类似WEB领域的CGI,其缺陷是显而易见的。每次都要重复的打开一个新的进程,要初始化PHP或PERL或其他的语言结构体。正常几个呼叫当然无所谓,但是如果你同时有多个呼叫抵达,这就给操作系统造成了很大压力,这种压力叫做狼群效应。

 

    而FastAGI技术解决了这个问题,简单的说,他也是驻留内存的,并不需要asterisk在访问的时候由系统启动其自身进程,这样就极大的提高了相应请求能力。

 

    AGISPEEDY是一个基于FastAGI技术规范的应用服务器,他完全具备FastAGI的优点,解决了性能问题,同时他又没有继承FastAGI技术的缺点:

  • 单纯的FastAGI代码由于需要长期驻留内存运行,因此对编程者有极高的要求,否则将导致系统崩溃。
  • 大部分业务系统流程都需要进行修改,而对于FastAGI来讲,每次修改都需要重新启动FastAGI的进程,这样会造成呼叫终止 。

    那AGISPEEDY是如何实现的呢,AGISPEEDY是采用Linux下最为流行的预创建进程技术(由于PHP 5.3之前版本对于进程控制部分先天缺陷,实际上AGISPEEDY是全球第一个实现的),在客户请求前先创建足够数量的进程等待请求,当请求来临的时候,由其中一个进程相应这个请求,其将动态的把需要的那部分业务逻辑部分代码导入内存,相应请求。虽然这一流程性能效率要略微低于标准的FastAGI代码,但是由此确可以带来更好的可靠性。

 

下面我们举例在Centos 6.2下如何安装AGISPEEDY,其他版本的系统请注意PHP版本要大于5.3.0

 

1. 系统准备。

安装必要的函数库和软件包:yum install php php-process

 

2. 安装AGISPEEDY

访问http://agispeedy.googlecode.com下载agispeedy的安装包。

> tar zxvf agispeedy.X.X.tar.gz 
> cp -rf agispeedy/ / 
> cd /agispeedy/ 
> chmod +x bin/*

 

3. 第一次使用

进入调试模式的语法是这样,调试模式的优点是可以对代码进行直观的查看。

cd /agispeedy/bin/ 
./agispeedy.php --verbose 

asterisk的extension.conf

你以前可能是这样的语法:

[demo] 
exten
 => 8888,1,AGI(demo.php,digits=123456) 
exten
 => 8888,n,Hangup()

那么新语法是这样:

[demo] 
exten
 => 8888,1,AGI(agi://127.0.0.1/demo,digits=123456) 
exten
 => 8888,n,Hangup()

 

这个时候呼叫一下,就可以听到demo测试代码的语音提示了。

 

你的代码要放在agiscripts/目录下,由于agispeedy跟普通agi区别,所以agispeedy的代码跟普通agi相比稍微有所不同,不过根据笔者的感觉,其实比自己写普通agi还简单了。

 

4. 系统自动运行。这样操作就可以了,如果是非Redhat/Centos系统就要自己写启动脚本了:-(

> cp /agispeedy/contrib/agispeedy.init.centos /etc/init.d/agispeedy/ 
> chkconfig --add agispeedy 

AGISPEEDY的语法啥的参考http://code.google.com/p/agispeedy/wiki/DeveloperGuide可以得到帮助。

 

最后再说说性能。AGISPEEDY每秒可以响应平均100-200个请求,这不是并发呼叫,并发是由Asterisk控制的。Asterisk的语音处理能力是每秒大约16个(新版本,老版本大概在8个以内)。并且AGISPEEDY经过了100万次连续呼叫请求测试,可靠性是值得保障的。

 

背景资料:AGISPEEDY的作者hoowa.sun是国人,他也是开源运动的推广者,同时也是全球唯一的开源通信平台Freeiris的作者,其本人是一个不折不扣的技术狂人,每年1/3的时间用来写代码,但是写代码的效率是别人的5倍以上,那么2/3的时间都用来看电视剧,打游戏了。。。。。。

 

  评论这张
 
阅读(604)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018