Flutter+FaaS一体化任务编排的思考与设计

作者:闲鱼技术-古风

Flutter+Serverless三端一体研发架构,客户端不仅仅是编写双端的代码,而是扩展了客户端的工作边界,形成完整的业务闭环。在新的研发模式落地与实践的过程中,一直在思考如何提高FaaS端研发体验与研发质量,以下是落地过程中遇到的问题。

  • 如何提高FaaS研发体验?
    FaaS层通常是直接在主干中逐块增加业务代码,这种写法领域数据间的依赖并不清晰,后续维护时需要针对领域数据进行更换、顺序调整或者由串行改并行时需要增加很多工作。
  • 如何提高FaaS侧研发质量?
    客户端同学编写FaaS代码时,需要针对服务端各种异常增加保护性代码与降级策略,比较容易出现遗漏从而导致整体质量下降。

任务编排是什么?

回顾一个完整的业务闭环,包括中台、领域层、业务层与渲染层。云端一体场景下FaaS侧更多的工作集中在业务层与渲染层,进行数据聚合、裁剪、字段映射和结构调整。

以下单业务为例,FaaS层通过6次HSF(RPC框架)调用获取领取数据组装而成。商品信息、收货地址与闲鱼币可以并行执行,红包、运费与验货担保可以并行执行,由于依赖商品信息与收货地址,两组任务需要串行执行。

上图中可以把每一个节点(例如:获取商品信息)抽象为任务,通过代码实现此流程就是任务编排。

任务编排如何提升开发体验?

FaaS层通常是直接在主干中逐块增加业务代码,遇到复杂场景时主干代码可能百行甚至千行,以下是通过任务编排框架编写的下单页功能代码。

  1. 通过Map类型的数据作为入参,其中多个任务都可能使用到这些参数。
  2. 使用then与thenAll两个API进行任务编排,then函数表示传入的函数串行执行,thenAll传入的函数需要并行执行。
  3. 调用apply进行任务链路的执行。
  4. 通过链式调用,整体结构非常清晰,框架的侵入性低。

可以看到以上代码入参、任务编排与获取结果,结构非常清晰。从代码上就能看出任务数量、任务流程、任务的串行与并行。通过简洁、少侵入性与链式调用极大提升开发体验。

requestItemDO函数是获取领域数据常见流程,首先是获取参数userId与itemId,通过HSF获取商品信息,拿到结果之后判断此次请求是否有效,如果有效返回具体Model数据。

任务编排的应用场景

任务类型

任务编排并不局限于HSF任务,由于框架仅要求传入的是一个函数,通过函数进行抽象,可以支持任意类型的任务编排,例如:HSF、MetaQ、Tair、DB等。

任务编排形式

下单页的例子是串行&并行共存的场景,任务编排框架支持任意数量串行、并行、复杂场景任务编排。开发同学只需要开发任务函数,然后根据任务需要串行还是并行,调用具体API接口,不用关心同步与异步的各种操作细节。

异步任务

FaaS侧的代码通常都是IO密集型的任务,例如PRC调用、数据库读写等。Dart基于事件队列(Event Queue)支持异步,其优点是可以同时等待多个IO事件,并不会阻塞主线程,从而降低总体RT(Response-time 响应时间)。Dart 异步机制耗时如下图:

任务复用与沉淀畅想

针对FaaaS侧把单个数据的获取与处理抽象为Task,随着Task沉淀的越来越多,通过多个任务的组装会出现业务解决方案层,很多场景下都需要安全校验,例如:判断用户是否禁言、商品是否违规等,这些通用的规则也可以在其他也场景中复用,例如安全校验规则可以在群聊功能中复用。
三端一体研发架构场景下,从数据的获取、组装到前端的UI可以一个开发者完成,整个链路可以如右图进行一体化的组件沉淀,一个组件包含领域数据、转换为ViewModel、客户端视图组件组成,从而形成云端一体的组件复用,提升整体开发效率。

任务编排如何提高研发质量

客户端写FaaS层代码,需要学习服务端QPS(Query Per Second每秒查询次数)、RT(Reaction Time 响应时间)、TPS(Transactions Per Second每秒事务处理量)、限流保护、降级保护与热点保护等,其中最担心的还是如何保证部署到Serverless平台上FaaS层代码的稳定性,如何才能提高质量不出现问题与故障。可以通过异常分类、如何捕获异常与异常处理三个角度来分析质量问题。

异常分类

首先总结下服务端常见异常类型:

  • 代码异常:空指针异常、数组越界等Exception
  • 系统异常:机器异常、内存溢出、线程池占满、DB异常等
  • 接口异常:接口响应超时、下游依赖异常

异常捕获

无论FaaS层出现哪种异常,不能因为异常而导致用户长时间无法正常使用功能,需要考虑异常捕获,并设计整体的降级、监控与告警方案。通常服务端开发都是通过在可能出现问题的场景添加try catch,这样代码写起来不够简洁,开发同学更期望看到像上文中queryItemDO函数一样,只编写业务功能代码,至于捕获、通用监控与告警,由任务编排框架进行统一的兜底处理。

任务编排框架把捕获的异常信息通过两种方式传递给开发同学,一种是针对单个任务的onError,一种是针对整个链路的catchError,通过这两种方式可以优雅的获取异常堆栈并进行灵活的异常处理。

通过针对调用链路设置整体超时时间,避免因任务的等待超时而导致整个接口出现超时的情况。

异常&监控

Sunfire是服务端监控平台,拥有一整套海量数据实时分析监控系统,提供系统、应用、业务等各种视角的监控能力,如果触发配置的规则会发送预警。任务编排框架把捕获的异常与当前FaaS名称等信息统一输出到日志中,在Sunfire平台配置通用的规则进行异常监控。

总结与展望

任务编排框架Jade可以解决本篇提出的两个问题:

  • 提升研发体验:开发者通过链式调用形式进行任务编排,支持任意类型任务,所有任务都可以灵活的组合,可以任意调整任务的执行顺序。
  • 提升研发质量:任务编排框架增加异常类型梳理、异常捕获与异常监控机制。

对任务编排的框架的期望并不仅针对任意类型的任务灵活编排,后续在开发阶段通过源码输出技术文档与流程图,针对单任务与任务链路进行测试,通过任务编排框架作为抓手有效打通需求、开发、测试与运维阶段,从而达到提高开发效率提高安全性的目标。

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

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

相关文章

抖音实战~实现App端视频上传、发布、落库

文章目录一、API阅读1. 选择或拍摄视频2. 云函数API~文件上传3. 视频截帧二、App端视频上传流程2.1. 上传流程图2.2. 流程简述三、前端源码实战3.1. 选择/拍摄短视频3.2. 短视频上传3.3. 进度条页面3.4. 补充短视频内容3.5. 视频发布3.6. 视频预览四、后端源码实战4.1. 短视频发…

从微服务到 Serverless | 开源只是开始,终态远没有到来

开源只是开始,终态远没有到来。 从微服务开源,到 Serverless 开源,我们正持续将阿里沉淀的技术能力进行开放。 只是这一次不同的地方在于,借助 Serverless 能力的释放,将帮助前端进入一个崭新的时代,只需…

从Python到AI,这条路好走吗?

大家都在学Python的时候,怎么才能让自己更有竞争力?Python 的应用方向有很多,基本每个方向都是大热门,但至今为止,人工智能行业仍处于人才稀缺的情况。正因这样,近几年来,AI 成为了广大 Python …

Flutter瀑布流及通用列表解决方案

作者:闲鱼技术-夜澜 背景 目前闲鱼业务中无论是首页还是搜索页都有大量可以落地瀑布流的场景,而在Flutter原生中只提供了ListView, GridView,无法提供自定义布局的能力。 而在社区中,一般瀑布流的解决方案都是基于SliverMultiB…

闲鱼的商品结构化是如何演进的(超详细)

作者:闲鱼技术-吴白 引言 商品的信息结构化程度在某种意义上来说决定导购效率的天花板。闲鱼商品结构化和淘宝/天猫最大的区别在于闲鱼卖家都是个人用户,无论是专业程度还是行动力远不及淘宝卖家。为了不阻碍商品发布,闲鱼一直倡导轻发布&a…

一文看懂5G射频的“黑科技”

作者 | 小枣君来源 | 鲜枣课堂(ID:xzclasscom)手机,作为移动互联网时代的标配,已经走进了我们每个人的生活。有了它,我们可以随心所欲地聊天、购物、追剧,享受美好的人生。正因为手机如此重要&a…

抖音实战~首页视频~下拉刷新

文章目录1. 配置下拉刷新2. 下拉刷新监听3. tab监听索引4. 控制台监控5. 父子组件调用6. 效果图1. 配置下拉刷新 在pages.json配置文件中添加如下配置: "enablePullDownRefresh":true //开启下拉刷新2. 下拉刷新监听 // 当前页下拉刷新onPullDownRefre…

支付宝研究员王益的建议:“学好语文,才能写好代码”

王益,蚂蚁集团研究员,开源项目SQLFlow 和 ElasticDL 的负责人。他从10岁开始写代码。曾经用自己焊接的电路板扩展“中华学习机”来把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机;用Apple BASIC语言和6502汇编混合编程写了人生中第一个…

抖音实战~搜索页面~视频详情

文章目录一、前端部分1. 检索关键词短视频列表2. 选中某一个短视频3. 短视频详情二、后端部分2.1. 短视频入口2.2. 短视频接口层2.3. 短视频服务层2.4. 持久层-接口2.5. 持久层- xml三、效果图鉴赏3.1. 搜索页面3.2. 短视频列表3.3. 短视频详情一、前端部分 1. 检索关键词短视…

技术人的灵魂 3 问,阿里工程师如何解答?

作者 | 氐宿 阿里云高级前端技术专家 导读:在业务团队做事的工程师摸爬滚打了一段时间后,一定会有所疑问。团队同学在最初的一段时间都提出这样的疑惑:如何在业务中发现有技术价值的问题?发现问题后如何思考和发起再到解决&…

10+知识图谱开放下载,让你的学习效率提升5倍! | “右脑”开发套餐

简介: 为了让广大开发者清晰了解技术体系,打造属于自己的系统学习路径。今天,开发者社区整理了10知识图谱,供大家交流学习,持续更新中~ 知识的学习从来就不是孤立的,学习任何知识(概念、定义、…

抖音实战~分享模块~短视频下载(保存到相册)

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uni-popup 弹出层2.3. 插件涉及组件2.4. 组件改造2.5. 关键的api三、作品鉴赏3.1. 自己发布视频3.2. 其他人发布视频3.3. 保存短视频一、可见范围 保存到相册、复制链接、…

HDC.Cloud 2021剧透:六大创新产品、开发者年度盛宴即将开启

编辑 | 宋慧 出品 | CSDN云计算 头图来源 | HDC.Cloud官网 今日,华为开发者大会2021(Cloud)(简称HDC.Cloud 2021)媒体预沟通会在京召开,华为技术有限公司高级副总裁、云与计算BG副总裁张顺茂在会上表示&am…

抖音实战~分享模块~复制短视频链接

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uni-popup 弹出层2.3. 插件涉及组件2.4. 组件改造2.5. 关键的api三、作品鉴赏3.1. 自己发布视频3.2. 复制链接一、可见范围 保存到相册、复制链接、二维码 都是前端完成的…

莉莉丝《剑与远征》:基于阿里云全站加速提升用户体验

公司介绍 莉莉丝游戏致力为全球玩家创造好玩的游戏,坚持“全球化”与“品类进化”核心战略,通过对全球市场与品类发展阶段的深度理解,将国产手游带向了世界,代表作:《小冰冰传奇》,《万国觉醒》&#xff0c…

亚马逊云科技首次发布“三驾马车”中国业务战略

2021年3月25日,亚马逊云科技今天在北京举行媒体沟通会,首次正式发布“三驾马车,齐头并进”的中国业务战略。通过亚马逊云科技独一无二的全球优势,发挥亚马逊全球业务体系的强大支撑,并利用亚马逊的创新文化和方略&…

KubeCon 2020 阿里云推出四大企业级容器新品 ,详解云原生操作系统进化

导读:云原生操作系统进化,详解阿里云 ACK Pro、ASM、ACR EE、ACKEdge 等四款企业级容器新品。 KubeCon 2020 中国站,阿里云容器服务负责人易立会在《云原生,数字经济技术创新基石》的演讲中,分享阿里云原生如何助力数字…

抖音实战~分享模块~生成短视频二维码

文章目录一、可见范围1. 自己发布短视频2. 其他人发布短视频二、源码分析2.1. 底部窗口popup2.2. 实现组件uQRCode2.3. 插件涉及组件2.4. 组件改造2.5. 实现原理三、作品鉴赏3.1. 生成短视频二维码3.2. 微信扫描3.3. 抖音扫描一、可见范围 保存到相册、复制链接、二维码 都是前…

轻松处理高于平常10倍的视频需求,还能节省60%的IT成本,蓝墨做对了什么?

近年来,Serverless 一直在高速发展,并呈现出越来越大的影响力。主流的云服务商也在不断地丰富云产品体系,提供更好的开发工具,更高效的应用交付流水线,更好的可观测性,更细腻的产品间集成,但一切…

PassMark 更新排行,苹果 M1 杀疯了

整理 | 寇雪芹出品 | CSDN云计算(ID:CSDNcloud)3月24 日,PassMark 网站更新了单核性能排行榜,苹果 M1 3.2GHz 首次上榜就直逼榜首。苹果 M1 杀疯了以数千个 PerformanceTest 基准测试结果为数据基础,PassMa…