Asterisk 部署模式思考

当将 Asterisk 实际部署到生产环境时,需要考虑如何进行部署,不同的部署模式是对不同 VoIP 协议的不同组合方式。

部署需要考虑服务端和客户端的使用情况和对不同资源的依赖情况。

  • 服务端考量因素
    • 使用 SIP 线路
    • 使用数字线路
    • 使用模拟线路
    • 是否部署多节点
  • 客户端考量因素
    • 通过 SIP 话机使用
    • 通过模拟话机使用
    • 通过桌面 SIP 客户端使用
    • 通过移动端 SIP 使用
    • 是否允许互联网访问
  • 对资源的考量因素
    • 带宽、延时
    • 录音磁盘存储
    • 数据库

私网 SIP 单机部署 - 最简场景#

  • 服务端选择通过 SIP 出局入局
  • 客户端通过 SIP 客户端局域网访问

该场景只需要将 Asterisk 配置为一个 SIP 服务端,并注册 SIP 线路进行出局。部署运维都十分简单,但因为单机,能承接的并发数有有上线,但现代的服务器的 8C16G 性能完全能承受,性能瓶颈主要来自于

  • 数据日志 - cel、cdr
  • 录音文件

带宽#

因为现在的 SIP 编码码率基本不会太高,局域网的千兆网卡即可承受至少 100+ 的并发,纯语音,如果涉及到视频,那么计算逻辑会有所不同。

  • ulaw 和 alow 为常见的 VoIP 编码 - 码率为 8Kbps
  • Opus 为相对现代化的编码 - 码率范围为 6Kbps - 510Kbps
  • H.263 是比较老的视频编码 - 码率为 90Kbps

💡: 视频编码主要与期望的清晰度有关,因此如果需要视频最好额外再进行评估。

Opus 按照最高码率计算, 510Kbps64KB/s,10M 带宽能承受 16 路并发,100M 能支持 160 路并发。因为出局也使用 SIP,因此需要考量 WAN 口带宽,目前家用带宽 100M+ 企业带宽 500M+,因此支持 200 路并发出局是没问题的。按照企业一般使用频率,最高峰可能是总坐席数的 50% - 30% - 10%,也就是至少能支持到 500 人/分机。

按照 500 分机,200 并发计算,对服务器的要求可能会转变为 CPU 和磁盘容量的要求。

录音文件#

录音文件按照 16K/s 计算,200 并发则为 3.2M/s。按照平均每分机每天通话 5 小时计算,则每天生成的录音文件为 57.6G,至少需要每天对录音文件进行压缩归档。因此需要额外部署 OSS 存储服务来处理录音文件。

💡空白录音文件

  1. wav 空白文件为 44 byte
  2. opus 空白文件为 872
# 删除空白文件
find . -size 44c -delete
# 时间范围
find . -type f -newermt 2017-9-28 ! -newermt 2017-9-29
# 15 分钟前到现在
find . -type f -mmin -15
# 删除这之前的数据
find . -type f ! -newermt 2017-9-29 -delete

数据库#

如果服务端开启了 cel 和 cdr,那么每次通话至少都会产生约 10 条日志,如果实现了自定义的事件处理,记录日志是必不可少的,且分析处理起来也更加方便,但带来的问题是存储量和 DB 压力。

按照 500 分机,200 并发计算,按照平均每分机每三分钟一通电话,一天按照 5 小时估计,则产生的日志量至少 20万 条,且和配置的分机处理逻辑非常相关相关,因此对于 DB 来说,也需要 2-3 天进行一次归档以保证 DB 的插入性能和磁盘的存储空间,因此这样的场景下也可能需要部署额外的分析型数据库。

转码#

当出局和入局编码不同时,如果编码是被允许的,那么服务端会进行转码操作,过多的分机进行转码对 CPU 的要求会非常高,可能会影响到通话的实时性。建议尽量配置为精心筛选后的编码,配合客户端选择合适编码以避免服务端转码。

此外等待音和播放的录音文件也针对每个筛选后的类型进行预先转码一份,这样在播放录音时服务端才不会进行额外的操作。

私网 物理线路 单机部署 - 常见场景#

通常企业可能都会申请一条数字电话线路,一般为 30B+D - 即 30 个并发,一般包含 200 个号码。当只有 1-2 条数字线路时,选择一张数字线路语音卡即可支持。但需要注意的是语音卡和数字线路也会对系统有一定资源占用,因为没有做过具体评估,但是需要按照 SIP 情况的 30% 进行预留。

如果不是使用数字线路,而是使用已有的模拟线路,那一般可能是相对小型的办公常见,常用的板卡单卡支持 8 路,一般模拟线路的卡会有 发热问题 因此也不建议单机插入过多的模拟卡。最好 2 张 16 路即可。

使用物理线路,配置 DAHDi 通道,需要注意系统要进行 DID/CID 的管理,否侧出局都是默认的号码,需要将实际的号码对应到对应 span 的具体通道上,在拨号前将需要的主叫号映射为 span 和 channel。

如果是使用模拟线路,可能客户端也会使用模拟话机,那么能支持的入局线路也会降低,如果板卡选择 4 FXO/4 FXS,则支持 4 坐席 4 出局线路。模拟话机牵涉到额外的布线,会相对麻烦,需要提前进行规划布局,长期来看需要进行维护。因此尽可能选择数字话机。

私网 物理线路 集群部署 - 中大型常见#

当有多个办公地点,多个线路,希望进行统一管理维护,希望线路共享,这时候需要部署多个服务端实例,此时的部署模式需要进行更多的考虑。

Asterisk 支持 IAX2 协议,IAX 为 Internal Asterisk eXchange,即 Asterisk 内部交换协议。

中心化访问 - 暴露 IAX2 出局

多实例部署时可以把每个物理线路节点暴露为一个 IAX2 的出局线路,客户端注册到中心服务器上,中心服务器通过 IAX2 与实际线路进行通信。

  • 优势
    • 统一管理用户注册
    • 单机数据库
    • 单节点维护 - 出局线路节点相对需要的维护内容较少
  • 劣势
    • 所有的访问需要先通向中心节点 - 可能涉及跨网络访问
    • 中心服务器性能是瓶颈 - 对中心服务器性能要求更高

去心化访问 - 暴露 SIP 出局

每个实例同等对待,所有节点访问相同的数据库,DNS 负载到最近的服务端 IP,话机就近注册。每个节点的出局线路暴露为 SIP,在客户端进行拨号时,服务端呼叫对应的 SIP 服务节点,实现直联。

  • 优势
    • 能支持更大规模
    • 能够实现容灾
    • 客户端通话直连 - 更好的实时性
  • 劣势
    • 对数据库性能要求更高 - 最好是分布式数据库 - 可能会有网络带来的延时
    • 必须需要分离日志存储 - 此时不建议所有日志还存 DB
    • 需要更多的维护工作 - 部署结构更加复杂

公网访问部署 - 服务商场景#

公网访问与私网访问主要的区别在于 NAT 和访问方式,私网可以使用 IP 直接连接,公网一般使用域名 SVR 记录进行连接。公网 NAT 需要依赖 STURN 服务器,建议部署自己的 STURN 服务器,使用国外的服务联通性会有影响。需要允许公网访问时暴露服务的服务器尽量不要在上层做过多的路由,否则可能会有穿透的问题。

此外公网部署需要对终端做更多配置,pjsip 的 endpoint 配置。

总结#

部署总的来说是每一层相互之间使用不同的组合方式,选择的组合方式不同,那么实际使用也会不尽相同。

尝试排列组合的问题和答案

  • 怎么使用线路 - 呼出/接入电话
  • 多少条线路
  • 客户端怎么接入
  • 怎么存储 - 录音、数据库
  • 怎么运维管理

当真正需要自行部署的时候多思考这些问题。