移动互联网的发展为整个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. 高可用Redis(十):Redis原生命令搭建集群

    1.搭建Redis Cluster主要步骤 1.配置开启节点 2.meet 3.指派槽 4.主从关系分配 2.环境说明 两台虚拟机,IP地址分别为:192.168.81.100和192.168.81. ...

  2. JS中定义对象和集合

    在js中定义对象: 方式一: var obj = {}; obj['a']=1; obj['b']=2; 方式二: var obj=new Object(); obj.a=1; obj.b=2; 在j ...

  3. ssh登录,爬坑系列

    最近在实验室弄ssh登录,结果被虐了,要注意以下: 1.主机名不能包括   -     _    !  等非法字符. 2.如果hadoop格式化时,报:“SHUTDOWN_MSG: Shutting ...

  4. UNIX哲理名言(中英文对照)

    UNIX 的特点: Everything (including hardware) is a file.所有的事物(甚至硬件本身)都是一个的文件. Configuration data stored ...

  5. CAS5.3.0安装部署

    部署环境:JDK1.8.x maven-3.5.2 tomcat-8.x.x 1.下载地址 https://github.com/apereo/cas-overlay-template/tree/5. ...

  6. Definition of matrix norms

    In my previous post, I introduced various definitions of matrix norms in \(\mathbb{R}^{n \times n}\) ...

  7. twig模板的进一步学习以及在symfony当中的使用

    首先,twig可以理解为用于输出html代码的,虽然用PHP等其他语言也可以输出,但是twig更为简洁高效,同时twig模板被编译成原生的php类缓存起来,所以才会这么快, 其实twig跟php类差不 ...

  8. sklearn库 线性回归库 LinearRegression

    import numpy as np import sklearn.datasets #加载原数据 from sklearn.model_selection import train_test_spl ...

  9. session的创建和销毁时间

    什么时候创建session ? 在你的服务器端发现没有该客户端的session,那么创建 什么时候销毁? 1.关闭客户端的时候 2.手动销毁 3.过期

  10. [Union]C++中Union学习笔记

    C++ union结构式一种特殊的类.它能够包含访问权限.成员变量.成员函数(可以包含构造函数和析构函数).它不能包含虚函数和静态数据变量.它也不能被用作其他类的基类,它本身也不能有从某个基类派生而来 ...