2014年双十一电商大战完满结束,各大电商也随后相继公布了各自的订单数量和销售总额。在这一次的电商大战中,各大公司已经从单纯的价格较量延伸到平台稳定性和用户体验上的竞争,而这些较量背后需要有相应的强大技术做支撑。

其中,Web前端直接和用户交互,它的稳定性、流畅性直接决定着整个系统的用户体验。天猫的前端架构负责人鬼道,将分享天猫在Web前端方面的成熟经验。

 

天猫Web端的架构

MAP(tMall fe Architecture & Publication)是天猫 Web 端的架构代号。MAP涵盖了一张页面的代码管理、开发环境、模板、数据接口、发布、终端判断、线上监控、性能标准等各个方面。在本次双十一中,我们全链路的性能都处于竞品的顶尖水平,如首页第一、搜索结果页第二、商品详情页第一。

另外,在移动端,我们使用了一项叫Dynative的技术,当使用天猫客户端访问双十一的Web页面时,客户端会自动生成一个Native实现的View,大大提升交互的流畅性和加载性能。另外我们也有同学在负责研究跨终端的组件方案,让一套组件可以同时运行在手机、PadPC上,当然在客户端下时它同样能转换成一个Native组件,从而保证一致和优秀的用户体验。

在性能监控上,我们不但能区分不同地域用户的性能情况,还能以网络类型、客户端、访问类型(直接访问、刷新、返回)、网络协议(HTTP/1、HTTP/2、SPDY)、操作系统等过滤条件分析应用性能。在性能指标上,不但有首字节时间、首次渲染时间、Dom ready、onload这些常规指标,还提供重定向、DNS查询、TCP链接建立、服务端响应、动画帧数、内存占用等指标。对于应用的加载性能除了能提供以上提到的关键性指标外,我们还能提供应用加载过程截图以及基于全网真实用户环境的加载瀑布图。

 

淘宝前端页面优化

如何保证在峰值时的用户体验,这也是我们最近重点的事情。从大的方面来说,主要有两方面。

一是业务降级,通过监控重要接口的访问情况,一旦访问量超过警戒值,为保证核心链路的稳定性,会将其他来源的访问按照预设的方案进行降级。

二是CDN,CDN 是静态资源的主要载体,阿里前端的静态资源默认都部署在 CDN 上。另外后端系统针对系统读写特性也有相应的动静分离策略、容灾策略和异常隔离策略。

 

淘宝性能技术

我们在全国各个省部署了大量的CDN服务器,把短时间内高并发的请求转化成了分布式的处理,由每个省市本地的服务器来处理各自的请求,避免了大量数据跨长途骨干网往返;另外,我们在操作系统的内核和TCP协议栈层面也针对网络拥塞、丢包的情况做了优化,快速发现丢包缩短TCP协议的应变时间;通过精准的IP库区分用户区域,确保用户访问到离自己最近的服务器。

同时,天猫客户端会根据网络状态展示不同质量的图片,如Wi-Fi下展示高清图片,非Wi-Fi网络下展示普通图片,这个策略在图片质量和响应速度上做了很好的折中。

另外,减少图片请求在移动端上效果尤其明显。Icon Font 用于维护一组图标,在享受矢量图形缩放和文字颜色可变的优势上,也是减少图片请求的一种方式;未使用 Icon Font 的图标会通过 split 工具自动合并成大图,同样可以减少图片请求数量。天猫的主要页面上都已经做到在高清屏(移动和PC设备)上展示高清图片,非高清屏上降级展示普通图片。

图片格式方面,我们也有新的尝试,在天猫商品详情页面上也部分启用了WebP,主要是考虑WebP相对JPG有更高的压缩率,但WebP在移动端解压速度的问题也不容忽视。

 

天猫前端监控

有监控手段,我们会实时分析访问日志,上报各个区域的用户请求响应时间,在发现异常时通过DNS调度将用户导流到正常的服务器上。

 

天猫跨终端一致性

在一致性上,我们有一个很重要的基础设施Detector。随着无线互联网的发展,业务上需要在不同的端给用户呈现不同的内容,前端所面临的终端环境也越来越复杂和碎片化,这就要求前端开发具备方便获取准确、一致的各种终端信息的能力,为了解决跨终端一致性问题,在双十一之前,设计和开发了多终端判断基础模块Detector,通过Detector,我们实现了双十一期间成百上千页面的一致终端判断,逻辑跳转,不同终端内容输出的艰巨任务。

tmall-11-terminals-the-consistency-of-experience-01

Detector是技术基础,用户感知到的一致性需要依靠上层应用在设计层面的一致性保证,由于天猫不同终端上的界面来自同一个设计团队,这有利于设计风格和理念保持一致。为了更好地延续设计风格,天猫内部有一个MUI项目,就是将常用的界面元素封装成组件库。

 

双11经验分享

经验有很多,我挑些重点的来分享给大家。

1,Hybrid API的应用可以降低跨客户端开发成本

双十一前我们推动发布了阿里 Hybrid API 1.0,它提供一套能够运行在阿里多个客户端和独立浏览器的 18 组共26个API,目前已支持天猫、淘宝、支付宝客户端,既包括常用的传感器API也有窗口管理、登录、支付等 API。双十一期间应用于天猫狂欢城、天猫店铺互动、手机淘宝互动分会场等多个业务。

 

2,游戏引擎 Hilo

Hilo 是阿里研发的互动游戏引擎,支持 PC 端和移动端几乎所有主流浏览器,也通过Flash支持IE 6、7。Hilo可以极大降低互动游戏的开发成本,适合阿里的业务场景。双十一期间应用于天猫狂欢城、天猫店铺互动、手机淘宝互动分会场等多个业务。

 

3,应用稳定性监控

对于应用的稳定性,我们有覆盖所有端的监控系统,在Native端我们有实时的Crash监控平台,在Web端我们有实时的JS报错监控平台,任何客户端的报错都能实时体现,例如我们发现iPhone客户端在双11时Crash率大幅上升,我们当晚立刻修复了问题,Crash率恢复到了正常水平。

 

4,双十一天猫首页开闭幕式

相比去年而言,本次开幕式的的挑战主要是动画变得更加复杂,根据场景选用合适的动画:CSS 3 动画用于处理开始出现时的头像波浪,CSS 3动画适用于大批量处理、动画方式较为简单的场景;JS动画用于处理中间两个场景,JS动画使用了KISSY框架的Anim模块,比较方便;Canvas动画主要应用于倒计时阶段的粒子效果。

 

5,关注上下游系统及链路

双十一需要保证是对客户的整体体验稳定、流畅,任何一个环节出错都对这个目标有影响;前端处于用户体验的最前端,用户的体验从这里开始,任何的差错也会从这里产生;加上前端是所有后面系统服务的“消费者”,从消费者的角度关注和检查,而不仅仅依赖服务方自身的监控和保证,能最大限度减少出问题的概率。

 

6,充分的预演和测试

随着移动的浪潮,前端所面临的终端环境也越来越复杂,不再是仅仅关注几种浏览器,加上系统碎片化的问题,所需要测试的客户端越来越多,仅仅依赖于QA和前端的自测在日常中基本能保证主流的终端稳定,但在双十一这样的场景中,就显得不足。

 

7,依赖于程序而非系统或人

双十一其他每个时间段都有一定的状态变化,从预热到正式到下线,每个阶段的操作我们都靠程序控制,提前上线,而不是依赖于人或者系统的定时发布。没有人可以做到100%不出错,没有系统可以保证100%稳定,将出问题的几率控制到最小。

 

 

原文InfoQ