【ATF】庄卓然(南天):掌上精彩-连接过去与未来-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

【ATF】庄卓然(南天):掌上精彩-连接过去与未来

简介: 在清华大学的ATF电商分论坛上,庄卓然(花名:南天)做了主题为《掌上精彩-连接过去与未来》的演讲,分享了他亲身经历的阿里移动技术的演进之路。

2016 ATF阿里技术论坛于4月15日在清华大学举办,主旨是阐述阿里对世界创新做出的贡献。阿里巴巴集团技术委员会主席王坚,阿里巴巴集团首席技术官(CTO)张建锋(花名:行癫),阿里巴巴集团首席风险官(CRO)刘振飞(花名:振飞),蚂蚁金服首席技术官(CTO)程立(花名:鲁肃)以及来自阿里巴巴集团各部门多位技术大咖齐聚一堂,与莘莘学子分享阿里的技术梦想。


在下午的电商分论坛中,庄卓然(花名:南天)做了主题为《掌上精彩-连接过去与未来》的演讲,分享了他亲身经历的阿里移动技术的演进之路,风趣的演讲让现场同学们不时会心一笑。

 

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

阿里上个财年中国电商平台零售额突破3万亿元人民币并超过沃尔玛,成为世界上最大的零售平台。在这3万亿的背后最根本的力量就是阿里巴巴整个电子商务及互联网技术在过去10年快速的发展。但是,3万亿只占到整个中国社会零售总额的10%,因此整个电子商务和电子商务技术还有非常巨大的发展空间,移动领域更是如此。手机淘宝在海量业务背景增长的情况下,经历了从工具到APP,从平台到生态的发展历程。技术架构也几经创新突破。未来几年将在视频直播,VR/AR领域有所突破。非常期待在座的学子和我们一起去开创新时代。

 

演讲实录:

大家下午好,我叫南天,很高兴今天来这里跟大家分享。今天我们看移动互联网,最早要追溯到将近20年前,那时候访问移动互联网还要通过移动梦网接入,当时硬件、软件技术各方面都不成熟。真正意义上的移动互联网要从2010年说起,这几年我们都经历了移动互联网的崛起。今天就是和大家分享在阿里三万亿的背后,移动上都有哪些技术实力。



海量业务挑战


先从整体的业务看,截止今年全中国能通过手机访问移动互联网的用户已经9亿人了,移动电商用户超过5亿人,其中手机淘宝和天猫等阿里巴巴的客户端总用户量超过4亿,根据第三方的数据阿里移动电商占了全中国移动电商的81%,所以我们说阿里巴巴是连接互联网和商业的第一品牌,在移动领域更是当之无愧的第一品牌。除了规模还有技术上的挑战。比如说多端,我们的手机终端就有iOS\Android\winphone及浏览器;比如说跨团队协作,912亿背后有无数的团队,有无数的开发工程师,在阿里仅端侧的移动开发工程师就有近两千名,涉及数十个部门。还有各种各样的模块、插件、中间件的协同。这是一个非常复杂的工程体系。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


这样海量的规模下,在用户体验、开发效率、安全稳定和规模上都催生了革命性的变化。


第一、用户体验:每一次技术上的突破都是由用户的使用习惯来驱动,互联网是典型的用户体验驱动的产业。传统PC时代我们用QQ聊天、淘宝买东西、百度搜索,这个本质就是体验驱动,哪个产品体验好就会选择谁。今天在移动领域,这个规律非但没有改变反而会变本加厉。移动端的体验已不仅仅是产品的体验、基础技术的体验,还有很多其他的如能耗、包大小,都可能成为用户体验的新挑战。

第二、开发效率:我们从开放透明的web生态回归到客户端形态,对效率会产生非常大的影响。而互联网很重要的就是“快”,唯快不破,怎样在客户端的时代,还能保证非常高的研发效率和迭代速度?

第三、安全稳定:因为手机随身携带,从某种意义上来讲,它是我们人体器官的延伸,它掌握了大量的个人数据,怎样保证这些数据的安全性?这对用户来说是非常重要事。

第四、规模:阿里巴巴从某种程度上讲是一个商业的生态,这样的规模我们怎样保证它的研发体系是有序、有标准、有效率的,并且我们每年会有非常严酷的挑战“双十一”,在阿里有句话,没有经历过“双十一”技术人员是不完整的。但“双十一”每年只有一次机会,你必须要保证它绝对的成功,所以在这样的规模下,你用什么样的方式来保证?

 

技术改变世界


规模催生革命


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

移动研发效率之殇:随着团队规模越大,业务体系变的越来越复杂,整个工程体系要保证我们的研发速度迭代速度能不断的加速。这是非常有挑战的事情。可以给大家分享一组数据,手机淘宝客户端迭代次数:2013年客户端发布了42次,2014年200次,2015年发布了500次。


打磨极致体验之旅:无论是从crash率、启动的时间、网络的开销还是在滑屏的帧率上,这些相对于web来说提出更高的要求,在过去的几年里,我们取得了一些非常有效的成果,我们有专门关注用户反馈的平台,在过去的一年里,我们发现用户关于闪退、性能类的反馈从8%降到3%。


守卫信任使命之战:我们评估了APPStore里18个行业Top10的APP,平均能扫描出的安全漏洞是87个,而今天在手机淘宝客户端里面,我们基本每个版本都能够控制在个位数

 

黑五&感恩节大促  VS  双11购物狂欢节

我们用“黑色星期五”和“网购星期一”两天全美国的电子商务网站、APP等加一起的数据跟阿里巴巴“双十一”这一天的数据对比。成交金额上我们是美国的3.2倍。黑五在移动端的成交占比仅在34%,而“双十一”在阿里移动端占比高达68%。可见不仅是成交额的赶超,我们在移动电商的普及上也是要超过美国一大截。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy



颠覆传统web的移动技术


传统的互联网技术跟PC时代一样是一个典型的BS的架构,在B的这一侧只是薄薄的一层的变现层,核心的工作是在做渲染。而所有的跟用户逻辑跟业务有关的东西全都在sever层。这个时代的前端工程师核心工作是解决不同浏览器的兼容性问题而不去处理太多后端的复杂业务逻辑。而我们所谈的架构、编程模型、伸缩性、扩展性、稳定性等技术都其实在谈服务端技术但在2010年左右,随着计算机设备计算能力的提升,我们开始把一些业务逻辑前移,当时出现了一系列像AJAX这样的前端的框架,能够很好的利用起个人计算机的能力,但本质上云和端的分工是没有改变的。但是到了移动时代这一切发生了很大的变化。


首先移动设备的计算能力不输于PC,其次移动设备上提供了将近200多个传感器。而这些是PC不具备的。所以这时候我们就发现开发的分割线发生了很大的变化,前端不再仅仅是跑在浏览器里的展示层,而是可以利用传感器利用移动设备做更加复杂的逻辑处理。这样的分层变化,计算的前移,使得云和端之间的网络里发生了很大的变化。这时候我们再去看客户端,原来只在后端出现的性能、兼容性、扩展性等问题都成为了客户端架构领域需要去考虑的核心问题,它决定了我们怎么样打造一个让用户满意,又有高性能、强扩展性、安全、还能保持高速迭代的移动客户端。

 640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


这是这个时代非常不一样的挑战。所以我们简单来看看,随着这样的变化,回到富客户端的开发模型里面,可能在哪几个领域里面,会是我们需要重点攻克的课题。


第一、部署模式:PC时代,所有业务逻辑计算都是集中在服务端完成,即使是前端的js脚本也是部署在服务端可以快速下载,而客户端我们要通过发版安装在用户的手机上,每次更新都需要用户去下载,整个迭代速度、用户侧的更新速度都达不到要求,那我们怎样能在客户端的研发模型下具备很强的动态部署能力?能发现bug快速修复?怎样在客户端里具备很强的动态性?

第二、编程模型:到了富客户端侧,我们编程模型会发生什么样的变化? 传统在服务端我们通常会去用的MVC编程模型,到今天或许因为绑定方式调动方式的不同,会进入MVVM或MVP的编程模型下。

第三、系统架构:整个移动的生态,它是有多个操作系统,拿Android操作系统来说,每个厂商都有自己的定制,这些严重碎片化的东西我们要去面对,安装包不能无限制的扩大。对于用户而言,好的体验一定是相对小的安装包,这部分又如何解决?

第四、体验度量:性能等等这一系列的问题,它不仅仅是看吞吐率这一个简单的指标,用户在看手机时会说这个软件有点卡,那卡的原因是什么?就体现在软件的刷新频率上,如果刷新频率跟不上,突然出现GC过多内存占用时可能就会丢帧,这一帧丢掉就会让用户感觉卡。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


阿里演进之路


在阿里巴巴,手机淘宝走过的5个时代:2009年是最早的WAP版的手机淘宝;然后到了2010年的时候手机淘宝是一张披着Native外壳的Wap,外面的壳是Native,里面的核心技术还是大量使用webview的技术,通过h5去展现,通过JS去转码;2013年我们做了比较大的改版,整个集团里打造了航母战略,整个APP不仅仅是一个简单的工具,它是一个平台,它上面不仅有天猫、聚划算,还有口碑等,这里每个模块既可以单独的运行成为独立的客户端,也可以长在平台的APP上,所以在内部有很形象的比喻叫航母,这上面所有的模块称之为飞机,既可以在航母上降落,又可以独立起飞;而2015年—2016年阿里巴巴在移动布局进入生态时代,我们在打造一个电子商务的商业操作系统,那今天在移动端也一样,这里面包括很多核心的组件、基础设施可以在不同的APP中共享,去复用。同时不同App的内容既可以作为独立的App,也可以作为一个插件的形式存在,这就是整个阿里在技术演进的5个时期。


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


传统的服务端架构,我们通常喜欢增加一个层次来解决问题,比如为了提高性能需要增加缓存,可以通过增加一个分布式的访问层等去解决问题。那在服务端,因为所有的部署是在sever端,在我们自己维护的IDC里,我们可以把这个层次加的非常厚,而且非常稳定,一切可控。


进入移动端后,发生了巨大的变化:首先,上层还是很重的业务,除了iOS和Android这类移动os之外在上面有一个很重的标准App Framework,这时候对架构来说进入非常大的挑战期,有时架构会设计得对整个改动非常的大。很多时候你的设计都会白费;其次,你不可能无限制的增加你的层次,因为手机容量有限,安装包大小必然受限;再次,你要兼容OS,因为OS和App Framework变重了,架构的设计考量要面向整体用户体验,这都是在移动客户端整个架构上和PC非常不同的特征。 


640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy


平台级APP的客户端架构之道


我们应该都经历过这个阶段,就像赶火车一样,不同团队都想拼命的爬上这个火车,但是一个地方出bug整趟火车都开不了。一开始我们架构治理就面临这样的问题,在早期Android 2.4版本还有65535方法数的限制阿里巴巴是除了Facebook之外第一个面对开发工程方法数超过这么多的公司,所以说要有平台级APP的客户端架构设计方式,才能够满足这么多的模块,这么多的用户,能够快速的迭代,且有很好的用户体验。


所以,2014年我们开发了容器架构,简单来说,过去客户端是两层的结构,下层是基础库,上层是业务逻辑。现在我们改成三层架构:最下层还会有一部分的基础库,主要是一些与业务无关的客户端中间件;中间层,我们增加了runtime运行时的容器来调动总线,其中总线又会分UI、服务、消息,它让不同的模块只去依赖Runtime容器,而不会形成互相的依赖;最上层,我们把每个可以部署的模块称之为一个bundle,每个bundle之间是没有关系的,既可以作为一个模块长在容器上,也可以独立出去打成一个完全独立的APK。我们可以把客户端看成一个完整的工程被拆分成了多个不同的小工程,在这个插件式的体系中,所有的模块可以动态的插拔在这个容器之上。既可以做到在开发时模块之间互不影响,也可以做到在运行时不需要打整包让用户去下载,而只要去下发一个独立bundle,用户在有Wi-Fi条件时自动下载及动态加载。通过这个机制我们可以实现所有模块的替换。这是2014年做的非常大的技术改进。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


2014年8月份,我们第一次在行业里公布我们架构是容器化的,在ArchSummit上做了一次完整的演讲,所以很高兴看到2015移动开发圈讨论最多的就是动态部署,插件化的架构、容器架构如何去运行,很多公司都加入这个阵容中。在2015年Android新版本发布时,他们也采用了这样的架构方式重新去设计AndroidAPP Framework。所以客户端的弹性架构上我们经历了这么几个不同的时代,有了这样的架构后,我们的从发布频次、打包效率、还是弹性发布、运维监控上都有很大的进步。

 

支撑上亿人同时在线的移动接入平台


我们在开发PC端软件或传统互联网web网页时,基本不会考虑带宽、时延。但在移动端是非常大的挑战。所有的无线都是有线的,所有有线都是无线的。因为所有的移动开发是通信和互联网的结合,所有的手机连到互联网是去和基站做连接。这使得移动端在2G网络下什么都没拿到,光建立连接就花了1S。这样的网络情况,我们根本谈不上用户体验。很多用户通常是在公交上、火车上、地铁里访问手机淘宝,那我们如何保证弱网环境下的用户体验?我们的方案是建立一个叫ACCS的网络接入平台,在架构上一方面做网络通讯协议的优化,另一方面灵活的调度,在全国有多个接入点,通过调度模块来选择最优的接入链路和最稳定的连接链路,同时在后端数据网络的模型上也不仅仅是传统web的Request、Response的R模型,它也支持消息下发的PUSH模型,也支持像sync这样同步的模型等等。这是过去两年里阿里做的非常核心的工作。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


今天拿ACCS平台跟业界所有的移动加速网关做对比,我们都取得非常好的效果。这侧除了架构的设计,灵活的调度之外,同时很重要的是在协议这一块。今天传统的HTTP在移动端是非常低效的,所以在2014年我们开始尝试spdy,到2015年我们的基础协议全面升级到HTTP2.0,现在我们在花很多精力研究自己的应用协议,因为在应用侧两个端都在掌握在自己手上,我们没有必要去遵守一个低效的标准做事情。去年我们通过TLS1.3的协议改造,优化窗口时间等,成为全球唯一一家支持HTTPS的电子商务网站,大家都知道支撑HTTPS这在移动端是非常大的挑战。今天我们能支持10亿设备的管理能力,同时在线数超过2亿,在全国有多个接入点做到就快接入和连接管理以及数据转发。这些为未来视频、直播等网络上的升级做好了准备。


双十一背后的移动开发框架 Weex

我们再回到双十一的Case上,过去有很多人尝试用h5来做这个事。第一因为不用跨多端,ios、android都用一个语言来实现。第二动态性好,不需要发版本。虽然我们能做到动态下发bundle,还是要开发iOS、android两个bundle,绕不开跨平台开发的复杂度。那么H5可以做到,但为什么大家又不用?核心问题是性能。我们曾做过测试,将页面用户首屏打开时间从4秒优化到3秒,这仅仅节省1秒让用户的转发率提高了68%。双十一”的时候面对很大挑战是会场,页面里面有大量的商品,完全是个性化的。它展现的形式是动态调整,如果是纯Native所有的便捷性就会失去,如果是纯h5,体验又无法保障,为此我们开发了非常重要的Weex框架,它本质上是一个性能更好的webview,可以让所有开发者用H5的语言,且在多个平台上达到近似Native的效果。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


在过去我们常会拿基督教里的圣杯来比喻软件开发的银弹,比如高速迭代和性能的完美平衡点,一次编译多次运行。我们提到一次编译多次运行会想到web、Java。今天Weex希望把整个移动开发生态通过H5取得更好的体验从“双十一”来看无论是首屏的加载时间、内存的消耗、CPU的消耗、帧率整体的流畅度,Weex都有非常好的展现效果,今年6月份我们会把这个框架开源出来,希望这一年Weex在行业内的推进能够减少移动端的的开发复杂度,提升开发效率和整体体验。 


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

展望未来


席卷全球的移动技术革命,极大程度推动了互联网的用户规模和触网深度的发展。智能手机APP对互联网的影响,不仅仅是又一个终端,更是人体身体器官的衍生。连接过去,畅想未来。阿里移动核心技术又将为我们开启怎样的明天,创造何等的惊喜?


未来移动端上依然有很多想象的空间。互联网这么些年里产生了媒体内容变化的趋势,最早是纯文本,然后是图片,阿里巴巴积累了非常多图片方面的技术,无论是图片内存的优化还是传输编码的成本都做了大量优化。到今天我们进入了视频、直播领域,随着技术的成熟和新的用户出现,很多人更加喜欢直播的产品体验。未来的3-5年我们还会进入到VR、AR和MR的时代,像VR的概念已经出现很久了,但是计算机视觉的时延问题一直没有解决,设备时延会超过100毫秒,而大脑的反应超过4毫秒就会眩晕。所以,虽然VR在20世纪60年代左右就有人提出,但是实际上在互联网高速发展20年过程中,这个领域并没有发生质的变化。但是到今年我们很高兴看到,随着硬件设备的发展,离理想值标准越来越接近,预计在未来的3-5年可能会出现更多的VR或AR的内容。这可能是互联网未来新的发展方向。所以在整个阿里巴巴移动端的技术演进过程中,我们花了很多精力在提升多媒体互动,无论是视频的同时在线的人数,还是整个视频量的转码技术降低成本,互动方面我们都已经有大量的积累。


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=



通过下面这支小视频,让大家感受一下未来购物会是什么样子的:

http://v.youku.com/v_show/id_XMTUxODc0NzE2MA==.html?from=s1.8-1-1.2

关于VR和AR这个视频讲了很多东西,是我们期待的未来购物形态,我们相信这里面很多东西慢慢都会变成现实。对于一家技术互联网公司而言,改变我们上亿用户生活的,非常重要的是技术背后的想象力。所以我们沿着这条充满想象的道路上去摸索,一定能摸索出更好有意思的创新产品。

希望大家能够加入我们,让我们一起共创未来!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章