在过去的几年里我们在移动蜂窝网络性能方面取得了重大进展。但是由于网络延迟的膨胀导致许多应用并没有得到改善。
延迟问题长期以来一直制约着移动网络。尽管近年来已取得一些进展,但减少网络延迟没有跟上延迟的增长速度。正是由于这种不对等导致了延迟,而不是吞吐量,成为影响网络性能的最大因素。
这篇文章逻辑上主要包含两章。第一部分将讨论导致移动网络延迟的细节;第二部分介绍提高网络性能降低延迟的软件技术。
延迟表示一个数据包通过一个或一系列网络所需要的时间。由于很多因素,移动网络会使已经存在于大多数网络通信中的延迟更高,这其中包括网络类型(如HSPA+与 LTE)、运营商(AT&T与Verizon)或环境因素(如:站立、开车、地理以及一天中的不同时间点等)。因此,很难去准确估计移动网络的延迟,但是我们可以发现它的延迟在几十到几百毫秒不等。
往返时间(RTT)是一种测试延迟的方式,即通过测试数据包从发送源服务器到目的地的往返时间。而且RTT的大小对多数网络性能的影响非常明显。这种原因可以用乒乓球运动来说明。
在通常的乒乓球运动中,乒乓球在玩的人之间运动所花的时间几乎不会引人注意。然而,如果运动员之间站的越远,他们等球的时间也就越长,而且在等待的过程中不能做其他事情。运动员在正常距离下,5分钟的乒乓球比赛,如果距离换为一千英尺,那么就需要几个小时才能完成,虽然这听起来比较可笑。但如果把源服务器和目的服务器看作是乒乓球运动中的两个运动员、往返时间表示往返两个运动员之间所需时间,那么你就会开始明白这个问题。
大部分网络协议的部分常规操作就像打乒乓球一样。这些“出球”,如果你愿意,是建立和保持一个网络链接会话(session)所需要的双向交换信息(如TCP)或者是执行一个服务请求(如HTTP)。这些消息在交换过程中很少或没有数据传输且网络带宽很大程度上未使用。由此可知,延迟在很大程度上并没有充分利用带宽;这也导致每次信息交换至少有一个RTT的延迟;这样不断累积导致对性能的影响非常指的注意。
试想一下,一个HTTP请求去下载10K的东西将有4次信息交换。如果每个RTT为100毫秒(对移动网络来说已经非常合理了),将4次交换全部考虑在内的话,那么吞吐量为10k/400ms或者25k/s。
注意,上述例子完全和带宽没有关系--不论网络有多快结果都是一样的,都是25k/s。但是以上的操作的性能,或者任何类似的操作,都可以通过一个简单的、明确的策略来提升:避免网络客户端和服务端进行信息交换。
接下来会对移动蜂窝网络中影响延迟问题的组件和约定做一个简单的介绍。
移动蜂窝网络是一些具有高度专业化功能的相互关联的组件的代表。这些组件每个都会对延迟有影响,但是各个组件的影响程度不同。而且在移动网络中独有的,如对无线电资源的管理,都成为移动蜂窝网络延迟的因素之一。
图1:移动蜂窝网络组件
在大多数移动设备实际上是两个非常复杂的电脑。应用程序处理器负责管理操作系统和应用程序,与电脑以及笔记本电脑比较相似;基带处理器负责所有无线网络功能,相当于是电脑的调制解调器(Modem),只不过这个调制解调器使用的是无线电波而不是电话线。
基带处理器是一个一致但通常存在延迟的资源。而高速无线网络是一个惊人复杂的事情,并且它所需要的复杂信号处理导致了一个固定的必然延迟,对大多数网络通信来说在微秒到毫秒级。
蜂窝基站,和收发基站或发射塔同义,作为移动网络的接入点。而蜂窝基站的责任是提供一个地区的网络覆盖,也被称作蜂窝。
蜂窝基站就像移动设备一样,处理复杂的高速无线网络,有相同的大多是微不足道的延迟;但是一个蜂窝基站必须同时服务于成百上千的移动设备,而系统负载量的不同也将导致吞吐量和延迟不同。同时,缓慢的、不可靠的网络性能在拥挤的公共活动中往往导致蜂窝基站的处理送达率受到限制。
最新一代的移动网络已经扩大了蜂窝基站的职责,包括管理它的移动设备,很多以前无限网络控制器的功能都已经交给了蜂窝基站处理,如:网络注册和传输调度。这么做的原因在本章后面解释,这种角色转换使得新一代的移动蜂窝网络的延迟得到很大程度的改善。
回程网络是蜂窝基站、基站的控制器以及核心网络之间的专用广域网(WAN)连接。回程网络一直并且继续在延迟方面臭名昭著。
回程网络是从经典的电路切换或者说是从基于帧的老的移动网络(如GSM,EV-DO)传输协议中诞生的。这种协议会有延迟,主要是因为它的同步特性,而逻辑连接表示一个channel在简短的、预先分配的时间段里仅仅接受或发送数据。相比之下,最新一代的移动网络采用基于ip分组交换的回程网络,而且支持异步数据传输。这种切换大幅减少了回程延迟。
物理设施的带宽限制一直是一个瓶颈。许多回程并不旨在处理峰值流量负载,因此现代高速移动网络在出现网络拥堵时在延迟和吞吐量方面都会表现出巨大差异。尽管运营商正在努力尽快升级这些网络,但该组件在许多网络基础设施仍然是一个弱点。
一般来说,无线网络控制器管理邻近蜂窝基站和他们服务的移动设备。
无线网络控制器直接通过一个被称作信令的基于消息的管理方案来协调移动设备。而由于移动网络的拓扑结构,移动设备和控制器的所有消息都必须通过高延迟的回程网络来发送。这本身已经不是很理想了,但是由于许多网络操作,比如网络注册和传输调度,这种需要来来回回多次交换信息的操作使延迟情况变的更糟;典型的是,无限网络控制器也因为这个原因称为造成延迟的重要因素。
如前所述,控制器在最新一代的移动网络摆脱了设备管理的职责;这么多的任务现在由蜂窝基站自己来处理。这种设计也决定了大多数网络中的回程网络延迟被消除。
核心为运营商的内部网络和公共网络之间的网关;也正是在这里运营商使用内联网络设备来实施网络服务质量策略或者是作带宽计量。作为一个规则,任何针对网络流量的拦截都将产生延迟。而且在实际情况中这种延迟普遍存在,但是这也是需要注意的。
移动网络延迟最重要的来源之一直接和手机电池的用量限制有关。
高速移动设备的网络电台的功耗为3瓦;这个功耗太大以至于iphone5的电池只能支持一个小时,也正是这个原因,移动设备抓住每个机会来移除或者减少无线电路。这种做法不仅可以延长电池寿命而且还可以延迟启动无线电路,只有在接收或者传输数据时才重新为无线电路提供能量。
所有的移动手机网络都采用标准形式化无线资源管理(RRM)计划来节省能量。大部分RRM约定定义3个状态--激活、空闲、未链接--每个状态都代表某些启动延迟和功耗之间的折中。
图2:无线资源管理状态转换
激活(Active)
激活状态代表数据也许以最小的延迟在告诉传输或接收。
这个状态即使在空闲情况下耗电量也会很大。这个状态下短时间的网络空闲,通常小于1秒,会出发状态转换为空闲状态。这对性能的影响非常值得注意:在网络处理中过长的暂停会导致设备在激活和空闲状态之间来回切换,这也会导致延迟增加。
空闲(Idle)
空闲状态是低功耗使用和适当延迟加载的折中。
在这种状态下移动设备的网络仍然处于连接状态,无法发送或接收数据,但可以接收网络请求来满足转换至激活状态的需求(如输入数据)。经过一个合理的时间段后若网络仍未激活,同时为一分钟或者更短,移动设备则切换至未连接状态。
空闲状态在两方面会造成延迟。首先,它需要一些时间来为无限通信设备重新提供能量以及同步模拟电路;其次,为了节省更多电量,无线通信设备仅仅是间断的监听网络通知,并且对通知的响应会稍有延迟。
未连接(Disconnected)
未连接状态的功耗最低但启动延迟最高。
这种状态下设备的网络处于未连接状态,无线设备处于非活动状态。无线通信设备会被激活并且通过一个特殊的广播通道来监听网络请求的到达,但这种激活不是很频繁。
未连接的延迟和空闲状态的延迟相同,但是不同的是,未连接状态还得算上重新连接网络的延迟。连接到移动网络是一个复杂的过程,这其中包括多个来回的信息交换(也就是发信号)。恢复网络连接至少需要几百毫秒,而且链接时间在几秒也是经常有的事。
(未完待续,下篇更精彩。。。)
1. 本文由程序员学架构翻译
2. 本文译自The Performance of Open Source Software | Secrets of Mobile Network Performance
3. 转载请务必注明本文出自:程序员学架构(微信号:archleaner )
4. 更多文章请扫码:
原文地址:http://blog.csdn.net/archleaner/article/details/40707267