出品|阿里巴巴新零售淘系技术部
2019年8月3日,「淘系技术嘉年华-杭州站」移动端的技术创新和实践,在阿里巴巴西溪园区举办,38 度的高温也挡不住大家对技术的热情,170 位开发者齐聚,进行了一次面对面的技术交流。线上直播在线观看达 38000 余人次。
本次技术沙龙我们荣幸的邀请到 5 位来自阿里与华为终端的技术专家,为开发者们分享淘系 App 移动端技术创新和实践的主题,助力应用高效开发。五位大咖与你分享端智能 MNN、手淘性能优化、手淘时间穿越、Flutter、华为折叠屏适配等众多全球前沿移动端话题!是不是充满期待 ?那么这次参与的同学们关注的技术和问题又将是什么呢。小编也为大家整理了满满的技术干货哦,我们一起来看看~
关注「淘宝技术」微信公众号,回复“沙龙”即可获取本次活动完整版 PPT ~
干货来喽
随着来自阿里的资深技术专家兼金牌主持人——白衣 进行的开场介绍和暖场,活动正式开始。
他提到了随着移动生态的进一步繁荣和创新,移动 AI 、跨平台、体验优化、高效测试等成为热门话题,为了持续创新不断提升用户体验,淘系技术部希望能够把自己的经验带给大家。
淘系技术部资深技术专家 白衣
01 兼容并蓄——MNN的异构计算设计与实践
淘系技术部算法专家 霞影
本议题主要分享端上推理引擎 MNN 为了应对移动端上复杂的异构环境所进行的实践与探索。包括:异构计算的定义与移动端上的异构计算环境,兼容多种硬件平台的 Backend 插件机制,异构设备计算结果正误与精度控制,针对不同 GPU 硬件的性能优化策略,多硬件设备并行计算探索。探讨推理引擎如何更好的利用硬件资源与未来的发展方向。
作为通用的端上推理引擎,MNN 会被部署到各种各样的移动端设备上面,而移动端设备是多样的,从系统层面来说分 IOS 和 Android ,从芯片层面 Android 阵营又有高通、联发科、海思麒麟几家并立,即便是同一类芯片也有每代的版本差别。对于异构计算而言,这种碎片化是非常大的挑战。
首先是兼容性问题,同一套代码可能在 A 手机上跑得好好的,而在 B 手机上就崩溃或者不能使用了。异构计算的使用需要用标准,也就是一组 API ,这个标准在 IOS 和 Android 上面不一样,比如 IOS 上 GPU 的使用标准是Metal,而 Android 上面,由于历史原因,是 OpenCL、OpenGL、Vulkan 三套标准并存的局面,没有一套标准能覆盖所有设备。
其次是性能问题,移动端上面由于功耗和面积的限制,像 GPU 之类的算力受到内存带宽的制约,不能充分发挥。此外中低端芯片往往会挑 GPU 的配置下手,这也导致其 GPU 的算力不如 CPU 。
为了尽可能解决兼容性和性能的问题,我们将端上推理的计算过程分解为 图计算调度、形状计算、资源准备、执行计算四步。
图计算调度是确定计算图执行顺序。形状计算是由每个算子去根据输入的大小计算输出的大小。这两步跟具体的硬件设备无关,我们将其抽离成 Schedule 和 SizeComputer 。资源准备与执行计算这个与硬件相关,我们封装了后端(Backend)这个接口去抽象。Backend 包括三类接口函数,内存交互、内存申请与创建执行器。
每个算子的执行器又包括 onResize 和onExecute 两个接口,onResize 接口中作资源准备环节中除内存申请之外的工作,onExecute 是在最后执行计算过程的调用的接口。通过这样的接口设计,我们尽可能地降低了各种的硬件的适配成本,并且由于我们分离了资源准备和执行计算的过程,可以将非计算的损耗降为一次性的工作。
针对不同设备的 GPU ,其优化策略是相似的,主要会从三个方面进行优化:内存、并发、内核。
内存指的是在 GPU 计算之中读取的内存量与内存访问效率,对应的优化策略包括但不限于这三点:
1、在计算精度允许的情况下选用 Fp16 作为中间数据存储格式,这样相对原始Float类型可以减少一半的访问量;
2、根据 GPU 的型号选择使用 Image 或是 Buffer ,有些 GPU 针对 Image 有特殊的缓存优化,利用它可以提高内存访问效率;
3、根据算法选择合适的内存布局,减少运算所需的内存读写量。并发是指的任务的划分,包括整体并发数(Global size)和局部并发数(Local size),这要求我们选择适宜并行的算法,并且根据 GPU 型号确认局部并发数大小。内核是指着色器语言等的编写,这要求我们选择时钟周期较少的函数、减少条件分支等。
02 手淘性能优化实践
淘系技术部高级技术专家 之羲
本议题主要分享了航母级应用手机淘宝在性能优化过程中沉淀下来的思考与实践,围绕着基础体验与大促保障两个核心场景下不同技术挑战,实施的优化策略与方法,借此探讨手淘在性能优化过程中的一些思考。
手淘的业务场景也比较复杂,从浏览到下单支付流程涉及多个页面链路较长,在业务上也直面市场变化,而航母战略,使得手机淘宝的技术复杂度和代码规模都到了一定的高度,面对这样的技术挑战,围绕基础体验和大促保障的核心场景,在架构层面,系统层面及策略层面制定优化方法。
大促是电商最核心的场景,大促保障的体验核心点是高流畅性,高稳定性,高实时性,高动态性,为此构建了像 weex 这样的动态框架,并在逐年大促中优化和演进。同时,细分设备能力及容灾的策略,保障了较好的稳定性和性能。
性能优化无止境,手淘根据自身的特点总结了4个优化方向,一是系统层面的优化,二是提升硬件的吞吐率,减少硬件阻塞,三是架构优化,重塑模块间的关系提升架构效率,四是因地制宜,针对设备能力量身定制功能。
03 手淘客户端时间穿越
淘系技术部高级测试开发专家 韩锷
本议题主要分享手淘通过时间穿越的方式,提前体验双十一客户端总体情况,提前验证手淘功能以及性能。包括客户端、服务端时间穿越的方式,以及客户端全链路验收的方式。
时间穿越的技术实现分为服务端,客户端,灰度环境三个部分。
服务端
所谓时间穿越实际就是将整条链路进行基于当前时间的偏移,也就是需要更改应用的时间。
应用的时间是取自集团提供的 NTP 服务,所以需要做的第一步是自建一个 NTP 服务,自建 NTP 服务能够提供集团 NTP+ 偏移的一个新的时间服务。之后我们将有需要进入未来时间的应用都扩容到打有指定标记的宿主机群上,接下来只需要将宿主机的时间指向我们的自建 NTP 服务就完成了应用的时间变更能力。为了使应用无需进行任何改造以及部分应用涉及到预算问题,我们打通了底层部分,支持应用的一键扩容。
客户端
客户端的时间并非取自用户设置的时间,又因为手淘后端应用数量巨大,穿越后必然会存在一部分应用处于当前时间,另外一部分应用处于未来时间的情况,根据上文的逻辑,客户端的时间会被在当前时间和未来时间来回的纠正,导致整个客户端无法使用,我们采用上图所示方案,来规避上述问题。
灰度环境
该如何保证线上用户不能进入到未来时间的环境中?又如何使指定用户进入到未来时间的环境呢?
对于淘系的应用我们采用的是系统灰度环境;非淘系的应用采用的是微服务接口。两种情况都是在统一接入层对当前的请求进行一次判断,如果请求是白名单用户发起的,就进入到未来时间的灰度环境中,如果请求是非白名单用户发起的,那么就进入到正常的线上应用中。通过这种方式保证了在不影响线上用户的前提下,保证指定用户进入到未来时间的环境中。
04 Flutter在闲鱼的技术演进和创新
淘系技术部无线技术专家 吉丰
本议题主要分享了闲鱼在 Flutter 技术架构实践和演进过程中的问题、解法和创新。从两个阶段来切入,如何接入和如何规模化应用。包括通用混合栈的设计实现、高性能外接纹理方案的开拓和应用,以及在规模化应用 Flutter 中沉淀的 fish-redux 应用框架。
fish-redux 应用框架核心是解决复杂业务环境下的,代码高耦合和低复用的问题。通过通用框架的设计思想和理念的分享,传达了函数式编程,简化的状态管理使用方式,创新型的组件化抽象等关键特点。听众不管是前端还是客户端还是 Flutter 开发,可以从中获得收益。
Dart 一体化是解决资源不均衡、协同低效、关注点分离、多端不一致、协议约定成本高、产能非线性等问题。讲解了闲鱼在 Dart 一体化中如何消除云端技术壁垒、如何发挥带来的业务关注点聚焦红利、如何促进生产关系重塑。给听众带来一些新的启发。
05 华为 MateX 折叠屏适配指导
华为终端MateX项目经理 闫鸿飞
本议题将从Mate X规格和接口介绍、基础适配、典型案例分享、进阶适配、开发与调试五个角度为现场的开发者介绍了折叠屏适配指导的实践经验。
其中,华为 Mate X 适配项目经理闫鸿飞在适配的环境方面做了精细的讲解,方便开发者适配。第一个远程真机,推荐大家使用,因为无论从屏幕的比例效果,还是折叠这个形态,在远程真机上都可以模拟,但是差别就是没有实际显示对应的机器的信息和名称,但是从 UI 适配和折叠的适配上,从我们实践经验来看,基本上可以满足大家的需求,这样就省去大家很多的对真机的依赖。
第二个是谷歌浏览器。从 Android Studio 3.5 Canary 版本开始,开发者可创建一个运行 QBeta 2 版本的折叠屏虚拟设备,其支持的硬件配置分别为7.3英寸(折叠后为4.6英寸),以及 8 英寸(折叠后为 6.6 英寸)。建议开发者选择 8 英寸的设备来模拟适配华为的 MateX 折叠屏手机。
备注:Android Studio 3.5 Canary 版本下载地址:
https://developer.android.google.cn/studio/preview
在两个配置中,模拟器均允许开发者通过屏幕控制来触发折叠/展开操作,旋转屏幕方向以及快速操作,点击模拟器左上角的按钮就可以在折叠态和折叠态之间切换。
最后一个就是用命令模拟调试的方式,更多是基于真机来开发,开发者也可以在非折叠屏手机上面通过命令修改手机的屏幕分辨率来进行模拟调试:
1.折叠切展开模拟方法:
- 预先将手机设置主屏分辨率:adb shell wm size 1148x2480
- 通过修改手机分辨率为全屏分辨率模拟状态切换:adb shell wm size2200x2480
2.展开切折叠模拟方法:
- 预先将手机设置全屏分辨率:adb shell wm size 2200x2480
- 通过修改手机分辨率为主屏分辨率模拟状态切换:adb shell wm size1148x2480
3.分辨率恢复方法:
- adb shell wm size reset
圆桌讨论
这次技术沙龙的最后一个环节——圆桌讨论,60 多位同学积极参加话题讨论,本环节分为三个主题,端 AI 与 5G 、跨平台、客户端体验。现场的同学们照例走向自己喜欢的主题并围圈而坐。在创新技术的探索上有什么疑问大家都可以畅所欲言,与各位资深技术专家进行深度的交流。
最后
本次淘系技术嘉年华大家共度了一个美好的下午。我们将会马不停蹄的继续向前,和更多的开发者面对面交流,那么下一站会是哪里呢?
你希望我们去哪里呢?欢迎在评论区里留言,很可能就是你所在的城市哦!让我们下次再见咯~
更多技术干货,关注「淘系技术」微信公众号~