2015 年 12 月 19 日 ,又拍云架构运维大会深圳站在科兴科学园举办举行,云之讯 CTO 贾俊杰在会上作题为《高质量通讯PaaS平台的构建要点》的分享,以下是演讲实录:
贾俊杰:我的主题是建设高质量通讯云平台的要点和关键技术。通信概念非常广,有信息交互的都可以算通讯,所有可见的互联网业务都可以称之为通讯。我讲的概念是属于大家认知的传统中,电信网里的通信概念,包括我们熟悉的打电话、视频通话、短信、会议、社交中心。云平台,大家应该非常熟悉,我们现在用得非常广泛,从IaaS、PaaS、SaaS,大家经常使用这三层,PaaS包括推送等云平台。估计大家用过短信业务,我认为这属于通信领域,比如我们发验证码,怎么把传统的打电话能力集成到APP里,把视频通话、语音会议、视频会议集中到APP里,这是通讯云平台的概念。我们是做融合通讯的云平台服务商,今天我们把在构建过程中遇到的问题以及对这方面的问题解决方法,给大家提供个方向。
我们看通讯云平台的构建方式,要看通讯业务的发展趋势。如果对通讯有所了解,我们会发现,通讯在全面向IP化、移动互联网化发展。非常传统的窄带通讯传输,不管在电信网里都是完全IP化传输。移动互联网更不用说,肯定也是在IP化的基础上进行传输,这是一个非常大的发展方向。一是传统的电信网的通讯服务商,它的通讯能力非常单一,传统的通讯能力只可能进行语音通话、发短信,无法满足互联网的发展需要。二是像微信、QQ做了这个事情,能够在移动互联网的场景下做通信。
云化发展方向,这主要来自于互联网和移动互联网的业务发展需要,包括传统互联网以及现在主流的传统电信网、主流IP网通讯服务商蛮封闭。现在在各行各业都需要通讯能力,比如在线医疗、在线教育、智能硬件等各行各业都需要通讯能力。这两年在逐渐兴起通讯云化服务,在这样一个发展趋势下,我们怎么构建一个通讯的云平台。我们总结出以下几个要点,一是精巧和高效,在基于互联网的通讯,由于本身的特点,对实时性的要求特别高,二是这个通讯是双向的,这对我们平台的架构要求非常大。
从高效方面来讲,我们做了分层架构设计,我们把服务层、业务层等进行分离,我们底层有OTP网络支撑。在不同的层面单独负责不同的能力,接入层设计来讲,网络层来讲完全不理解业务,我们叫做透明转发的网络,对于接入层,他与业务相吻合,不完全理解业务,对业务层是完成了各种各样的通讯业务,达到不同层次的能力的分工,方便以后的发展。扩展隔离方面,接入层不理解业务,需要通过业务ID或是通讯过程中的备ID做路由,根据不同ID和路由的请求,分到不同的模块。我们有会议、点对点语音做分割,不会有耦合关系。异构多元化在接入层和网络层,我们的趋势按照现在理解处于传统的电信网和互联网的融合通讯的时代,相互补充。
接入层有丰富的接入能力,对于互联网的接入能力来讲,我们需要支持像各种移动端、PC固定端、网页打电话等技术,它的连接方式主要通过TCP实现的。短信有多的接入方式,可能是HTTP、传统电信短信的协议。在稳定高可用上,主要构建了OTT通讯网络,这个网络是基于公共互联网的加速网络,我在这个网络上跑我的业务,避免通用的互联网带给我实时通讯的影响,后面我们也会专门给大家介绍一下。
谈到网络,我们要了解互联网做VOIP的现状,网络非常复杂,无论从用户的接入网络、骨干传输网络都非常复杂。用户网络是Wifi、3G、4G,传输网络是时多种运营商,涉及跨运营商、跨地域的通讯,这对实时通讯的影响非常重要。实时通讯主要看丢包、延迟和抖动。这跟我们通用的互联网和移动互联网的差异非常大,在实时通讯里,延迟的要求是几十毫秒或百毫秒级的,很多互联网的业务没什么高要求。丢包,有时候丢包1-2%的时候,非常影响通话的体验,这在平常的业务上基本没有感知。
所有的问题导致了我们在做通讯云平台的时候遇到了各种各样的困难,我们怎么做?这也是回到刚才我们所说的OTT网络建设上,一个透明的智能路由网络,这是我自建的加速平台,包括谷歌、腾讯、YY等顶级的互联网通讯都有网络。这个网络很大程度上可以加速我的通讯服务,保证通讯质量,解决网络复杂以及靠后一公里的问题。
这类似于主流SDN的技术,通过自己管理路由的方式,把核心部署的节点关联起来,如果两个用户在做通讯的时候,我只需要把用户通过它的IP地址识别,接入离他更近的节点上,被叫也是通过IP识别,这两个节点的通讯一定是通过自己的探测技术、监控技术实现,进行动态的运算,保证这两个用户之间选择一条更快,质量更好、更稳定的通道传输语音数据。这里主要应用到隧道技术以及OSFP协议路由技术。在性能上,如果我们考虑到媒体转发对机房、网络的笑话比较大,所以我们有转发的模块进行加速,提高性能。
建设OTT网络的核心问题,一是路由机制,二是策略问题,三是怎么部署这些点,如果用户选择这个节点离用户不是更近的,或是离用户的节点效果不是更好的,策略非常好,用户的效果也保障不了。这是我们根据两点,一是自身分布情况,你的用户分布在哪里,用户类型是怎样的,在某一个地区是Wifi的多还是3G的多,是联通的多还是电信的多,根据用户的分布情况决定选择的点。我们会根据全国的情况划分区域,针对不同的区域针对性选点。这是用户区域分布和某一个容量节点有很大的关系,在选点的过程中用一些第三方或是自己业务的测试方法监控。
我选择的这个点对我来说一定是更有效的,保证我选的点是更有效的。这是我们大概组网的网络拓扑,包括分层次网络架构,分布式部署,按区域划分业务。前端的是用户部署,这一定部署在离用户更近的地方,保证用户就近选择一个点进行接入。另一个是核心的转发节点。这种接入节点可能是单线的,这个点只接入联通的用户,这个点只接入电信的用户,我可以通过中间的转发节点,这一定是三线或是BGP的机房。分布式部署,这在网络拓扑上也有体现,比传统的通讯网分布的更广泛一些,传统的做电商、点播、直播可能不需要那么多分布点,我们分布得更广泛,覆盖到地市级的水平。按区划分业务,每个地区只负责接入本地区的业务,核心点也是,某一个节点只负责本地的,某一些接入点的中转,而不是负责全局的,它有一个分配策略。
在建设OTT网络的同时,怎么对网络进行监控和质量管理。一是全网络节点网络状态监控;二是全网络节点故障实时预警;三是基于业务运营不断优化。我会动态根据它的监控情况做调整,某种情况下可以做到自动切换。用户一般会动态得到两个以上的节点,离它更近的节点出故障,它会动态选择次近的节点,不会导致接入失败。我们会根据业务的情况不断做调整,这是非常关键的。尤其是我们选了这么多点,我们选的每个点在本地不一定是更优的,即使当时是更优的,长期来讲不一定是非常好的,有可能会变坏。
通过业务运营的数据做判断,我们在通讯里语音,它有一些值,如果这个值在持续下降,我会把这个点撤掉,选择更好更新的节点替换它。通过网络,还有一些需要优化的东西,这跟刚才说的不太一样,刚才说的都是HTTP等协议,这里基本不用HTTP,我们用得比较多的是SIP、XMPP、私有协议,我们选择的是私有协议。私有协议类似于完全二进制,自己编码、解码实现,这种效率是很高的,尤其是针对移动互联网的场景。
媒体传输质量保障,这不同于一般的点播,这是双向的,丢包率的影响非常大,对实时的要求非常高。我们会做非常多的纠错以及保证质量的措施,我在传输一份数据的时候,它可能会传2份或是1.5份,具体看不同的网络,在某一个包丢掉后,我可以通过其他的包把它修复掉。在某一些丢包场景下,可以保证我的传输数据的效果。我们现在丢包5-25%,在大于30%的时候,Mos值会低于正常的情况,无法保证,效果会受一定影响。
通过ARQ的技术,我们称之为自动同传,尤其是视频的时候,每一帧的大小不一样,我们对关键值会做同传的处理,某一些I帧丢掉了,我们会保持一些。
统一策略控制,我们认为这是非常关键的。就通讯来讲,它对终端的适应性不太好,终端不同的手机对语音通讯和视频通讯的参数非常大,我们的策略是把所有的策略统一配置,比如客户端在语言设置时选择多大的流、连接方式、路由方式、优选编码解码等,都是通过后台的中心进行控制。策略控制的思路主要包括后端、统一制定策略;动态、智能调动;前端,使能可控。
不管是时网络的因素还是手机本身所在不同的网络类型上,经常会有变化,如果策略写死会对各种情况下的通讯指南有很大的影响,这是在后台做统一配置。这是动态的,智能调整,我们讲每次通话的参数都不一样,在打电话或通信之前,动态获取信息,我会判断这次通话用的是什么网络,你的网络质量怎么样,我给你动态确定,你在这样的参数下需要什么样的参数,保证动态获取配置,选择一个更合适的通讯方式跟后台通讯。
使能方面,很多通讯参数配置分不同等级,后面谈到有一些是全局的,有的是按业务的,不同的业务采用不同的参数,更低级的是某些用户才会遇到的问题,我们会单独为他定制参数。这是流量控制的策略和参数,第一个是全局的配置,一个心跳的技术,更小流量的消耗。在媒体数据压缩上,我们会选择私有压缩的方式,把信息进行压缩。在码率上,我们动态做调整。比如3G情况下,码率一般在150至200Kbps之间,效果更合适,不然可能会有问题。
Wifi情况俩下面大概是200至300之间。如果设置得不合理,你采用非常高的码率会导致带宽不够,传输数据越多,丢包率越大。本身在Wifi情况下,带宽的利用率不好,很多带宽没利用起来。
客户端连接策略上,我们可以动态调整,主要有几点,一是就近接入自有网络,二是做同网,尤其是通讯业务,按我们的经验,丢包率等影响非常差;三是预埋的信息,把历史上获取的接入层预埋到里面去,你可以同时选择多个节点,根据实际情况把差的节点保持一个更好的节点。这是媒体路由的策略,我们会选择媒体多个节点选择策略,我会运用更小路径的算法,我会选择怎么跳转,假如两个都是同网,可能是P2P,或是一跳中转。其他的是动态的策略调整的技术,这是我们策略控制机制,我们控制策略的时候会把所有终端类型、版本号、网络状态情况,我们都会统计出来,根据不同的手机型号,他可能采用什么参数更好,我会定制一套参数在后面,一定保障它在这种参数下,通讯的质量和通讯效果是更好的。这是具体的客户端控制参数,我需不需要做冗余,是否需要做日志检测的机制,这些后台都可以控制。
这是IM消息同步机制,这适用于IM通讯技术里。传统来讲,可能直接推下去了,这种方式可能会更好,开始是这种通知,挖取所有的通知,保障消息100%不丢失,这是非常好的策略。实时通讯是当前的小众业务方向,希望对大家有帮助,如果大家想深入了解,我们可以线下交流,谢谢大家!