1.1项目概况
本文提出的技术方案就是利用先进的软交换技术为客户提供搭建一个完整的基于通信云计算架构的指挥调度系统平台,并为其提供及时、可靠的技术保障。
1.2业务需求
基于我们对于云指挥调度系统平台的理解,我们将业务需求分为VoIP音视频交换、多租户管理、指挥调度业务、录音、话单、安全保障六大功能模块。
VoiP音视频交换模块:在云指挥调度系统平台中,该部分功能模块承载了所有基础音视频交互的功能,包含有分机及中继、路由数据的设置和管理;分机之间相互拨打;外线呼入话务处理;外线呼出话务处理;电话转接、保留、会议等功能。
多租户管理模块:给予云计算技术的指挥调度系统平台安装部署在云端,具备超大容量指挥调度业务处理能力、具备为多家机构、部门提供服务的能力。不同租用机构、部门之间的业务数据、号码方案可以做到相互独立,逻辑分离互不影响。
指挥调度业务模块:指挥调度业务模块为调度业务、应急预案、调度台等相关业务模块提供通信能力的接口和事件消息,是云指挥调度系统平台中的重要核心功能。为调度业务各个功能模块提供包括:呼叫发起、广播、会议、强插、强拆、语音通知、调度终端状态等基础通信业务能力接口。
录音模块:录音模块是云指挥调度系统平台的基本组件。可以根据规则,对调度用户的通话内容进行录音并对录音信息进行有效存储、管理。
话单模块:CDR(Call Detail Record)即通话详细记录。系统可以将每一次通话的呼叫详细信息记录在数据库中,以便为计费、报表、统计分析等业务功能提供基础数据依据。
安全模块:在给予云计算的指挥调度系统平台中,由于系统安装部署在云端,即互联网上,将会面临来自全球的攻击。对于常规的网络攻击与完全保障,可以采用防火墙等网络安全手段予以解决,但是对于VoIP呼叫的SIP协议攻击,需要平台本身在应用层进行处理与保护。有效避免来自互联网的恶意SIP攻击导致的非法呼叫或国际长途呼叫。
第2章云指挥调度系统平台技术方案
2.1系统拓扑结构
本方案建议采用完全基于VoIP技术软交换平台作为云指挥调度系统的语音平台,配备支持标准SIP协议的VoIP语音网关、调度终端等设备。
系统拓扑图如下:
2.2软件模块逻辑图:
2.3系统组成
2.3.1SIP UA ( User Agent )
SIP UA是指支持SIP协议的各类终端设备,包括:IP话机、各类网关(模拟网关、数字中继网关、电台网关等)、软电话等。属于第三方设备。
2.3.2SIP Proxy 代理服务器
SIP代理服务器负责首先处理来自各类调度终端设备(IP话机、网关等)的SIP信令,然后根据媒体服务器的负载情况,将信令转发至媒体服务器。最终由媒体服务器完成相关呼叫过程的建立和媒体处理。
2.3.3Media Server 媒体服务器
媒体服务器具备丰富的媒体处理功能,包括:音视频媒体流转发、不同语音编码间转换、录音放音功能、DTMF按键首发功能、会议功能等。由于媒体处理属于负责操作,因此媒体服务器的负载较大,建议每台媒体服务器的并发呼叫控制在500~1000以内。媒体服务器采用集群方式,通过SIP代理服务器实现负载分担,可以根据业务容量采用N+1或N+M方式进行冗余备份。
2.3.4Call Server 呼叫控制服务器
呼叫控制服务器是属于业务接口中间件服务,用于连通调度业务系统与通信平台之间的消息通讯。呼叫控制服务器对外提供各种调度业务控制接口(如:发起呼叫、强插、强拆、广播等)并将业务请求转由相应的媒体服务器具体实现。同时,呼叫控制服务器还可以将通信平台中的各调度终端的状态信息发送给调度业务服务程序,并最终发给相关调度台用于前台展现。
2.3.5Voice Log录音服务器
录音服务器负责对录音文件的管理和归档工作。录音业务具体是由媒体服务器执行并将录音文件保存在本地磁盘空间内,录音信息保存在数据库中。考虑到媒体服务器本地存储容量有限,并且是多台服务器集群部署,管理起来较为困难。录音服务器需要定时将媒体服务器上的录音文件进行归档,放入集中存储空间集中管理。
如果采用商业云平台部署(如:阿里云),可以考虑采用其OSS(Open Storage Service)开放式存储服务
2.3.6System Moniter系统监控服务
系统监控服务用于监控系统平台内各个服务器的运行状态,并拥有监控告警机制,在遇到故障和运行不正常的情况可以及时通知系统管理员进行人工干预。
2.3.7DB数据库服务器
数据库用于存储云调度系统平台所需要的各类数据信息,如:帐号信息、路由数据、录音记录、呼叫话单等。
数据库服务器需要考虑云平台所带来的数据量,并确保数据库的查询效率。如果采用商业云平台部署(如:阿里云),可以考虑采用其RDS(Relational Database Service)云数据库系统。阿里云的RDS支持MySQL数据库系统,并且可以根据业务需要对数据库的性能、存储进行动态扩展。MySQL数据库是目前被互联网行业广泛应用的一种关系型数据库系统,很多著名互联网公司(如:阿里巴巴、百度、腾讯等)均采用该数据库。
2.3.8MQ消息队列
在方案设计中用到了两个消息队列,一个负责将媒体服务器的事件消息发送给调度服务器,另外一个负责将调度服务器的事件消息发送给调度台。
消息队列建议采用RabbitMQ。RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。RabbitMQ是一个遵循MPL协议的开源软件,任何人都可以从互联网上自由的获得和使用该软件。RabbitMQ使用Erlang语言开发,具备先天的高并发和分布式的处理能力,可以轻松完成每秒钟上千次的请求。下图是几种常见消息队列的性能比较:
RabbitMQ具备HA和Cluster多种解决方案,可以根据项目需要灵活配置,提供高可用性和更高处理性能。
另外,针对本项目采用RabbitMQ最大的考虑是其具备基于路由策略的消息分发机制。
direct类型:
队列可以根据所需消息类型进行订阅
topic类型:
队列可以根据主题(topic)进行消息订阅。订阅的路由策略支持通配符,“*”用于匹配一个关键词,“#”可以匹配多个关键词。
基于以上两种策略机制,可以很容易的实现调度机对于来自媒体服务器的事件消息,以及调度台订阅来自调度服务器的事件消息。
例如:
媒体服务器事件消息采用direct类型,可分为channel和system两类事件消息。其中,channel类型的事件用于表示所有呼叫相关的事件(如:来电、振铃、接通、挂断等),system类型用于系统相关的事件消息(如:系统停止、心跳等)调度机可以选择订阅channel类型的事件,而系统监控程序可以订阅system类型的事件。
调度机服务发布的事件消息可以用topic类型,事件消息路由关键字可以定义为:<分机号>.<分组>.<机构代码>
例如:8001.6000.company-a
A公司调度台1程序可以选择订阅 *.6000.company-a接收6000组内的调度终端相关的事件消息。
B公司的调度台可以订阅 #.company-b 接收归属B公司的全部调度终端的相关事件消息。
RabbitMQ还支持更多的策略,详情可以参阅:www.rabbitmq.org
RabbitMQ支持的客户端开发语言有:
Java、Ruby、Python、.NET、PHP、Perl、C/C++、js、Go、Erlang、COBOL等
2.3.9Redis NoSQL数据库
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。相对于传统关系型数据库,Redis简化了数据的存储关系为Key-Value类型,因而可以获得更高的性能和处理能力。
以下Redis官方给出的性能数据:
测试完成了50个并发执行100000个请求。
设置和获取的值是一个256字节字符串。
Linux box是运行Linux 2.6,这是X3320 Xeon 2.5 ghz。
文本执行使用loopback接口(127.0.0.1)。
结果:读的速度是110000次/s,写的速度是81000次/s 。
本方案中,采用Redis作为集中状态存储数据库,用于解决调度机服务集群中的调度终端及调度命令状态信息的共享问题。阿里云提供键值(KVStore)与Redis兼容,也可以直接使用该服务。
2.4高可用性及集群方案规划
2.4.1双机热备方案
2.4.2集群方案
2.4.3规划建议
云计算的核心价值在于其系统规模良好的可伸缩性。对于本项目而已,系统建设初期,对于业负载较重的媒体服务器建议采用集群方案,便于将来随着业务规模的增长进行动态扩展,同时提高系统的可用性。对于负载相对较轻的呼叫控制服务器、调度机服务器等服务可以采用双机热备方案进行部署。当业务发展到一定规模,需要进行扩展的时候再进行集群方案改造即可。对于业务程序的集群改造只需要利用LBS服务,或前端部署一个负载均衡设备(如:LVS或Nginx)即可,无需额外的改造。