移动互联网的发展为整个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. Typescript---02 变量声明

    声明变量: let和const是JavaScript里相对较新的变量声明方式.let在很多方面与var是相似的,但是可以避免在JavaScript里常见一些问题. const是对let的一个增强,它能 ...

  2. ssh登录,爬坑系列

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

  3. c博客作业--分支、顺序结构

    1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 对于本章学习我感觉对代码有了初步的了解,一些简单的题目可以熟练掌握,但现在解决一道题目花的时间过多,不易发现那 ...

  4. 2、阿里云ECS发送邮件到腾讯企业邮箱(ECS默认不开启25端口)

    阿里云ECS默认禁用25端口导致发邮件失败. 方法一: 使用shell脚本发送邮件,需要配置mailx 1.安装软件 yum install mailx 2.配置 vim /etc/mail.rc在文 ...

  5. C语言作业3

    一.实验目的与要求 1.用for语句实现循环 (1)求数列前n项和 掌握for语句实现循环的方法 (2)求数列前n项和 掌握for语句实现循环的方法 循环嵌套的使用 2.用while循环语句实现循环 ...

  6. webpack分片chunk加载原理

    首先,使用create-react-app快速创建一个demo npx create-react-app react-demo # npx命令需要npm5.2+ cd react-demo npm s ...

  7. 学习使人快乐7--Mail收发原理+计划

    本篇了解邮件收发的原理与机制(smtp,pop3协议).不打算作重点学习辣~~~~~~~~~~~~~~~~ 日常感谢大佬gacl 另:打算把每周计划学的东西发在blog上面,勉励一下本咸鱼本周计划:1 ...

  8. 安装jar包到maven仓库

    1)将所要安装的jar包放在自定义目录下. 2)(maven环境变量配置无误的情况下)windows环境下,打开命令提示符,输入如下命令: mvn install:install-file -Dfil ...

  9. 源生API解析XML文档与dom4j解析XML文档

    一.XML语言 XML是一种可扩展的标记语言,是一种强类型的语言,类似HTML(超文本标记语言,是一种弱类型的语言).XML是一种通用的数据交换格式(关系型数据库),综上所诉:XML可以传输数据,也可 ...

  10. SpringBoot使用ELK日志收集

    本文介绍SpringBoot应用配合ELK进行日志收集. 1.有关ELK 1.1 简介 在之前写过一篇文章介绍ELK日志收集方案,感兴趣的可以去看一看,点击这里-----> <ELK日志分 ...