2016云栖大会之前,阿里云关于移动服务方面的介绍比较少,为什么现在开始在做移动服务方面的介绍?
从2013年开始,阿里巴巴举全集团之力解决无线APP开发过程中的一些难题,经过三年多的积累,把阿里集团积累的一些技术逐渐输出出来,成为阿里云的产品。2016云栖大会武汉峰会上,阿里巴巴无线产品经理德泰把之前阿里云做的努力和成果跟参会嘉宾一起分享。移动应用解决方案这个话题比较大,可以分成一个系列来讲,今天偏重从性能方面来讲述阿里这方面做的努力。
移动域名解析存在哪些问题,如何优化?使用什么协议?业务访问存在哪些问题,如何优化?性能度量的标准有哪些?这些问题都将可以从演讲中得到解决。
说起企业级移动应用,我们难免提出疑问,移动应用的整个访问流程到底是什么样子?
移动应用访问的经典架构
其实,移动端与PC端的访问流程比较接近。
访问一个业务首先要做域名解析,然后再去访问业务服务器,中间可能有CDN。在域名解析阶段,无线网络的特征是延迟比较大、丢包率很高、解析失败率也很高。
在业务访问阶段,由于延迟大、丢包率高,所以建连的开销比较大,成功率等各方面都会受到影响;并发方面,在有线情况下稍微好一些,比如浏览器访问网站的时候为了提高并发度可以建多个连接,比如浏览器对一个域名可以建4-8条连接,但是在无线情况下,建立这么多连接就会产生问题,首先无线的接入资源是有限的,建立很多连接会有更多的资源消耗,还有耗电等方面限制。当前很多移动应用采用短连接,同时并发不能达到很高。如果想要建立长连接还会面临一个问题:无线场景下怎么把这个长连接维持的更长一些?传统的TCP、HTTP协议在无线场景下的弊端暴露的更加明显。
性能度量阶段,对无线业务的性能怎么衡量?衡量什么指标?怎么得到比较合理的度量值?
首先分析域名解析阶段,域名解析存在哪些问题?如何进行优化?
移动域名解析存在问题及优化
域名解析存在三个问题:
第一个问题是链路延迟比较大、丢包率高导致解析延迟比较大并且解析失败率比较高。无线网和有线网比较大的区别是无线网的接入比较耗时,2G情况下有300-600ms的延迟,3G情况下有50-100ms的延迟,4G情况下有10-20ms的延迟,并且无线网从接入网到核心网也有100ms的延迟,相对于有线网来说延迟大很多。另外一点,无线网络的丢包率比较高、稳定性差。
第二个问题是域名劫持问题。域名劫持是指在用户正常联网状态下(如3G、4G、WiFi等状态),目标域名被恶意地解析到其他IP地址上,造成用户无法正常使用服务。2015年12月份国内6家顶级的互联网公司发表联合声明抵制流量劫持,全网大概有5%左右的DNS解析请求受到劫持,有一些地区部分时段甚至达到20%。
第三个问题是调度精确性的问题,Local DNS稀疏性和与Client IP不匹配,表现为在无线情况下,调度系统判断用户位置会存在较大问题。如下图所示:
图中记录的是阿里的真实案例。阿里昆仑就是阿里的CDN探测工具,客户可以用这个工具看到手机的IP,local DNS的IP。DNS系统分为权威和非权威,比如上网需要配置上网的DNS服务器地址,这个DNS不负责记录域名对应的解析结果,只是作为DNS解析的一个代理,这个IP地址就是代理服务器的地址,此时业务系统就会根据配置的这个DNS服务器地址来判断用户位置。如上图所示,很明显,在无线场景下,客户本来属于武汉联通,结果local DNS变成了珠海电信和上海电信。在国内,存在一个经典的问题——南北互通问题、即跨运营商访问的时候延迟比较高,因为互通的时候中间传输距离增加并且带宽很小,即走一段很长、很挤的路。在无线情况下,local DNS配置的参差不齐,导致出现这种情况的时候,用户的体验非常差。
为了解决上述问题,阿里内部使用的是HTTPDNS。它的基本原理是使用HTTP协议取代原有的UDP协议进行域名解析。UDP协议比较脆弱,把包截获后回复一下就能实现域名劫持,访问劫持到指定的节点,而HTTP协议是需要建连的,所以比UDP协议要可靠一些。此外,UDP发出去之后,是尽力投递,没投递成功也不管,而HTTP协议失败后会重试,所以使用HTTP协议对解析失败率也有改善。使用HTTPDNS还有一个好处:客户端IP和local DNS IP不匹配的问题也可以通过HTTPDNS解决掉,因为客户端是直接和HTTPDNS服务器建连,而不是通过local DNS去代理,这样HTTPDNS可以拿到客户端的真实IP而非Local DNS IP。
业务访问存在哪些问题?又是如何优化的呢?
无线网络访问的特征包括延迟大、丢包率高、不稳定,建连开销很大,短数据流交互比较多。无线网络访问的目标是1秒钟法则:在4G或者WiFi情况下1秒钟可以把首屏显示出来,3G情况下1秒钟可以首字节到达,2G情况下1秒钟完成DNS解析建连。
业务访问存在的第一个问题主要包括短连接、HTTP协议串行特性、HTTP头部较大。短连接是指发送请求之前,三次握手把连接建好,然后开始发送数据,结束后把连接断掉,这在无线场景下很不合适,因为建立一个连接开销特别大,而实际传输数据时间很短,所以希望尽可能使用长连接。而使用并发连接是有限制的,相对于有线情况下,无线接入资源、电量等各方面的限制很多。HTTP协议的串行特性导致如果有一个请求的响应比较慢就会把其他请求阻塞掉。第二个问题是接入层未作优化,路由未作优化。如果想做长连接,源站就直接面临长连接压力,并且访问路由不可控,即发送包之后,包走的路径是不可控的。第三个问题是对象大小未作优化,比如从肉眼看不出区别的时候,不同格式的图片大小差50%,而且内容也没有进行优化就整个传输过去了。
如何解决?
在网络协议方面,使用SPDY/HTTP 2.0协议来实现HTTP访问请求的并行化,通过请求头压缩把多包变成单包,后期使用基于UDP的协议降低建连的压力;在接入和路由方面,接入CDN使其到源站的链路更优,对路由进行优化选择最佳路径;在对象大小方面,根据不同尺寸分辨率、网络制式返回不同尺寸、质量图片,同时选择压缩率更高的图片格式。
通过建立性能基线,进行解析延迟优化、精确调度,进行协议优化、CDN就近接入、图片压缩、动态内容加速,对新闻媒体类的APP全网加速40%,对LBS动态请求加速30%。
业务访问性能度量
关注哪些指标?
比较重要的三个分析指标:建连时间、首字节时间、响应时间。
分析哪些维度?
关注以下维度:时间、ISP、网络制式、地域、版本、域名、请求方式。
如何个性化时间性能统计?
进行自定义性能统计与上报。
另外,阿里提出了自己的企业级移动应用解决方案。
企业级移动应用解决方案的全貌
企业级移动应用解决方案主要包括云、管、端三个方面的产品和服务。云指的是比较成熟的网络存储、数据库这些基础设施和大数据服务。管指的是从我们手机端到云上之间的传输链路,包括无线通道。端指的是阿里提供的一些SDK或者API方式在端上给用户提供的服务。
如上图所示,端部分的第一个层次MBAAS是做移动应用开发时候所需要的一些服务,比如数据分析、推送、域名解析和加速方面的需求。第二个层次MPAAS是跟业务结合更紧密一些服务,比如支付类的APP或者一些基于地理位置服务的需求的APP,或者促销、社交类的APP。
本文根据阿里云事业群飞天八部无线产品专家朱友志(花名:德泰)在2016云栖大会·武汉峰会上演讲整理而成。