首页 > 其他分享 >freeswitch通过limit限制cps

freeswitch通过limit限制cps

时间:2022-11-23 17:44:06浏览次数:41  
标签:限制 呼入 limit freeswitch capacity cps

 

 

概述

freeswitch在业务开发中有极大的便利性,因为fs内部实现了很多小功能,这些小功能组合在一起,通过拨号计划就可以实现很多常见的业务功能。

在voip云平台的开发中,我们经常会碰到资源的限制,有外部线路资源方面的,也有voip平台内部资源方面。

根据资源的实际情况,对呼叫做限制,包括cps(每秒呼叫数,call per second)和capacity(呼叫容量),使用fs自带的limit接口,可以很方便的实现需求。

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.8.7

GCC:4.8.5

接口limit

freeswitch的mod_dptools模块中提供app接口“limit“。

limit <backend> <realm> <resource> <max[/interval]> [<transfer_destination_number> [<dialplan> [<context>]]

<backend>分三类,db,hash,hiredis。db依赖mod_db模块,hash依赖mod_hash模块,hiredis依赖mod_hiredis模块。

在fs官网文档三种backend的优缺点比较,从速度、持久化、集群能力和时间间隔支持四个维度的比较结果。

<realm>和<resource>,两个参数可以随意命名,最好的命名是简单直观,方便区分限制规则。

<max[/interval]>,有俩种格式,<max>表示限制并发容量,<max/interval>表示限制一定时间内的最大呼叫发起量。backend的db模式不支持interval。

transfer dialplan的方式,适用于多个dialplan规则之间的跳转,用的好的情况下会非常灵活方便。

限制cps示例

需求1,限制任意ip进入的cps(每秒呼叫数)为300每秒。

<action application="limit" data="hash inbound ${network_addr} 300/1 !EXCHANGE_ROUTING_ERROR"/>

需求2,限制任意ip一天的呼入数量为100通。

<action application="limit" data="hash inbound ${network_addr} 100/86400 !EXCHANGE_ROUTING_ERROR"/>

需求3,限制指定ip的cps为100每秒。

<condition field="${network_addr}" expression="^1.2.3.4$" break="never">

<action application="limit" data="hash inbound 1.2.3.4 100/1 !EXCHANGE_ROUTING_ERROR"/>

</condition>

需求4,限制呼出的线路资源的cps为20每秒

<action application="limit" data="hash outbound 5.6.7.8 20/1 !EXCHANGE_ROUTING_ERROR"/>

限制capacity示例

需求5,限制全平台capacity并发容量为5000通。

<action application="limit" data="hash inbound capacity 5000 !EXCHANGE_ROUTING_ERROR"/>

需求6,限制指定ip呼入的capacity并发容量为1000通。

<condition field="${network_addr}" expression="^1.2.3.4$" break="never">

<action application="limit" data="hash inbound 1.2.3.4 1000 !EXCHANGE_ROUTING_ERROR"/>

</condition>

需求7,限制呼出的线路资源的capacity并发容量为500通。

<action application="limit" data="hash outbound 5.6.7.8 500 !EXCHANGE_ROUTING_ERROR"/>

限制呼入呼出综合示例

如果我们需要对整个VOIP平台的做呼叫限制,包括cps和capacity,比较通用的做法。

<extension name="limit_dp" continue="true">

<condition field="caller_id_number" expression="^\d+$" break="never">

    <action application="limit" data="hash incps ${network_addr} 200/1 !EXCHANGE_ROUTING_ERROR"/>

              <action application="limit" data="hash incps all 300/1 !EXCHANGE_ROUTING_ERROR"/>

              <action application="limit" data="hash incapacity all 5000 !EXCHANGE_ROUTING_ERROR"/>

</condition>

</extension>

根据"limit_dp"的设置,限制规则如下。

incps_${network_addr},限制单个ip呼入的cps为200每秒。

incps_all,限制呼入总cps为300每秒。

incapacity_all,限制呼叫总容量为5000通。

总结

limit接口很灵活,可以根据具体场景设置不同的限制规则和多重规则。

在backend的选择上,大多数场景使用hash是最快最合适的,有数据持久化需求的场景才考虑hiredis,不建议使用db。

在有设置limit的freeswitch进程中,可以通过如下的命令查看当前的实时capacity容量。

./fs_cli -x 'limit_usage hash incapacity all'

1101

 

空空如常

求真得真

标签:限制,呼入,limit,freeswitch,capacity,cps
From: https://www.cnblogs.com/qiuzhendezhen/p/16919185.html

相关文章

  • mysql中eq_range_index_dive_limit参数学习
    ​概念官方文档如下描述:Thisvariableindicatesthenumberofequalityrangesinanequalitycomparisonconditionwhentheoptimizershouldswitchfromusingind......
  • 高级调度-Resourcequota-limitRange
    十二章:高级调度准入控制1.为什么生产一定要用ResourceQuota资源配额ResourceQuota2.1ResourceQuota配置#catresource.yaml==================================......
  • 前端项目npm打包出错问题-Reached heap limit Allocation failed - JavaScript heap o
    其实就是编译时的内存溢出,因为打包文件过大,刚好超过内存的限制大小造成编译中断。解决方案一通过package.json中的"build"加大内存增加--max_old_space_size参数解决方......
  • mysql 索引优化原则总结(limit where in like )
    优化原则:1.wherein和like效果等同,所以如果某个字段需要wherein或者like,请将该字段放到索引的最后2.limitstartnum,当start越大时候扫描的行数越多(即便是命中索引),越......
  • 解决MySQL使用limit偏移量较大效率慢的问题
    备注:第二个方法妥妥的问题描述在MySQL中,LIMITOFFSET偏移量特别大时,效率会非常低如果说LIMIT1000,10,一个偏移量很小的值,一般是没有问题的。但是,比如说,LIMIT10000000,10......
  • ThreadingTCPServer实现简单的Tcp服务器
    通过ThreadingTCPServer实现一个简单的Tcp服务器#!/usr/bin/envpython#-*-encoding:utf-8-*-'''@File:tcp_server.py@Description:@Time:......
  • SqlServer 的limit
     题目    limit:从倒数第二行开始,往前查找一行......
  • freeswitch如何判断挂机方
      概述freeswitch作为VOIP的软交换平台,需要对呼叫的信息做判断和归类。常见的呼叫信息中,挂机方向的信息对于话单统计有很大的用处。但是fs的原始话单和日志中并没......
  • idtcpserver发idtcpclient收发数据
    idtcpserver发idtcpclient收发数据//服务端AContext.Connection.IOHandler.ReadStream(stream);AContext.Connection.IOHandler.Write(stream2,stream2.Size,True);/......
  • PHP的TP框架的limit使用注意事项
    使用limit时需要注意不要用find()需要用paginage或select这种多选的方法比如: Db::name('user')->limit($offset,1)->order('id','asc')->find();......