新新作者

Flutter & Dart三端一体化开发

QCon2018上海全球软件开发大会上,来自阿里巴巴闲鱼技术的新新为大家带来主题为“Flutter & Dart三端一体化开发”的演讲。作为三端一体化的“布道者”,展示后移动互联网时代一种全新的开发模式,为听众带来进一步提高移动应用开发效率的思路。

本次分享从“懒”和“效率”引入,分析Flutter的特点,简单介绍闲鱼通过Flutter统一iOS和Android两端的移动应用开发的经历。然后提出Dart Server“胶水层”的概念,“胶水层”是由客户端开发做简单数据拼装的一个“薄”服务端,用Dart统一语言,再通过开发All-in-IDE(创建接口框架、快速隔离部署、本地测试、无冲突调度等)统一开发模式,让写服务端“胶水层”的体验和写客户端基本一致,并尝试通过服务集合和代码生成等方式,不断降低“胶水层”的学习成本,最后实现三端一体化开发的思考和实践经历。

提问环节:

现场听众非常踊跃热情,有不少同学对Flutter的运用前景比较乐观,并表示引入Flutter开发的强烈欲望。有同学兴奋的说,他们之前8个月的开发时间,选择Flutter以后降成1.5个月,效率不仅仅是成倍的提升。另外有不少同学对Dart“胶水层”服务端和三端一体化开发这个新模式表示兴趣。观众提问主要围绕以下几个点: (1)闲鱼在Flutter的经验:包括混合开发的问题;包大小优化;复用现有的Native基础组件;复杂的动画;怎样连接OpenGL;数据流怎么管理等等。 (2)Dart Server的一些疑问:和NodeJS的方案比较、Dart Server开发阶段用Hot Reload快速部署,上线后代码怎么管理。 (3)闲鱼一些技术的开源计划:Dart Server Framework和工具集开源是否有具体日程,UI2Code是否有开源的计划。

从提问反馈情况我们也获得下一步思考方向:

(1)Flutter再进一步深入要做什么?

(2)胶水层是否从微服务到Serverless化?

(3)Dart Server Framework开源什么,哪一些是适合闲鱼自己的业务,哪一些是通用的?

内容摘要:

闲鱼APP中,我们通过Flutter混合开发,实现商品详情页和发布页,从体验来看,Flutter表现出非常接近Native的流畅性和交互效果。

在通过Flutter统一iOS和Android的两端开发后,我们想尝试进一步提高开发效率,提出一个人写三端的想法,但是客户端写服务端会有一些问题:

(1)客户端的开发方式和思维方式和服务端开发有很多不同点。客户端是本地程序,服务端是分布式系统;客户端开发注重细节和检验,服务端关注性能和容灾。

(2)服务端的部署很麻烦,机器很多,运维也很麻烦,客户端同学很难掌握。 (3)这种做法纯粹给客户端同学加工作量,影响需求进度。

我们想让客户端同学简单的实现服务接口,像搭乐高积木一样方便。

由此提出“胶水层”的概念,在客户端和服务端中间加一层“胶水层”,它主要做的事情是调用后端服务,拼装客户端所需要的数据。

 客户端是Flutter,用的是Dart语言,为了让客户端同学快速上手,“胶水层”优先考虑Dart。

Dart Server实现“胶水层”业务逻辑,框架提供了高性能的HTTP服务、服务路由、代码隔离、动态部署等基础服务。通过C++扩展或Service Mesh接入原有的JAVA中间件。而原有的后端服务下沉为领域服务,每个具体的领域由固定的服务端同学维护。

需要注意“胶水层多变、领域层少变”的原则,才能真正的提高开发效率。 我们选用闲鱼流量最大的商品详情接口在线上实验,运行三个多月,没任何线上问题,内存占用稳定。RT和最大QPS基本和原有JAVA服务持平。

只是统一前后端语言是不够的,怎么让Flutter开发同学快速上手。

(1)能否像写客户端程序一样写服务端胶水层?做到本地开发、运行、调试。 All-IN-IDE,通过IDE Plugins,支持一键创建接口框架,快速部署本地代码到服务端,在开发机器直接调用远程服务并把结果和日志同步回来…… (2)怎样才能快速的找到所需要的服务?能否像调用本地方法一样调用后端服务 在服务接口和方法加注解,通过注解生成文档,可以在文档平台上搜索查询。通过自己实现的JAVA2Dart的代码转换工具,可以把一个定义了接口和数据结构的Jar包转成Dart代码,同步也生成服务注册和发现的代码。

(3)在写代码的时候基本能否不考虑埋运维数据? 在代码生成中预埋了日志和降级开关。

移级部署是通过Dart Isolate来实现。

通过不同技术栈的同学实验。没有任何Dart基础的Java后端开发和有Flutter基础的移动应用开发同学,基本都可以在1小时内搭好环境并把Hello World写好部署,最多半天可以写一个带有真正业务涵义的接口上线。

因为Dart Server是单线程异步开发模型,很容易写出高性能的并发请求代码。客户端同学对后端服务理解要一定的过程,所以接口设计清晰很重要。

三端一体化开发的模式,一个人写了iOS、Android和它们所依赖的服务接口。 (1)以前在客户端拿到后端实现协议数据后,一般还要做从数据模型到视图模型的转换,现在不需要了,可以定义符合客户端展示需求的数据结构,在胶水层实现数据填充。由于前后端都是Dart语言,定义的数据结构代码是通用的,不存在兼容问题,不需要引入第三方协议定义语言。 (2)原来在客户端写的一些业务逻辑,可以根据需要转移到胶水层。 (3)Flutter实现iOS和Android两端UI。可以通过动态Widget管理框架,配合胶水层下发模板数据,让Flutter有一定的UI动态性。

三端一体化开发的一些好处: (1)减少前后端沟通成本,减少因协同引起的时间等待成本。 (2)开发更加灵活,部分逻辑在服务端实现让客户端扩展性更好。 (3)一体化开发、全链路日志、无冲突调试,让错误排查成本降低。 (4)可以更关注领域服务的性能、通用性等问题。

未来可以通过机器学习做到“UI2Flutter”,客户端开发只需要写交互逻辑和胶水层数据拼装,做到开发半自动化。

闲鱼技术
闲鱼技术

加入闲鱼,一起玩些酷的。(阿里巴巴集团闲鱼官方技术号,欢迎同道者技术交流。) 简历投递:guicai.gxy@alibaba-inc.com

理论闲鱼技术机器学习dartFlutter
4
相关数据
机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

调度技术

调度在计算机中是分配工作所需资源的方法。资源可以指虚拟的计算资源,如线程、进程或数据流;也可以指硬件资源,如处理器、网络连接或扩展卡。 进行调度工作的程序叫做调度器。调度器通常的实现使得所有计算资源都处于忙碌状态,允许多位用户有效地同时共享系统资源,或达到指定的服务质量。 see planning for more details

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

推荐文章
暂无评论
暂无评论~