手写中间件之——并行框架(1 并行框架的应用场景和需求)

我们为什么会需要一个带任务顺序编排的并行框架

1 复杂的微服务系统间调用

经常会有这样的调用场景:app(或web前端)调用后台的一个接口,该接口接到该请求后,需要调用其他多个微服务来获取数据,最终汇总一个最终结果返回给用户。

譬如用户请求“我的订单”,后台在收到请求后,就需要去调用用户详情rpc、商品详情rpc、库存rpc、优惠券rpc等等很多个服务。有些服务是可以并行去请求的,但有些服务是依赖于某个服务的返回值的(如查库存、优惠券,就依赖于商品详情回复到达后才能去请求)。

2 工作流式的任务编排

譬如在数据清洗领域,经常会有这样的需求,从多个数据源分别拉取数据,做第一步清洗,之后等某一步完成、或某几步都完成、或至少某几步完成,进行下一步任务。整个流程有明显的依赖顺序,以及任意可能存在的阻塞、异常、超时等情况。

如何将整个流程进行编排并让其按照设定顺序执行,并能合理处理异常情况,是一个并行框架所要有的功能。

3 爬虫流程

同工作流编排类似。

所以一个并行框架拥有的功能简单来说,至少应具备下图的这种顺序编排能力。

这在多线程领域,要完成任意顺序编排的多个任务组合,还是有点难度的。不过有一些框架,本意可能并非是做任务编排,但也能完成上图的顺序编排,譬如disruptor,也可以做任意的任务顺序编排。

当然,如果你对jdk1.8里的completeableFuture非常熟悉,通过一大堆的组合包装,也能做到上图的编排,但是它可能称不

猜你喜欢

转载自blog.csdn.net/tianyaleixiaowu/article/details/103801495
今日推荐