FreeSWITCH中文 FreeSWITCH案例大全
← 目录

SIP中继接入高可用方案

SIP中继

SIP中继(SIP Trunking)是一种IP连接,在您的平台与防火墙以外的Internet电话服务提供商(ITSP)之间建立SIP通信链路。通常情况下,SIP中继用于将平台的中央站点连接到ITSP。是一种中间信令转换层代理服务。

中继服务也可以认为是一个B2BUA,作为SIP呼叫两端的用户代理,负责处理呼叫两端的所有SIP信令,从呼叫确立到终止全程跟踪每个呼叫。FreeSWITCH是一个中继实现方案,可以通过sip_profile中的endpoint来指定局端连接信息,通过dialplan来规划呼入、呼出拔号路由规则,也可以实现号码规则变换。

FreeSWITCH中sip_profile有一个默认的端点external开放5080和5081的tcp、udp端口用来作为对外提供服务的接入点,对外提供服务。你也可以复制external目录和external.xml配置,修改名字为mine-trunk,mine-trunk.xml,并修改profle的name字段为mine-trunk,同时修改sip-port,tls-sip-port的端口分另为5082,5083。并在mine-trunk目录下建立一个gateway,填写运营商提供的中继接入点realm,password,proxy等信息。通过fs_cli工具执行 sofia profile mine-trunk start启动中继服务监听进程。

至此就有了一个简单的中继服务接入点了,接下来就看我们以怎样的方式来进行接入,每个接入点是否可靠,怎么来保证它的可靠性了。

对接场景

做为一个通信集成云平台,主要关注的点在平台的综合业务上,对于运营商、线路商等服务资源提供商要有一个统一的口径进行入局、出局的管理,和现有的业务场景进行隔离,提供统一的标准接口,一但资源标准化后,就可以实现针对业务的可插拔式管理,可以达到自由切换及自动切换。

中继接入服务基本都是暴露在公网上的,双向对等信令交互(即呼入为A服务直接向B服务发起invite信令,呼出为B服务直接向A服务发起invite信令,双端都是服务提供方,也都是信令发起方)的一种服务。

基本都是通过双端配置白名单的方式来确保服务的安全性,有一些提供商为了增加安全的级别,在有白名单的基础上,还会要求使用用户名、密码的认证方式。

上面提到的都是自己的中继节点和运营商等服务提供商的对接方式,对接成功后接下来要考虑的是如何将本中继节点和自己的媒体业务平台对接起来。

负载策略

呼叫分为两个方向,呼入、呼出,针对两种方式的实现方式有所不同。我们就从呼叫方向上来进行说明。

呼入

对于和外部的接入方肯定是希望我们提供的接入方式越简单越好,最简单的方式就是一个IP,一个端口,再说明支持的协议,对方就可以很简单的配置使用了,很多传统的企业也都是这么用的,这样就会有单点故障的风险。

  • 优化方案1:

    由于传统方式直接告诉接入方的是一个具体的公网IP地址,如果机器宕机短时间内无法恢复,只能线下电话给对方的接口人告知新的接入IP,需要技术人员操作线上服务修改接入IP,才能恢复正常。用域名来配置这个对外的多个IP,把域名告知接入方,如果其中一台出现了故障只需要把域名解析的IP列表中把故障的这台给去掉,对于接入方来说,在一定的周期内故障可以自动消除,看起来是一个不错的解决方式。

    但是对于出现故障的服务方仍然需要有比较好的告警机制,能第一时间感知到服务有问题了,需要时刻待命,当服务出现问题手工修改DNS配置列表。当然有些域名提供商可以提供能力开放,能开放针对域名解析列表的准实时的更新接口,可以保证在秒级内排除掉故障IP的能力接口。我们需要做的是写一个监控服务,探测服务的存活情况,一但发现并确定某IP的服务不可用立即调用域名服务商的能力接口,去掉不可用IP。

    这个方案听起来不错,我们的服务层不需要做任何修改就能做到服务高可用。但是实际情况有两个约束,一是:域名服务商目前提供这种服务还不普及,或是要求你有一定规模后才能给出这种接入方式,二是:接入方以域名方式来访问,对于域名解析出来的IP列表缓存时间也是由于不同的接入方而有差异,如果接入方的刷新时间比较长,故障消除时间也会比较长,这样听起来还是有一定的瑕疵。

  • 优化方案2:

    FS官网上也给出了一个HA的方案,FS官方HA方案,这个方案通过keepalived的方式来做双机热备,解决了上述使用域名的两种问题。

    它的主要原理就不用多讲了,可以搜索keepalived关键词来了解一下。主要是通过配置vip地址来映射两台真实主机,对外提供vip地址,使用物理心跳线将双机连接,当然也可以通过网络来探活,但是会有脑裂的现象存在,大多数都会选择物理心跳线连接的方式。这种方式只能保证同一时刻只有一台主机对外提供服务,对于机器资源来说是一种严重的浪费。

  • 优化方案3:

    针对中继的接入点,只传信令,不过媒体,所以单台并发TPS:6000+都不是问题,所以在方案2的基础上如果能将两台主机都能充分的利用上,对于万级并发的通信平台的接入网关来说足够用了。

    我的实际应用中,部署了一个双地址漂移的方案,如:有机器A,机器B,做两个vip地址,分别为vip-A,vip-B,vip-A:是以A机器为主机服务,B机器为备机服务,vip-B:是以B机器为主机服务,A机器为备机服务,这样就产生了两个vip地址,这两个vip地址都是高可用的,不管哪一台出现问题,只要切换逻辑没有问题,只要不是两台机器同时宕机,这两个虚地址都是可访问的。我们再利用传统的域名配置方式来对两个永远可以提供服务的IP进行配置,来分担业务量,就可以避免域名引起的IP切换问题,也可以解决普通的keepalived机器利用不充分的问题。

针对呼入的中继服务节点本身的高可用方案直接使用了方案3。可以解决接入方和中继节点本身的单点问题,接下来SIP信令流过SIP Trunking服务后,最终还是要被送往媒体服务做具体的媒体业务处理的,接下来我们就看一下,SIP Trunking服务如果和媒体业务服务保持一个高可用的。

我们的业务类型是以企业的某一种固定ID的形式进行一致性hash到相对固定的媒体服务上去做实际业务处理的,


本书版权所有 © 杜金房及各位贡献者 2016-2023,仅供在线阅读,谢绝一切形式转载。