基于Flutter+FaaS的业务框架思考与实践

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 作为一个过来人,我给大家的建议是...

作者:闲鱼技术-匠修

闲鱼将使用Flutter和FaaS来建设未来的技术开发体系,这是一项长期的规划,新的技术在现在看来犹如雾里看花,需要我们不断的思考,探索,实践才能渐渐描绘出它的轮廓。本文对此提供一种思考角度,对未来基于FaaS+Flutter之上的编程形态做思考,并介绍自己的初步实践。

Flutter, FaaS, 与闲鱼的一体化

闲鱼长期在做技术一体化的探索与实践:我们希望使用一门语言,一套技术栈,能让开发工程师在任何场景完成业务开发,实现开发模式和技术栈的统一。这是对开发效率的极致追求,也是对开发人员的深度赋能,更好的释放人员价值,驱动业务成长。

闲鱼已经借助Flutter良好的跨栈能力来对App上的技术栈做统一,并取得了初步的成果。因此想更近一步的整合前后端,结合Flutter来建立统一的技术栈。FaaS的兴起给我们带来了新的视角和机会,在后端开发场景中,FaaS将运行环境和部署运维从日常开发中剥离出来,让开发者更聚焦于业务,降低了后端开发准入门槛,闲鱼基于此已经在做Flutter+FaaS的一体化开发体系建设。

技术在发展中会对当前的解决方案不断的抽象,总结和提炼,逐渐分离出其中的变化的部分与不变的部分,让原来的问题变得收敛,开发的关注点会变的更聚焦,开发效率得以提升。这样会出现分层,进而沉淀出基础设施,这也是技术体系演进的一般规律,如图 1-1。

图 1-1

Flutter+FaaS的技术方案也是如此,我们在当前的中台的基础设施之上建设用于一体化开发的新的基础设施层,让业务开发更加聚焦。由此需要思考两个基本的问题:

  • Flutter+FaaS的技术体系作为支撑一体化开发的基础设施该提供什么样的能力?
  • 基于新的一体化基础设施的业务开发是什么样的形态?

图 2-1

这是一体两面的两个问题,只要回答其中一个问题,另一个问题的答案也会变得清晰起来。本文是思考和探索第二个问题。

Flutter+FaaS一体化技术体系下的开发形态思考

也许只有到了最后一刻我们才能最终回答这个问题,但是技术总是带着疑问前行,我们先从尝试做顶层做抽象定义开始,然后落地实践,在实践后总结提炼,完善顶层抽象,迭代往复,最终将概念变清晰。

先来看看当前的业务开发形态,如图 2-1,当前在业务开发中几个主要的关注点我大概的归纳为:数据处理,网络通信,状态管理和界面绘制。从这4个点出发,逐一思考,在新的一体化的场景下会有什么变化:

图 2-1

  • 数据处理:泛指传统的服务端REST API这部分,在一体化的场景下,这部分会由FaaS函数来实现,其实这一部分的职责和定位并没有改变,只是开发的组织沟通形式变了。传统开发页面会由服务端和客户端同学合力完成,后面可能由一位同学前后一体化开发完成。康威定律指出,软件的设计和开发人员的组织沟通结构是息息相关的,所以这一部分可能有较大的变化,但首先是他与客户端的交互方式上的变化,即网络通信。
  • 网络通信:在一体化场景下,前后端都由一人实现,代码也会是一个工程中的同种语言,网络通信会加轻量安全,使用起来也会更加自然,接近于普通的函数调用。一个可能的变化是,通信模式可能会突破CS模式,在一次通信“会话”中,Client端和Server端能更加自然的相互调用,实现“对等对话”,而不是传统的客户端请求,服务端响应。随着网络硬件升级,网速在变快,通信成本在下降,创新的空间很大。
  • 状态管理:应用状态很大程度上是缓存在客户端上的数据,受技术体系隔离,开发沟通成本,网络通信成本的影响,在客户端上缓存状态是有必要的。但在一体化的场景中,这些因素的影响在减小和消失,所以我们想进一步的消灭状态,将状态管理将至最小,尽可能的由底层管理。
  • 界面绘制:也许是受Flutter的影响,响应式风格结合数据驱动的UI理念非常契合我们的思路,这也是业界UI开发框架的潮流。

Flutter+FaaS一体化技术体系下,应用开发应该会更加简单,前后端之间的差异变小,通信更加轻量自然,职责更加聚焦,如图 2-2。

图 2-2

一体化框架设计实践

在一体化的场景下,业务可以由一个同学负责前后端的开发,最大限度的减小沟通协作成本。当然,大体量的业务必然需要协作的,但协作的方式有所改变,工作的划分可以由传统的前后端的横向划分,变成前后一体的垂直划分,如图 3-1,协作方式的改变也会影响到我们设计的思路。

图 3-1

基于前面的讨论,我们尝试做了框架设计:首先我们将要开发的业务命名为一个Story,即一个Story代表一个产品业务,Story会按照上面垂直划分的方式,将业务划分为一系列的Scene。Scene对应于传统意义上的"页面"的概念,但和产品设计上的页面不强求一一对应,如图 3-2-(1)。Scene是个前后一体的虚拟概念,运行时并没有实体。它由3部分组成,如图 3-2-(2), Model部分处理业务数据(RawData),Converter将业务数据转换成渲染所使用的数据(State), 最后Render使用渲染数据绘制界面。Model和Converter部署在后端,在FaaS函数中运行,Render运行在客户端,他们之间的数据流是单向的。在实现逻辑处理的时候,统一使用事件,事件优先在本端处理,本端不处理则路由到另一端,如果另一端也不处理,则丢弃,如图 3-2-(3)。

图 3-2

Story已经开始在闲鱼的业务中落地实践,后期带来实践效果的分享。

实践中的挑战和借鉴

要建设完善一体化技术体系不是容易的事情,实践中肯定会有诸多挑战。好消息是FaaS和它背后的Serverless理念已经是业内潮流了,实践也在如火如荼的进行中。其中,阿里的前端同学集中力量,对Serverless已经实践的很深入了,虽然并不是一体化的理念,但实践上很多的思路可以做相互印证和借鉴:

  • 开发部署工具链:闲鱼一体化工程依赖于底层开发部署工具链的支持,是基础设施的一部分,部署也是Serverless体系中关键一环,从前端同学的实践中看,工具,插件和平台都有。闲鱼有直接使用的平台,也会有自建的工具插件,长远会做一步的体系标准化建设。
  • 全链路追踪监控:这是工程化必须的系统,闲鱼直接受益于集团的平台,但也会建设自己特殊场景的工具,比如借鉴Flutter的函数热更新,本地一体化调试等。

当然,闲鱼也有自己感兴趣探索的方向:

  • 网络通信:我们的很多设想对网络通信有着很高的要求,诚然,网络质量会越来越好,成本也会也来越低,但弱网场景总会存在,如何保证服务的稳定可用依然是挑战。一体化会弱化开发对网络的感知,提供新的网络使用方式。
  • 组件分治:在闲鱼的业务中,复杂页面是始终要考虑的问题。在前面的设计中,我们对此做了预留(Converter部分),但前后一体化的组件该怎么抽象,又如何组合复用,我们还在探索中。

最后,我们诚挚的邀请优秀的你加入闲鱼,和闲鱼一起,因为相信而看见,见证不一样的未来!

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
相关文章
|
4天前
|
消息中间件 人工智能 Kubernetes
解密开源Serverless容器框架:事件驱动篇
Knative是一款基于Kubernetes的开源Serverless框架,提供了云原生、跨平台的Serverless编排标准。作为Serverless中必不可少的事件驱动能力,Knative Eventing提供了云原生的事件驱动能力。
|
27天前
|
开发框架 前端开发 定位技术
Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证
本文深入探讨了Flutter框架中的插件市场及开源资源的利用方法。内容涵盖插件市场的扩展功能、时间节省与质量保证,常见插件市场的介绍,选择合适插件的策略,以及开源资源的利用价值与注意事项。通过案例分析和对社区影响的讨论,展示了这些资源如何促进开发效率和技术进步,并展望了未来的发展趋势。
36 11
|
26天前
|
开发框架 数据安全/隐私保护 开发者
Flutter 是一款强大的跨平台移动应用开发框架,本文深入探讨了其布局与样式设计
Flutter 是一款强大的跨平台移动应用开发框架,本文深入探讨了其布局与样式设计,涵盖布局基础、常用组件、样式设计、实战应用、响应式布局及性能优化等方面,助力开发者打造精美用户界面。
41 7
|
26天前
|
开发框架 Dart 前端开发
Flutter 是谷歌推出的一款高效跨平台移动应用开发框架,使用 Dart 语言,具备快速开发、跨平台支持、高性能、热重载及美观界面等特点。
Flutter 是谷歌推出的一款高效跨平台移动应用开发框架,使用 Dart 语言,具备快速开发、跨平台支持、高性能、热重载及美观界面等特点。本文从 Flutter 简介、特点、开发环境搭建、应用架构、组件详解、路由管理、状态管理、与原生代码交互、性能优化、应用发布与部署及未来趋势等方面,全面解析 Flutter 技术,助你掌握这一前沿开发工具。
56 8
|
26天前
|
缓存 前端开发 数据安全/隐私保护
Flutter 框架提供了丰富的机制和方法来优化键盘处理和输入框体验
在移动应用开发中,Flutter 框架提供了丰富的机制和方法来优化键盘处理和输入框体验。本文深入探讨了键盘的显示与隐藏、输入框的焦点管理、键盘类型的适配、输入框高度自适应、键盘遮挡问题处理及性能优化等关键技术,结合实例分析,旨在帮助开发者提升应用的用户体验。
42 6
|
1月前
|
设计模式 移动开发 开发框架
如何学习 Flutter 框架?
学习 Flutter 需要耐心和持续的努力,通过系统的学习、实践、交流和不断跟进最新技术,你将逐渐掌握 Flutter 框架,并能够开发出高质量的移动应用。
|
1月前
|
开发框架 移动开发 Dart
Flutter 框架的缺点
以上缺点并不意味着 Flutter 框架不优秀,只是在使用过程中需要开发者根据具体的项目需求和场景,充分考虑这些因素,并采取相应的措施来克服或缓解这些问题,以充分发挥 Flutter 的优势,开发出高质量的移动应用。
|
1月前
|
IDE 开发工具 Android开发
Flutter 框架的优点
综上所述,Flutter框架以其跨平台一致性、高性能表现、丰富的组件和插件生态、热重载等诸多优点,为移动应用开发带来了全新的体验和强大的开发能力,成为了越来越多开发者的首选框架。
|
25天前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
缓存 前端开发 JavaScript
前端serverless探索之组件单独部署时,利用rxjs实现业务状态与vue-react-angular等框架的响应式状态映射
本文深入探讨了如何将RxJS与Vue、React、Angular三大前端框架进行集成,通过抽象出辅助方法`useRx`和`pushPipe`,实现跨框架的状态管理。具体介绍了各框架的响应式机制,展示了如何将RxJS的Observable对象转化为框架的响应式数据,并通过示例代码演示了使用方法。此外,还讨论了全局状态源与WebComponent的部署优化,以及一些实践中的改进点。这些方法不仅简化了异步编程,还提升了代码的可读性和可维护性。