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

闲鱼将使用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部分),但前后一体化的组件该怎么抽象,又如何组合复用,我们还在探索中。

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


原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/516999.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习在高德用户反馈信息处理中的实践

1.背景 作为国内领先的出行大数据公司,高德地图拥有众多的用户和合作厂商,这为高德带来了海量的出行数据,同时通过各个渠道,这些用户也在主动地为我们提供大量的反馈信息,这些信息是需要我们深入挖掘并作用于产品的&a…

div中同时存在文本和数字超过两行出省略号

div中同时存在文本和数字超过两行出省略号 设置文本超过两行出省略号出现下面问题,未到指定宽度就换行 width: 255px;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 2;word-wrap: break-word…

前端框架/工具汇总

文章目录一、数据框架1. vue2. react二、UI框架2.1. element2.2. element-plus2.3. Ant Design Vue2.4. Ant Design of React2.5. Bootstrap三、工具3.1. Fast Mock3.2. Easy Mock3.3. Mock语法/案例一、数据框架 1. vue https://cn.vuejs.org/ 2. react https://react.do…

没错!现在搞 Python 越来越难了!!

今天,想跟大家聊聊 Python 能力的提升。结合我最近这些年的Python学习、开发经验,发现 90% 的人在学Python时都会遇到下面这些问题:1.想学Python,但应用方向太多了,没编程经验根本不知道该怎么学...2.基础入门看似简单…

端计算Walle:2235亿次运算,为了无法计算的端智能价值

本文知识点提炼: 1、端计算在移动设备上的应用探索 2、技术方案与核心模块设计 3、总结与展望 背景 传统的云计算,使用的是端侧采集数据,云端处理消费,再反馈给端侧的模式。而伴随着数字化转型的浪潮、万物互联时代的到来&…

Serverless 解惑——函数计算如何访问 MySQL 数据库

函数计算(Function Compute):函数计算 是事件驱动的全托管计算服务。使用函数计算,您无需采购与管理服务器等基础设施,只需编写并上传代码。函数计算为您准备好计算资源,弹性地可靠地运行任务,并…

ant-design-vue 环境搭建及入门

1.首先需搭建vue环境 2.安装环境(根据官网) npm install -g vue/cli (建议国内不使用npm安装,使用cnpm这样会快点)cnpm install -g vue/cli 3.新建一个项目 切换到需要创建项目文件夹下,运行创建项目命令…

小程序 json 解析

它传来的值是这样的 {"resultcode":"200","reason":"SUCCESSED!","result":[{"1":{"variety":"Au100g","latestpri":"268.50","openpri":"269.02"…

摊牌了:我就靠这几点,搞定了算法面试官

很多时候,你即使提前复习了这些最常见的面试算法题,你依旧无法通过算法面试!为什么?1. 你在提前准备复习的时候,在网上找了半天相应题目的分析文章,但你看了就是不懂。2. 你在面试的时候,卡壳了…

从零开始入门 K8s | 调度器的调度流程和算法介绍

导读:Kubernetes 作为当下最流行的容器自动化运维平台,以声明式实现了灵活的容器编排,本文以 v1.16 版本为基础详细介绍了 K8s 的基本调度框架、流程,以及主要的过滤器、Score 算法实现等,并介绍了两种方式用于实现自定…

vue-resource安装

进入项目cd到项目所在目录 运行命令 我们一般用第二种方式运行 1).npm install vue-resource 2).这种方式会将数据写入package.json这样将项目发送给其他用户时项目会有问题 cnpm install vue-resource --save 3.main.js导入vue-resource

2019年全球最受欢迎数据库新鲜出炉,你猜中了吗?

全球知名的数据库流行度排行榜网站DB-Engines 宣布,在过去的一年里,MySQL在 DB-Engines排名中比其他350个受监测数据库管理系统的任何一个更受欢迎。 因此,MySQL为2019年的年度DBMS。 DB-Engines 2019: MySQL 获得“年度数据库”称…

IT 实力较量:决战超级数据中心之巅

作者 | 马超责编 | 伍杏玲出品 | CSDN(ID:CSDNnews)今年的新冠疫情让不少人认识到云计算的战略意义:今年5月,IBM 新 CEO 克里希纳在上任伊始就表示,IBM将专注于AI和混合云,将它们视为未来的关键技术。谷歌云…

自建Hive数据仓库跨版本迁移到阿里云E-MapReduce

最佳实践概述 应用场景 客户在IDC或者公有云环境自建Hadoop集群,数据集中保存在HDFS文件系统,同时借助Hive进行常见的ETL任务。客户在决策上云之后,会将自建Hadoop集群的数据迁移到阿里云自建Hadoop或者EMR。 技术架构 本实践方案基于如下…

fastjson 序列化时指定json的key值

json字符串中的key是下划线例如:foot_dist,而实际实体类中的属性是footDist,添加 JSONField(name "foot_dist")即可 package com.gblfy;import com.alibaba.fastjson.annotation.JSONField; import lombok.AllArgsConstructor; i…

vue搭建脚手架

1.必须安装node.js 打开dos窗口 查看安装版本 运行命令 node -v npm -v 2.搭建vue的开发环境,安装vue的脚手架 npm install --global vue-cli 或 cnpm install --global vue-cli 注释: 1)用npm安装(国际开源库生态系统&#xff09…

秒级启动万个容器,探秘阿里云容器镜像加速黑科技

阿里云容器与存储团队展开合作,利用DADI加速器支持镜像按需读取和P2P分发,实现3.01秒启动10000个容器,完美杜绝容器冷启动的数分钟漫长等待,以及镜像仓库大规模并行分发场景下的网络拥堵。 年关将至,各种年货节、秒杀…

官宣丨中国移动云能力中心新增5项可信云认证,斩获2项大奖!

近日,由中国信息通信研究院、中国通信标准化协会联合主办的“2020可信云大会”圆满落幕。 围绕“数字新基建可信新生态”话题,会上探讨了新基建与云计算的发展未来,披露了2020年可信云上半年最新评估结果,并揭晓了2020年可信云多项…

跟我学-域名解析故障排查技巧

天苍苍,野茫茫,网站一瘫,唯有泪两行!! 客户跳,老板叫,解析故障,心惊又肉跳!! 对企业网站来说,很怕出现网站打不开的情况,一旦发生&…

axios安装使用

1.进入项目运行命令,原因同v-resource安装 cnpm install axios --save 2.在需要使用时引入 如: 使用按照gitubs上提供的示例做就可以了