移动互联网的发展为整个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  

SIP协议搭建电信级VOIP/IM运营平台--架构篇(sip集群)的更多相关文章

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

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

  2. RocketMQ学习笔记(16)----RocketMQ搭建双主双从(异步复制)集群

    1. 修改RocketMQ默认启动端口 由于只有两台机器,部署双主双从需要四个节点,所以只能修改rocketmq的默认启动端口,从官网下载rocketmq的source文件,解压后使用idea打开,全 ...

  3. Mosquitto搭建Android推送服务(三)Mosquitto集群搭建

    文章钢要: 1.进行双服务器搭建 2.进行多服务器搭建 一.Mosquitto的分布式集群部署 如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简 ...

  4. (转)高性能网站架构之缓存篇—Redis集群搭建

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

  5. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  6. 微服务架构:Eureka集群搭建

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 服务注册.发现是微服务架构的关键原理之一,由于微服务架构是由一系列职责单一的细粒度服务构成的网状结构,服务之间通过轻量机制进行通信,这就必 ...

  7. 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 端 ...

  8. hadoop-2.6.0.tar.gz的集群搭建(3节点)(不含zookeeper集群安装)

    前言 本人呕心沥血所写,经过好一段时间反复锤炼和整理修改.感谢所参考的博友们!同时,欢迎前来查阅赏脸的博友们收藏和转载,附上本人的链接http://www.cnblogs.com/zlslch/p/5 ...

  9. 大数据平台搭建 - cdh5.11.1 - spark源码编译及集群搭建

    一.spark简介 Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,Spark 是一种与 hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同 ...

随机推荐

  1. open file /var/mobile/Media/DCIM 相册中获取到的视频地址使用 报错 视频文件不存在

    从相册中获取到的视频地址 例如  file:///var/mobile/Media/DCIM/100APPLE/IMG_9876.MOV 后面再使用的时候报错 视频文件不存在  那是因为在ios10. ...

  2. 使用 Appium 测试微信小程序 Webview

    打开调试功能 通过微信打开debugx5.qq.com,或者直接扫下面二维码   勾选[打开TBS内核Inspector调试功能]   Chrome查看页面元素 手机连接电脑,查看是否连接成功.如下展 ...

  3. OPPO F9 Pro在哪里打开usb调试模式的完美方法

    经常我们使用pc通过数据线连接到安卓手机的时候,如果手机没有开启USB调试模式,pc则没能够成功读到我们的手机,此情况我们需要找处理方法将手机的USB调试模式开启,今天我们介绍OPPO F9 Pro如 ...

  4. System.TimeoutException: The operation requested on PersistentChannel timed out

    这个异常是在使用EasyNetQ时,遇到的问题,找了两个小时. 详细错误 Error:System.TimeoutException: The operation requested on Persi ...

  5. vs2017更新出错:The entire Box execution exiting with result code: 0x0

    在将vs2017 15.7.4更新至15.9.5出现“The entire Box execution exiting with result code: 0x0”错误,也就是文件解压下载开始安装后, ...

  6. Java操作ini文件 ,解决properties文件中无法读取换行及空格

    1.依赖jar包 ini4j-0.5.4.jar 2.官网 http://ini4j.sourceforge.net/ 3.测试例子 [java] view plain copy package cn ...

  7. c/c++再学习:查找算法了解

    1.顺序查找 说明:顺序查找适合于存储结构为顺序存储或链接存储的线性表. 基本思想:顺序查找也称为线形查找,属于无序查找算法.从数据结构线形表的一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k相 ...

  8. Kafka文件存储机制及partition和offset

    转载自:  https://yq.aliyun.com/ziliao/65771 参考:  Kafka集群partition replication默认自动分配分析    如何为kafka选择合适的p ...

  9. CF987B - High School: Become Human

    Year 2118. Androids are in mass production for decades now, and they do all the work for humans. But ...

  10. PBRT笔记(10)——体积散射

    体散射处理过程 3个影响参与介质在环境中的辐射度分布的主要因素: 吸收:减少光能,并将其转化为别的能量,例如热量. 发光:由光子发射光能至环境中. 散射:由于粒子碰撞,使得一个方向的辐射度散射至其他方 ...