移动互联网的发展为整个VOIP通信行业开拓了新的战场,一时间各类即时通信软件如雨后春筝般冒了出来,再一次创造了移动互联网的发展神话。SIP协议做为音视频通信的首选标准,应用也越来越广泛。

---------------------------神奇的分割线 以下内容为干货------------------------------------
本文以SIP协议为基础,以实现电信级VOIP运营平台为背景,结合当前中国的网络特点,探讨如何构建服务器端平台。
中国是特色社会主义国家,其特色表示在社会生活的方方面面,其中包括我们的三种3G标准,电信和联通的固网布局,也体现在各式各样的网络接入。为满足特色的需要,我们需要完成具有特色社会主义的服务平台,至少满足以下需求:
1。满足最基本条件:负载均衡、冗余备份、稳定性、可用性、可扩展性。
2。中国网络特点:因历史原因形成的天然网络屏障,各种二级运营商林立,各种封杀,各种端口限制、流量限制、协议封杀等,以及各种网络设备、防火墙的奇形怪状问题。
下面我们直接从整个系统的架构开始分析:
SIP服务架构采用两层模式,相对用户而言,第一层是SIP Outbound Proxy,下面简称OB。OB需根据运营商和地域不同,部署在全国各地,具体部署策略一方面是需要考虑成本,另一方面需要考虑所部点的覆盖面,这也决定了用户登录时OB服务器的分配策略。
其主要作用是:
1.扛用户连接,根据之前博文描述《移动互联网SIP在线状态方案分析》建议用户与服务器之间使用TCP连接,因此OB首要任务是接受用户请求。
2.连接保活,不管使用TCP还是UDP,都需要进行保活,具体方案可参见前博文《移动互联网SIP在线状态方案分析》。
3.转发服务,OB是outbound proxy服务,只是接收请求并根据SIP request-line进行转发。
第二层是SIP APP Server, 这些是应用服务器的总称,可根据业务需要添加各类应用服务器,比如用于IM的聊天服务器,即所有MESSAGE消息通过此服务器进行转发;用于视频通信的SIP Proxy;用于处理自助服务的B2BUA;也可以添加用于支持PSTN的计费和路由服务等。下面简称APP。因OB是部署到不同地域、不同运营商的网络中,为保证OB与APP的连接速度,需要将APP部署BGP机房。同时APP服务器不需要直接向用户服务,为保证APP服务器的安全,需要添加防火墙并设置白名单。
通过两层架构,将核心业务层与用户分离开来,SIP 消息的传输是先到用户已连接的OB,然后OB根据不同的业务转到对应的APP,如果是需要转到被叫的,APP服务先从DB中获取被叫的Location信息,然后将消息转发到被叫所在OB,OB再转发给最终用户进行处理。由此带来的好处就是高扩展性,APP可根据业务需求进行无限扩展,同时可以对APP进行热替换升级,而不影响用户正常使用。以下讨论一些实际问题:
1.OB和APP服务器的分配策略:
通常有两种方法,一是有一个配置服务器,由用户主动去取配置,此时就可根据用户的IP信息获取对应的服务器。不过此种方法通常不够准确,一些小的借网运营商出口通常不在当地城市,如果是移动终端建议加上手机号码和GPS经纬度综合计算。同此配置服务也需要收集OB和APP的负载信息及存活信息,以实现动态分配和负载均衡。注意不要让配置服务变成一个单点。
另一种方法是使用DNS动态解析,此方法在网上已有较多介绍,此处就不再敷述。其分配方法可参考以上策略。
2.OB服务端口选择:
不建议使用默认5060端口,较多的防火墙会对5060端口上数据进行过滤。建议使用如443这样的端口,多数防火墙不会去解析此端口数据。
3.应对端口封杀
较多的企业办公网络都有端口限制,并且限制规则各式各样,针对此类问题,在OB上监听多个常用端口,客户端先尝试一个默认端口(解决80%的问题),如果失败再启用多端口检测,连接成功哪个就用哪个。
4.应对攻击
这里提到的攻击是指来自外部的,比如屡试不爽的DDOS攻击。当遇到这种情况那就只能自求多福了,但此架构分为两层,对攻击者而言只能针对某一区域的OB服务器攻击,最坏情况就是某区域停止服务,并不会导致整个系统全部瘫痪。
5.用户有效性
图中的一个用户有两个连接分别连到两个OB服务是指一个SIP UA可以有多个连接,分别连接到不同的OB,且两个连接都是有效的,这是通过sip contact header中的 reg-id来标识的,具体用法见RFC5626。但由此带来的流量也Double了,是否有用就需要根据业务情况权衡了。
6.RTP传输
此文主要描述SIP架构,RTP传输策略之后再描述。
描述此种架构的标准是RFC5626,如果想实现此类方案建议仔细阅读此RFC。
参考资料
SIP RFC5626  
OUTBOUND PROXY http://www.voip-info.org/wiki/view/SIP+outbound+proxy

SIP协议搭建电信级VOIP/IM运营平台--架构篇(sip集群)相关推荐

  1. 运维小姐姐说这篇Consul集群和ACL配置超给力(保姆级)

    前言 上一篇简单介绍了Consul,并使用开发模式(dev)进行流程演示,但在实际开发中需要考虑Consul的高可用和操作安全性,所以接着来聊聊集群和ACL的相关配置,涉及到的命令会在环境搭建过程中详 ...

  2. ClickHouse数据库培训实战 (PB级大数据分析平台、大规模分布式集群架构)

    一.ClickHouse数据库培训实战课程 (PB级大数据分析平台.大规模分布式集群架构)视频教程 为满足想学习和掌握ClickHouse大数据分析专用的数据库,风哥特别设计的一套比较系统的Click ...

  3. mysql 数据库集群搭建:(四)pacemaker管理三台maxscale集群,搭建mariadb读写分离中间层集群...

    为什么80%的码农都做不了架构师?>>>    <mysql 数据库集群搭建:(一)VirtualBox中多台CentOS虚拟机间和windows主机间互通以及访问互联网设置& ...

  4. 百度可观测系列 | 如何构建亿级指标的高可用 TSDB 存储集群?

    [百度云原生导读]在前一篇<采集亿级别指标,Prometheus 集群方案这样设计中>,我们为大家介绍了针对针对亿级指标场景,百度云原生团队基于Prometheus 技术方案的研究,包括资 ...

  5. Mycat高可用架构原理_Mycat集群搭建_HA高可用集群_高可用_单表存储千万级_海量存储_分表扩展---MyCat分布式数据库集群架构工作笔记0027

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 前面我们已经讲了,对于数据库来说,mycat可以,我们通过搭建一主一从,双主双从,来实现数据库集群 ...

  6. kuberbetes的架构与kubernetets集群搭建

    目录 一.k8s概述 1.k8s是什么 2.K8S是做什么用的? 3.为什么要使用K8S? 4.k8s架构图解 5.角色与功能 1)Master管理节点(管理节点) 2)node计算节点 6.mast ...

  7. 高性能网站架构之缓存篇—Redis集群搭建

    看过 高性能网站架构之缓存篇--Redis安装配置和高性能网站架构之缓存篇--Redis使用配置端口转发 这两篇文章的,相信你已经对redis有一定的了解,并能够安装上,进行简单的使用了,但是在咱们的 ...

  8. 蚂蚁集团俞仁杰:金融级云原生之多活容器集群高可用建设实践

    本文整理自蚂蚁集团金融云产品技术部SOFAStack产品专家俞仁杰在2020 GIDC全球互联网数据大会的分享.详细讲解了云原生架构下的多活高可用平台和产品建设相关经验和观点. 过去几年是云原生理念高 ...

  9. Redis【第二篇】集群搭建

    第一步:准备 1.安装包 ruby-2.4.0.tar.gz rubygems-2.6.10.tgz zlib-1.2.11.tar.gz redis-3.3.2.gem 2. 架构: 名称 IP 端 ...

  10. 启动hadoop没有resourcemanager_5.hadoop-MR YARN架构理论与集群搭建

    MR原语 输入(格式化k,v)数据集map映射成一个中间数据集(k,v)reduce 相同"的key为一组,调用一次reduce方法,方法内迭代这一组数据进行计算 计算框架 Partit ...

最新文章

  1. 删除json中为空的key-value键值对
  2. 针对Selenium环境搭建的一些小解说
  3. H5添加禁止缩放功能
  4. linux测试网络是否连通ping、telnet命令
  5. html5+css3第一次作业_在家写作业日记200字
  6. 在CentOS 6上用Samba Client访问windows共享文件夹
  7. mysql表 spid program_SQL Server 表,记录 死锁解决办法
  8. sort()基本用法
  9. 利用Caffe训练模型(solver、deploy、train_val)+python使用已训练模型
  10. Audiolatry RetroVibes for Mac - 虚拟乐器插件
  11. 计算机录入技术五笔输入法教案,五笔打字教案
  12. 杰奇reader.php源码,最新杰奇CMS Jieqi V2.4 静思文学源码全解密开源版完整源码分享,附带关关采集杰奇V3.5版程序...
  13. matlab希尔伯特变换,希尔伯特变换和傅里叶变换MATLAB仿真
  14. Nexmo 短信平台接口 遇到的坑
  15. 红皮书再总结——实例四
  16. HP G32笔记本 拆机图解
  17. Selenium2学习(四)-- xpath定位
  18. JS获取浏览器UA(User Agent 用户代理)方法
  19. XMind、Axure、Visio这三个软件产品经理需要掌握哪个?要掌握到什么程度?
  20. python 脚本梦幻西游_GitHub - U200915104/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...

热门文章

  1. Pravega Flink connector 的过去、现在和未来
  2. 收藏+下载!Flink 社区最全学习渠道汇总
  3. 为什么说 80% 的程序员都缺乏基本功?
  4. 关于直播,所有的技术细节都在这里了(四)
  5. java 栈和队列实现迷宫代码_用栈结构实现队列结构,用队列结构实现栈结构
  6. ant接口用什么天线_拆解测量真假钻石手台天线SRH805S
  7. pyton-虚拟环境以及django的初步使用记录信息
  8. 关于iis w3wp.exe
  9. python人脸识别要怎么实现_详解如何用OpenCV + Python 实现人脸识别
  10. python程序流程控制结构_Python程序控制结构 | 分支结构