5G时代|闲鱼在Flutter&FaaS云端一体化架构的探索实践之路

稿件来源:阿里云开发者社区

 


导读:

随着无线,IoT 的发展, 5G 的到来,移动研发越发向多端化发展。传统的基于 Native+Web+ 服务端的开发方式研发效率低下,显然已经无法适应发展需要。本文将会介绍闲鱼近一年来在Flutter&FaaS 一体化项目上的探索和实践。

传统 Native+Web+ 服务端混合开发的挑战

我们希望探索闲鱼这样规模的独立 APP 的高效研发架构。主要思路是围绕 Flutter 解决多端问题,并使 Flutter 与 FaaS 等无服务容能力打通,形成云端一体化的研发能力,支持一云多端的发展需要。

在某些场景已经取得效果,过程中的思考与大家交流。

跨端方案 Flutter RN 的对比与选择

闲鱼选择 Flutter 主要是出于高性能的考虑。 Flutter 高性能主要来源于 2 个原因:

1 Dart 的 AOT 编译能力。

2 自建渲染引擎,不需要转换到 Native 控件,避免了线程跳跃等问题。

更多比较:

没有银弹的解决方案, Flutter 与 RN 各有优点。如何选择因素很多,关键看如何取舍,举个例子:

1 当前团队人员以前端 JS 栈为主还是 Native 为主?如果 JS 为主,写 RN 会更习惯。如果 Android 或 iOS 为主,写 Flutter 会更习惯,因为 Flutter 的研发工具和体验与 Native 更相似。

2 动态性和复杂交互的性能,哪个更重要?动态性重要 RN 合适,性能体验重要 Flutter 不会失望。虽然 Flutter 也有一些动态化解决方案,例如 JS 转接 Flutter 引擎的方案, Dart 代码 CodePush 的方案,组件化服务端组装方案等,但这些动态方案都没有 RN 这样从 JS 层解决的这么好。

3 是否需要 IoT 等多端布局? Flutter 在嵌入式设计上有布局,性能有更好的表现。


Dart 作为 FaaS 层的首选语言

云端技术栈的打通,是减少协同的不错的解法。以往前端 +Node.js 的一体化方案大家应该不会陌生,然而如果端侧使用了 Flutter ,那云侧 Dart 自然是第一选择。

FaaS 的本质是运行在云端,那 Dart 适合用在云 /Server 上吗?

Dart 语言早于 Flutter ,在最初的设计上, Dart 就可以用于 Web、Server 。 Dart 具备一些服务端语言的特点:

1 强类型,可预测性

2 GC 异步和并发

3 高性能的JIT

4 Profiler

闲鱼首先尝试将 Dart 作为普通的 Server ,替代传统的 Java Server ,然后再将 Dart 容器嵌入到 FaaS 容器中。建立 Dart Server 能力是第一步,也是主要的工作量所在。

闲鱼在 Dart Server 方面的建设思路:

开发期:

1 受 Flutter 的 HotReload 启发,将 HotReload 移植到了 Server 侧。

2 利用 Isolate ,在开发环境中为每个开发人员分配一个 Isolate ,解决以往的环境冲突的问题。

运行期:

3 Dart 本身是单线程异步模型,并发能力需要用Isolate支持。

4 利用 Dart 的 Zone 的特性,可以方便的实现调用链路的跟踪,方便记录 Trace 日志。

5 利用 Dart 支持的 C++ Extension 能力,可以在 Dart 中访问支持了 C++ 的中间件包。另外, Server Mesh 也是一个重要的思路,用于解耦异构语言之间的服务调用。


一体化的更深层思考

上述内容实现了 Flutter & Dart FaaS 的技术栈的统一,但仅技术栈统一还远远不够,端、云的同学仍然无法真正互补和一体化打通,原因在于还有更多深入问题需要考虑:

1 一体化的业务闭环红利如何最大化?一体化不仅是效率的提升,还使一个同学可以 Cover 一个云到端的业务,使业务闭环。

2 如何消除云端技术壁垒?仅技术栈打通,端人员还是不会写云,原因在于对云的思维模式的不理解,需要真正消除云端的技术壁垒。

3 如何使工作总量减少 ( 1+1<2 )?如果一体化后把工作量压到一个人身上,那意义不大,需要使一体化下的总工作量降低。

4 如何促进生产关系重塑? 生产关系需要适应新的生产力。

面向这些问题,闲鱼的解法思路:

1 业务闭环为业务开发同学带来更好的成长空间,可以完整和专注的思考业务。这是人上的核心动力。

2 业务闭环是业务流程沉淀的方向

3 以往的架构是云、端分开架构的,一体化后有了更多的架构下沉空间,从而带来了总工作量 1+1<2 的可能

4 领域下沉和工具支撑是一体化的保证


案例效果

案例一:一体化在资源均衡方面的体现。在近期的一个项目中,云端一体化使原本 2 个月的项目时间,减少了 20 天。

案例二:一体化在业务闭环方面的体现。负责增长的一位开发同学,专注在增长业务上,在合适的情况下为合适的人投放合适的内容,以此带来用户的增长和活跃效果。一体化的方式下,可以统一云、端的切面,业务研发不再受云、端的限制。

说在最后

一体化是建设高效研发框架的方向,并不是所有场景都需要一体化的开发,但一体化的 Flutter、FaaS 等技术组件,可以独立使用,也会带来效率提升,并且与原有的开发模式兼容。从一体化的思路去建设,可以使整体架构体系更加一致,也有机会做一体的架构沉淀。未来闲鱼希望在一体化上做更多尝试和深入探索,包括一体化工具、一体化业务平台、数据化智能化等方向。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,699评论 6 513
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,124评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,127评论 0 358
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,342评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,356评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,057评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,654评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,572评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,095评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,205评论 3 339
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,343评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,015评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,704评论 3 332
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,196评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,320评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,690评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,348评论 2 358

推荐阅读更多精彩内容

  • 其实最怕画人物,不过友友为了鼓励我不断进步,订了一幅侠客的画,督促我不断练习,也能从每幅画中看到自己的进步。 这才...
    文朴阅读 1,518评论 14 21
  • 2019年2月11日,星期一,阴转小雨今天许多单位都开假了,实验室里许多人已经开始了新一年的耕耘。今早,小舅子突然...
    医博云天阅读 456评论 0 1
  • 今天和大家分享的小课堂主题是如何提升用户黏性 分为5个部分, 首先我们来看 1.什么是用户黏性? (1)定义: 什...
    阿妮不是欧尼阅读 28,682评论 0 6
  • 先从getResponseWithInterceptorChain方法看起 RetryAndFollowUpInt...
    JustinLW阅读 615评论 0 0
  • 对象到其他类型之间的数据转换 对象到boolean 非空对象 是true 空对象(是null,不是{}) fal...
    清枫_小天阅读 416评论 0 1