InfoQ Geekathon 大模型技术应用创新大赛 了解详情
写点什么

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

  • 2020-08-12
  • 本文字数:2400 字

    阅读完需:约 8 分钟

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 可以解决本篇提出的两个问题:


  • 提升研发体验:开发者通过链式调用形式进行任务编排,支持任意类型任务,所有任务都可以灵活的组合,可以任意调整任务的执行顺序。

  • 提升研发质量:任务编排框架增加异常类型梳理、异常捕获与异常监控机制。


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


本文转载自公众号闲鱼技术(ID:XYtech_Alibaba)。


原文链接


https://mp.weixin.qq.com/s/y-poJ5yX4t91b88PDW1o_Q


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-08-12 10:041793

评论

发布
暂无评论
发现更多内容

史上第二全的java文件操作和数据读写

诸葛小猿

文件读写 inputstream OutputStream PrintWriter BufferedReader

第 12 周作业

Mr.Monkey

架构师训练营 week 12 作业

Frank Zeng

JWT认证看这一篇就够了

架构师修行之路

程序员 架构

极客时间训练营-12周作业

潜默闻雨

架构师训练营第十二周-总结

坂田吴奇隆

极客大学架构师训练营

架构师训练营 week12

devfan

架构师训练营第十二周作业

坂田吴奇隆

极客大学架构师训练营

Go云原生应用实战系列(一)

田晓亮

云计算 微服务 云原生 Go 语言

架构师训练营第十二周作业

吴吴

深度解析OAuth 2.0授权!!

架构师修行之路

架构 高并发系统设计 OAuth 2.0

极客大学架构师训练营 0 期 week 12 学习笔记

chun1123

大数据 学习

第 0 期架构师训练营第 7 周作业 2 ----总结

fujin

week12 作业

雪涛公子

w-12

麻辣

极客大学架构师训练营

如何判断程序员的代码是否优美?

Garfield

代码质量 代码 代码优化 代码重构

week12 总结

雪涛公子

大数据简介&架构(一)

dony.zhang

大数据 hdfs hive YARN MAPRED

架构师训练营Week12学习总结

Frank Zeng

第十二周总结

Linuxer

架构师训练营第十二周总结

R20114

极客大学架构师训练营 0 期 week 12 作业

chun1123

大数据 hive

Flink从一致性检查点中恢复-14

小知识点

scala 大数据 flink

架构师训练营作业

qihuajun

mapReduce

纯纯

极客时间训练营-12周作业2

潜默闻雨

第 0 期架构师训练营第 7 周作业 1

fujin

大数据课程笔记

superman

逛过这个商城,摄像机竟然学会了独立思考

脑极体

第12周作业

Jaye

架构师训练营学习总结(大数据)

qihuajun

  • 扫码添加小助手
    领取最新资料包
Flutter+FaaS一体化任务编排的思考与设计_架构_古风_InfoQ精选文章