freeswitch通过limit限制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
空空如常
求真得真
freeswitch通过limit限制cps的更多相关文章
- freeswitch呼叫流程分析
今天翻文档时发现之前整理的关于freeswitch呼叫相关的内容,写成博文分享出来也方便我以后查阅. 整体结构图 FreeswitchCore 模块加载过程 freeswitch主程序初始化时会从mo ...
- FreeSwitch 终端命令详细介绍
FreeSwitch版本:1.6.9 以下为部分终端命令 alias 语法: alias [add|stickyadd] <alias> <command> | del [&l ...
- FreeSWITCH 总体架构
[1]总体结构 [2]代码结构目录 [3]模块简介 Applications应用 mod_abstraction – 提供了一个抽象的API调用(未来有更多功能)Provides an abstrac ...
- freeswitch APR-UTIL库线程池实现分析
概述 freeswitch的核心源代码是基于apr库开发的,在不同的系统上有很好的移植性. APR库在之前的文章中已经介绍过了,APR-UTIL库是和APR并列的工具库,它们都是由APACHE开源出来 ...
- 生成freeswitch事件的几种方式
本文描述了生成freeswitch事件的几种方式,这里记录下,也方便我以后查阅. 操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 在freeswitch代码中加入事件 ...
- freeswitch模块之event_socket
这是我之前整理的关于freeswitch mod_event_socket的相关内容,这里记录下,也方便我以后查阅. mod_event_socket以socket的形式,对外提供控制FS一种途径, ...
- freeswitch对接其它SIP设备
这几天用到freeswitch对接其它设备方面的知识,这里整理下,也方便我以后查阅. 操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 一.freeswitch作为被叫 ...
- freeswitch注册过程分析
操作系统:debian8.5_x64freeswitch 版本 : 1.6.8 本文仅描述sip注册的简单场景,即话机直接向处于同一个局域网的fs进行注册. SIP协议的消息结构 消息框架 SIP协议 ...
- freeswitch嵌入python脚本
操作系统:debian8.5_x64 freeswitch 版本 : 1.6.8 python版本:2.7.9 开启python模块 安装python lib库 apt-get install pyt ...
- mysql limit分页查询优化写法
在mysql中进行分页查询时,一般会使用limit查询,而且通常查询中都会使用orderby排 序.但是在表数据量比较大的时候,例如查询语句片段limit 10000, 20,数据库会读取10020条 ...
随机推荐
- HDU-3591 混合背包
The trouble of Xiaoqian Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/ ...
- bash shell笔记整理——head命令
作用 我直接搬运官方英文了,这英文真的简单直白了,我英语辣鸡...毕竟我学历不行,觉得翻译不好就直接自己来吧.. Print the first 10 lines of each FILE to st ...
- 数据智慧:C#中编程实现自定义计算的Excel数据透视表
前言 数据透视表(Pivot Table)是一种数据分析工具,通常用于对大量数据进行汇总.分析和展示.它可以帮助用户从原始数据中提取关键信息.发现模式和趋势,并以可视化的方式呈现. 在数据透视表中,数 ...
- 安装华企盾DSC防泄密软件:编辑文件不加密常见问题,运维工程师必看
1.先查看客户端日志主进程是否是加密进程.日志中是不是勾选智能半透明.加密类型是否有添加 2.用procmon监控保存的文件找出writefile的进程是否有添加,进程树是否有父进程,加密类型是否正确 ...
- Kiractf
信息收集 主机发现和端口扫描只开放了80的web服务 WEB打点 访问首页有文件上传,肯定可以利用一波.language那个页面甚至文件包含都写脸上了. root@Lockly tmp/ki ...
- 2024-01-03:用go语言,给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time, 分别表示给 n 堵不同的墙刷油漆需要的开销和时间。你有两名油漆匠, 一位需要 付费 的油漆匠
2024-01-03:用go语言,给你两个长度为 n 下标从 0 开始的整数数组 cost 和 time, 分别表示给 n 堵不同的墙刷油漆需要的开销和时间.你有两名油漆匠, 一位需要 付费 的油漆匠 ...
- Java数组中常见的方法
一.前言 代码: //给定一个数组 int[] arr = {234,312,32,1321,321,43}; int[] arr1 = new int[6]; int[] arr2 = {1,3,7 ...
- linux_文本处理工具详细介绍
文本处理工具 1. grep工具 grep是行过滤工具:用于根据关键字进行行过滤 语法和选项 语法: # grep [选项] '关键字' 文件名 常见选项: OPTIONS: -i: 不区分大小写 - ...
- 新晋“网红”Cat1 是什么
摘要:此Cat非彼Cat,它是今年物联网通信圈新晋网红"靓仔". 引言 今年5月,工信部发布了<关于深入推进移动物联网全面发展的通知>,明确提出推动存量2G.3G物联网 ...
- 二进制SCA指纹提取黑科技:Go语言逆向技术
摘要:SCA(Software Composition Analysis)软件成分分析,指通过对软件源码.二进制软件包等的静态分析,挖掘其所存在的开源合规.已知漏洞等安全合规风险,是一种业界常见的安全 ...