阿里无线11.11:手机淘宝移动端接入网关基础架构演进之路

移动网络优化是超级App永恒的话题,对于无线电商来讲更为重要,网络请求体验跟用户的购买行为息息相关,手机淘宝从过去的HTTP API网关,到2014年升级支持SPDY,2015年双十一自研高性能、全双工、安全的ACCS(阿里云通道服务)扛住双十一战场主要流量,不管是基础架构的演进、网络调优、协议的优化、异地多活、网络调度上都有很多宝贵的经验与你们分享。web

ACCS基于无线场景精心设计的双工 、安全、低时延、开放的移动统一接入层服务,在双十一当天稳定高效地服务了近2亿的在线用户,支持了峰值4500万的在线长链接,这个背后的故事以及咱们的思考是什么呢?算法

1.业务高速发展下诉求

回到一年前,移动电商在2014年双十一业务开始兴起,2014年双十一当天移动成交243亿占总体571亿的42.6%,业务高速发展但愿更多主动推送去触达用户,一些新的玩法和互动形式,须要链接买家与买家、买家与卖家、买家与达人,由于没有有效的通道能力,业务采起的是不停去轮询服务器,一来对服务器形成没必要要的压力,二来对于用户手机的电量流量也是极大的浪费,关键在大促当天没必要要的请求过大甚至会致使后端集群限流,从而影响到用户体验。后端

信息传播形态的变化的背后是移动化带来新的技术特征致使的结果。在过去的几年,移动电商从无到有,手机淘宝一直是这个领域的先行者。移动电商从最初的复制WEB的业务形态到移动特性不断涌现,更多的互动形式的出现,向社交化、娱乐化不断迈进的今天,一个单纯的商品的陈列架形式已经不能知足业务的需求。业务上须要实时的触达用户,充分发挥移动的特性,将消费时间的碎片利用起来,事实也证实了用户的消费时间随着移动化的进程不断发生变化,逐步分布到全天的碎片时间中。同时货架形态也在向社区化、娱乐化的方向发展,这些都对网络层链接用户有了更高的要求。更多的媒体形态和展现方式,对网络层提出了更多元的要求。你们能够关注到手机淘宝内的消息盒子、微淘、淘友这些产品都是业务求变的体现,业务的变化倒逼技术的前进。api

2.移动网络环境依然严峻

移动网络的速度在过去几年有很大提高,但网络环境的多样性和差别性使移动网络的环境更加复杂,在去年双十一以前咱们还常遇到一些移动网络劫持的事情。网络劫持这块问题的排查效率很低,须要找到用户、复现现场,甚至找网工、运营商配合排查,一查就是几天过去。同时在咱们的舆情反馈上老是看到用户在说-“某个页面加载中、页面打不开、请求很慢、打开某个功能很慢”,面对这些问题过去咱们是没有太好的办法,只能猫抓耗子一桩桩去排雷很被动。不少网络的问题是偶现的,一旦错过如今就无从查起,背后的缘由不少:浏览器

  1. 运营商问题
  2. 机房部署缘由
  3. 客户端SDK Bug
  4. 弱网和网络抖动
  5. DNS劫持和数据篡改

PC时代咱们访问网站的接入条件是相对恒定的,因此在开发时不多考虑网络对用户体验的影响。可是移动APP则否则,尤为是在中国,基础的移动网络环境并很差,并且咱们有不少用户的访问是发生在地铁、公交车这样的移动环境下,移动基站的频繁切换进一步增长了网络的不稳定。从手机淘宝的数据能够看出,咱们天天活跃用户中有很多来自于相似2G这样的弱网环境。若是端到云的链接不稳定、高延时,那么全部的用户体验都无从谈起。安全

基础网络的效率就像一辆列车,时延是火车的速度(启动时间),而带宽就像火车的车箱装载量,整个传输的物理链路就像火车的铁轨。目前现实条件下的移动网络条件很是复杂,既有高铁这样先进的传输渠道,也有很多老旧缓慢的绿皮车还在服务不少用户。咱们的目标很简单,就是想让全部用户都能在手机淘宝得到流畅的体验,不论你坐的是“高铁”仍是“绿皮车”。服务器

下面这张图,可以让你们更加直观的了解中国的移动网络环境。描述了从用户到IDC的端到端的路由状况,不只数据传输耗时长且丢包率高,同时安全性也是至关糟糕的,DNS劫持、内容劫持在中国就是屡见不鲜。网络

所以咱们在改善网络通道上有不少的事情能够去作,去探索突破运营商基础网络的限制,力争为用户创造极致的购物体验。session

3.ACCS总体架构

为了知足移动电商业务高速发展的需求,咱们决定打造一个世界级的网络接入服务,构建一个无线网络下”水、电、煤“ 同样的基础设施。这样一个基础设施须要作到的四个目标:架构

“ 双工、低延时、安全、开放。在这四个目标之上是围绕这个接入服务配套的运维体系,帮助最终用户取得良好的端上体验的同时,帮助开发者快速构建本身的业务。

如图-1所示,在整个接入服务上咱们划分为两层,接入网关层和应用网关层。接入网关负责链接的保持、消息的解析、消息的分发。应用网关实现各类应用层协议:API、SYNC、RPC、PUSH等,在应用网关的背后是具体的业务系统。同时咱们创建了一个统一调度服务,而不是采用传统的DNS,调度服务是咱们的控制中心,经过它咱们能够强有力的指挥咱们的客户端,而且不会受到DNS污染的影响。

与服务端的分层架构对应的是客户端的SDK,最底层的统一网络库SDK集中了咱们对网络优化的策略,并向上为各个应用网关技术的SDK提供API。

(图-1)

基于上面的开放架构,业务方能够选择直接开放具体的后端服务对接不一样的应用网关,不须要了解网络背后的细节,并经过应用网关如API网关提供的开发工具快速生成客户端代码。业务方也能够基于这个接入层设计本身的协议。

统一接入层集中管理了用户的设备、在线状态,并提供信息的双向传递能力。以下图所示:

(点击放大图像)

网关将致力于解决中间网络的通信,为上层的服务提供高质量的双向通信能力。

4.稳定性与容灾

稳定性与容灾是服务端中间件永恒的主题,统一接入层这样一个汇聚网关收益和风险是并存的,一旦这个入口故障了,波及的用户范围是不可想象的,如何作的更加稳定,是一个巨大的挑战。

4.1 网关架构的优化

对于一个统一网关来讲,对接的业务网关的信息传递特色是不同的,大部分的业务在全天都是比较平缓的,可是个别营销类业务会在短期内发布海量的信息,这样的信息发布会抢占网关的大量资源,对于用户的正常访问会产生影响。

举个例子,push服务须要经过网关推送2亿条消息,而这些消息须要在短期内所有推送完,而同时网关在为正常的用户的交互提供服务,海量信息的推送和正常的用户交互相互竞争资源,最终会形成正经常使用户的交互失败,对于业务来讲,这是不可接受的。

基于上面的状况考虑整个网关在布署上分为两个集群,一个集群处理常态的在线用户访问,另外一个集群处理海量信息的推送。以下图-2所示,经过这样的方式,避免了业务形态不一样,对统一网关的冲击,将不一样的业务形态进行了隔离。

(点击放大图像)

(图-2)

4.2 异地多活

阿里这两年一直在实施的异地多活的架构,在异地多活的总体方案中,统一网关承担了快速引导流量的职责,也是这一方案顺利实施的一个重要环节。

异地多活是一个多机房的总体方案,在多个地区同时存在对等的多个机房,以用户维度划分,多机房共同承担全量用户的流量;在单个机房发生故障时,故障机房的流量能够快速的被迁引到可用机房,减小故障的恢复时间。

4.2.1 无线接入层单元化的协商机制

先看一下web端在这异地多活中的实现方式

(图-3)

从图-3能够看到,浏览器的业务器求会发给CDN,由CDN上保存的分发规则,向后续的单元机房分发。无线端也这样作吗?客户端拥有强大的能力,能够作的更灵活;CDN的分发节点带来更多的机器成本;对于须要双工通信能力的客户端,消息投递更为复杂。这些是咱们思考与WEB不一样的地方,是否是能作些不同的选择?

(图-4)

如图-4, 咱们借助了客户端的强大能力,利用协商的机制来完成用户的请求正确被分配到不一样的单元,含如下几点:

  1. 客户端的请求始终带上当前用户归属单元的信息。
  2. 当请求到达服务端时,服务端判断用户归属单元是否正确,不正确将用户重定向到正确的单元 。
  3. 当前请求由网关在服务端上经过跨单元调用保证业务的正确性。
  4. 当客户端归属单元更新后,后续的请求都会发到正确的单元机房。

4.2.2 无线接入层单元化的旁路调度

协商机制看起来很不错,这里一个重磅炸弹丢过来了,机房的入口网络断了!

(图-5)

如图-5, 外网不可用,协商的机会都没有故障单元的用户没法恢复,这时旁路的调度服务出场了。

(图-6)

如上图-6, 咱们设计的调度中心这时又承担了单元化的旁路调度职责,当app访问的单元没法访问的时候, app会访问不一样单元的调度中心,询问用户的归属单元,经过这种方式取得可用的单元节点,将用户切到正确的单元。这个方案一样适用于单机房的接入层网关不可用的场景。

4.2.3 应用层网关不可用

某个单元机房的应用层网关不可用,这时等待应用网关排查问题须要的时间比较久,为了达到最快的故障恢复,咱们经过开关把修改接入层的转发规则,将流量切到可用的单元。以下图-7

(图-7)

5.端到端网络优化

5.1 统一网络库

在作网络优化一开始,咱们想作一个通用的网络库,这个网络库包含策略、httpDNSSPDY协议等一切系统网络优化须要的方方面面。上层api网关请求逻辑、推送逻辑、上传下载逻辑对于这样一个通用网络库来讲都是业务。在分层上将通用网络库和上层应用逻辑分开、完全解耦,对长期持续优化网络是颇有必要。以下图-8所示架构。

(图-8)

这样架构上分离,可让咱们更专一更系统化去作无线网络优化。统一网络库的几个重要特性:

  1. 灵活控制客户端网络行为策略(建连、超时处理、请求协议、是否加密)
  2. 包含HTTPDNS,支持异地多活
  3. 更细粒度控制和调度(域名级和域名下参数级)

一、二、3均由网络调度中心的集群控制,咱们但愿这个能够作到与业务无关,去掉一些阿里的业务属性后,这个模块你们能够理解为HTTPDNS,能够理解咱们在HTTPDNS以外作了大量网络优化的端到端的工做。

5.2 就近就快接入

基于网络库咱们实现了一套智能学习的网络策略,智能学习客户端在不一样网络环境下建连策略,用户从新回到这个网络环境会给出最优的策略进行快速链接,并按期去更新或淘汰本地cache的历史最优网络策略。为了建连更加迅速在各自网络下穿透性更好,接入服务器支持了多种协议和端口,客户端建连时能够极速接入网络。咱们有一个重要指标是打开客户端30S内网络请求成功率,就是关注连的快给用户体验带来的价值。

基于调度中心,咱们搭建了一个智能大数据分析平台,将客户端在在网络请求过程当中的数据如建连时间、首包收取时间、整包收取时间、ssl握手时间等重要指标收集上来 。根据这些指标分析出网络异常区域,调整咱们的就近就快接入规则,甚至推进IDC建设和CDN的布点完善。

5.3 弱网优化和抗抖动

在弱网优化上咱们尝试了QUIC,在网络延时较高、丢包严重状况下比TCP有更好表现。线上手机淘宝灰度版本实测切换到QUIC后,平均RT收益有接近20%。考虑QUIC在移动网络可能存在穿透性问题,将来咱们将采起SPDY为主,QUIC为辅助的模式来完善咱们的网络连接策略。一样在一些网络环境较差状况下,咱们采起长短连接结合方式,在长连接遇到请求超时或穿透性较差状况,利用短连接HTTP短连接去请求数据(在移动网络环境下HTTP协议尤为HTTP1.0的穿透性是最好的),这样能够在一些极端状况下最大程度保证用户体验。数据以下图-9

(点击放大图像)

网络切换和网络抖动状况下的技术优化也是一个很重要的方面,咱们常常遇到移动设备网络切换和信号不稳定的状况,在这种状况咱们怎么保证用户的体验?

针对这种状况咱们的思路是有策略合理增长重试。咱们对一个网络请求以是否发送到socket缓冲区做为分割,将网络请求生命周期划分为“请求开始到发送到 socket缓冲区”和“已经发送到socket缓冲区到请求结束”两个阶段。在阶段一内请求失败了,会根据业务需求帮助业务请求去作重试。阶段二请求失败只针对读操做提供重试能力。

设想一个场景:用户在进电梯发起一个刷新数据请求,进到电梯由于网络抖动的缘由网络连接断了,这个时候咱们可以合理策略去作重试,这样当用户离开电梯时极可能网络请求重试成功,帮助用户拉到了想要的数据,提高了用户体验和客户端的网络抗抖动能力。

5.4 加密传输1S钟法则

众所周知的传统https的整个握手流程是很是重的,在网络质量不高的状况下,形成建连过慢,用户体验惨不能睹,甚至都没法完成安全握手;然而从安全的角度咱们是须要一个安全的传输通道保护用户的隐私数据。安全与网络这一对冲突放在咱们的面前,须要在技术上有所突破,所以咱们自建了一套slight-ssl的技术,参考了tls1.3的协议,经过合并请求,优化加密算法,运用session-ticket等策略,最终在安全和体验之间找到了一个平衡点,在基本不牺牲用户体验的基础上,达到了安全传输的目地, 同时还大幅度提高了服务端的性能。经过技术的创新,咱们实现了无线网络加密传输下1S钟法则。

6.总结和感悟

手机淘宝2015年双十一网络接入工做关键字总结:

ACCS、网关架构优化、异地多活、弱网优化和抗抖动、加密传输1S钟法则

几点感悟:

  1. 网络接入任重道远,对于手机淘宝这样一个亿级UV无线电商平台,稳定性是立足之本。
  2. 接入层架构调整要么基于业务需求(可以适应业务的变化的架构才是最合适的),要么可以极大节省成本和提高稳定性。架构的演进必定是迭代式不能一蹴而就,重视积累和反思。
  3. 移动接入层解决方案上能够更多利用客户端能力,这个是无线对比PC Web的优点所在。
  4. 无线网络这两年网速是提高了但网络环境更加复杂,万物互联、设备随时随地在线、运营商的复杂性会对移动网络优化带来更多的挑战,端到端的网络优化以及推动运营商合做任重而道远。

最后打个广告,基于ACCS的云推送服务Agoo已经在公测中,将来咱们的移动基础设施将逐步上云提供给业界开发者朋友们。

手机淘宝技术团队吴志华(天施)、洪海(孤星)、陈虓将(仲升)等专家参与本文创做。

相关文章
相关标签/搜索