2KB项目,专业的源码交易网站 帮助 收藏 每日签到

OpenSIPS 负载均衡

  • 时间:2019-01-23 18:41 编辑:2KB 来源:2KB.COM 阅读:476
  • 扫一扫,手机访问
  • 分享
摘要:
OpenSIPS 英文原文:OpenSIPS load-balancing

1.  OpenSIPS中的负载均衡

“负载均衡”模块用来提供基于负载的通信流量路径选择。简言之,当OpenSIPS对发向一组目的地的呼叫请求进行路由选择时,它能够将每个目的地的负载情况(就是正在处理中的呼叫请求总数)记录下来,并将新的呼叫请求发向(当时)具有较少负载的目的地。OpenSIPS了解每个目的地的承载能力 —— 它预先配置有每个目的地能够接受的最大负载量。更准确地说,OpenSIPS在进行路由选择时,它会选择负载较小的目的地,而不是处理中的呼叫请求总数最小的那个目的地,它所选择的目的地只是当时具有最大的剩余处理能力的目的地。

另外,“负载均衡”(简称为LB)也能够接收来自目的地的反馈信息(只要目的地具备发送反馈信息的能力)。这种机制用于在目的地的最大承载能力发生变化情况下(比如GW增减了E1卡的数量),从目的地向OpenSIPS发送相应的通知信息。

“负载均衡”等同于增强型的“调度器”一。它们之间的区别就是具不具有关于路由目的地的负载信息:

  • 调度器不具有负载信息 - 它只是盲目地基于概率离差逻辑将呼叫请求转发到目的地。调度器不接受有关目的地负载情况的反馈信息(比如,关于实际处理过多少的呼叫请求以及正在处理中的呼叫请求有多少等信息)。
  • 负载均衡器是由负载驱动的。 - LB路由选择逻辑主要基于负载信息。为了对负载情况(处理中的呼叫请求)进行跟踪了解,LB模块使用了DIALOG模块。

2.  负载均衡 ——原理

当查看OpenSIPS中的LB实现方式时,我们要从这3个方面来考虑:

2.1  目的地集

一个目的地是用它的地址(一个SIP URI)及其承载能力的描述性信息来定义的。

从LB模块的角度来看,目的地并非是同构的 - 它们互不相同;它们的不同不仅仅在于承载能力不同,而且它们所提供的服务/资源的类型也不同。例如,你可能有一组用于提供媒体相关服务的Yate/Asterisk机器,它们当中有些机器是用于转码的,有些用于语音邮箱或者语音会议,有些用于简单的公告发布,还有一些用作PSTN转接终端(PSTN termination)。但你也可能会有一些混合使用的机器,比如一台同时处理PSTN和语音邮箱的机器。所以在目的地集中的每个目的地提供的是一组不同的服务/资源。

LB模块为每个目的地定义了它所提供的资源,并为它所提供的每一种资源,将其承载能力/最大负载量定义为该目的地为该资源所能提供的最大并发呼叫请求处理数。

示例:

4 destinations/boxes in the LB set
    1) offers 30 channels for transcoding and 32 for PSTN
    2) offers 100 voicemail channels and 10 for transcoding
    3) offers 50 voicemail channels and 300 for conference
    4) offers 10 voicemail, 10 conference, 10 transcoding and 32 PSTN

This translated into the following setup:

+----+----------+-------------------------+---------------------------------+
| id | group_id | dst_uri                 | resources                       |
+----+----------+-------------------------+---------------------------------+
|  1 |        1 | sip:yate1.mycluster.net | transc=30; pstn=32              |
|  2 |        1 | sip:yate2.mycluster.net | vm=100; transc=10               |
|  3 |        1 | sip:yate3.mycluster.net | vm=50; conf=300                 |
|  4 |        1 | sip:yate4.mycluster.net | vm=10;conf=10;transc=10;pstn=32 |
+----+----------+-------------------------+---------------------------------+

在系统运行是,LB模块提供的MI命令能够做到:

  • 重新载入目的地集的定义
  • 修改目的地的某一种资源的承载能力

2.2  调用负载均衡函数

使用LB功能非常简单 —— 你只需要将调用所需的资源类型传递给LB模块即可。

资源探测是在OpenSIPS的路由选择脚本中基于脚本所掌握的信息完成的。例如,通过查看RURI(所拨的号码),你就能够看出该呼叫是否必须转向PSTN,或者该号码属于语音邮件或会议号码;另外,通过查看SDP所宣告的编解码器,你就能够断定到底需不需要转码。

  if (!load_balance("1","transc;pstn")) {
      sl_send_reply("500","Service full");
      exit;
  }

该函数的第一个参数用来指定要使用哪个LB集(参见上文DB快照中的group_id列)。第二个参数是完成该呼叫所需的资源。第三个可选参数可以用来告诉LB引擎如何来估计负载情况 —— 这个参数或者是个绝对值(要使用多少个通道)或者是个相对值(百分比)。

load_balance()将自动为呼叫创建对话状态(这是为了对呼叫进行监控),并为呼叫分配所需的资源(从所选的机器中分配)
该函数将会把目的URI($du)设置为其所选择的目的地/机器的地址。

当呼叫结束后,资源将会被自动释放掉。

LB模块为管理员提供了一个用于查看所有目的地的当前负载情况的MI函数。

2.3  LB逻辑

LB在选择目的地时所采用的逻辑为:

  1. 基于group_idload_balance()函数的第一个参数)获得相应的目的地集
  2. 从该目的地集中挑选出能够提供所需资源load_banlance()函数的第二个参数)的所有目的地
  3. LB对所有挑选出的目的地进行评估计算出它们在所需资源方面的当前负载情况。
  4. 最后胜出的目的地就是所有目的地中每种资源最小可用负载的值为最大的那个。
示例:

LB中具有4个目的地/机器
    1) 提供了30个转码通道和32个PSTN线路
    2) 提供了100个语音信箱通道和19个转码通道
    3) 提供了50路语音信箱通道和300路会议
    4) 提供了10个语音信箱、10路会议、10个转码通道和32路PSTN线路

当调用load_balance("1","transc;pstn")时 ->

1) 只有机器(1)和机器(4)会被选上,因为它俩都提供了转码和pstn

2) 评估负载情况:
    (1) 转码 - 已占用10个通道; PSTN - 已占用18路 
    (4) 转码 - 已占用9个通道; PSTN - 已占用16路

   评估可用负载(承载能力-负载)evaluating available load (capacity-load) :
    (1) 转码 - 20个通道可用; PSTN - 14路可用 
    (4) 转码 - 1个通道可用 PSTN - 16路可用 

3) 每个机器的最小可用负载(在整个资源中)
    (1) 14 (PSTN)
    (2) 1 (transcoding) 

4) 最后选择了机器(1),因为对于使用量最大的资源,它具有最大(=14)的可用负载。

该选择算法会尽量避免过度使用每个机器的某一个资源。

2.4  目的地的禁用和有效性探测

负载均衡模块提供了一组用于有助于处理目的地失效问题的功能。失效目的地的真正探测过程(基于SIP流量)是在OpenSIPS的路由选择脚本中完成的,该脚本通过接收自目的地的回应代码来完成探测的(参见本教程的结尾处的代码)。

一旦探测出某个目的地已失效,你就可用在脚本中使用lb_disable()函数将其标示为失效目的地—— 在目的地被标示为禁用目的地后,LB过程中就再也不会使用该目的地了(在对呼叫进行路由选择时,LB将不再将其作为目的地使用了)。

想要把一个目的地设置回可用状态,有两个办法:

  • 从OpenSIPS的外部,使用MI命令lb_status手动恢复其状态 
  • 基于探测的方法 —— 目的地必须打开有效性探测功能,打开之后,一旦该目的地开始对SIP的ping命令回应200 OK(参见probing_reply_codes 选项),它就会被自动设置会可用状态。

要打开有效性探测功能,你首选需要将probing_interval设置为一个非零值 —— 该值用来指定ping命令的发送频率。 有效性探测是通过向目的地周期性发送一个OPTIONS SIP请求来完成的 —— 参见probing_method选项。

为了控制对哪个目的地和什么时候对这些目的地进行有效性探测,load_balancer表中有一个probe_mode列——参见table definition。该列所允许的选项是:

  • 0 任何时候都不进行探测
  • 1 只在禁用之后才进行探测(用于目的地的自动重新启用)
  • 2 一直都进行探测——这将在目的地没有对探测进行回应时将其禁用并在目的地重新开始回应探测之后将其重新启用。

2.5  对负载均衡器进行实时控制

负载均衡器模块提供了几个用来让你在负载均衡器运行过程中对其进行修改或者从中获得事实信息的MI命令。

在运行过程中推进变更:

  • lb_reload - 迫使LB从DB中重新载入整个所有的配置信息 - 参见 更多..
  • lb_resize - 为一个目的地修改其某资源的承载能力 - 参见 更多..
  • lb_status - 修改目的地的状态(启用/禁用)- 参见 更多..

获取实时信息:

  • lb_list - (按资源)列出所有目的地的负载情况 - 参见更多..
  • lb_status - 查看目的地的状态(启用/禁用) - 参见更多..
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部