update README.md.

This commit is contained in:
tianyaleixiaowu 2020-02-10 11:02:34 +08:00 committed by Gitee
parent 4d31f20757
commit 17879cbccc

View File

@ -1,21 +1,33 @@
# 并框架说明 # 并框架说明
有问题可以给作者发邮件说明或者有特定的场景需求感谢您的意见。wuweifeng10@jd.com 有问题可以给作者发邮件说明或者有特定的场景需求感谢您的意见。wuweifeng10@jd.com
有对区块链感兴趣的,可以参考作者另一个[GVP项目](https://gitee.com/tianyalei/md_blockchain)java区块链底层入门 该框架目前正在 **京东App后台** 接受苛刻、高并发、海量用户等复杂场景业务的检验测试随时会根据实际情况发布更新和bugFix。
有对区块链感兴趣的,可以参考作者另一个[GVP项目](https://gitee.com/tianyalei/md_blockchain)java区块链底层入门。
如果只是需要用这个框架请往下看即可。如果需要深入了解这个框架是如何一步一步实现的从接到需求到每一步的思考每个类为什么这么设计为什么有这些方法也就是如何从0到1开发出这个框架我在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发包括并不限于这个小框架。京东内部同事可在cf上搜索我erp也能看到。 如果只是需要用这个框架请往下看即可。如果需要深入了解这个框架是如何一步一步实现的从接到需求到每一步的思考每个类为什么这么设计为什么有这些方法也就是如何从0到1开发出这个框架我在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发包括并不限于这个小框架。京东内部同事可在cf上搜索我erp也能看到。
#### 待办事项 #### 并行常见的场景
最近不少同学反馈希望支持基于文件配置的动态任务编排,考虑了一下,需要额外加个插件功能,目前功能倒无需变动。但文件的格式,如何才能准确地表达先后顺序、并行顺序、依赖关系,比较复杂,有相关需求和兴趣的可以研究一下。 1 客户端请求服务端接口该接口需要调用其他N个微服务的接口
#### 并发常见的场景 譬如 请求我的订单那么就需要去调用用户的rpc、商品详情的rpc、库存rpc、优惠券等等好多个服务。同时这些服务还有相互依赖关系譬如必须先拿到用户的某个字段后再去某rpc服务请求数据。 最终全部获取完毕后,或超时了,就汇总结果,返回给客户端。
1 客户端请求服务端接口该接口需要调用其他N个微服务的接口。譬如 请求我的订单那么就需要去调用用户的rpc、商品详情的rpc、库存rpc、优惠券等等好多个服务。同时这些服务还有相互依赖关系譬如必须先拿到用户的某个字段后再去某rpc服务请求数据。 最终全部获取完毕后,或超时了,就汇总结果,返回给客户端。
2 工作流式的很多个任务 2 并行执行N个任务后续根据这1-N个任务的执行结果来决定是否继续执行下一个任务
3 爬虫之类的,有前后依赖关系 如用户可以通过邮箱、手机号、用户名登录,登录接口只有一个,那么当用户发起登录请求后,我们需要并行根据邮箱、手机号、用户名来同时查数据库,只要有一个成功了,都算成功,就可以继续执行下一步。而不是先试邮箱能否成功、再试手机号……
#### 并发场景可能存在的需求之——任意编排
再如某个接口有5个前置任务需要处理。其中有3个是必须要执行完毕才能执行后续的另外2个是无所谓的只要这3个执行完就可以进行下一步到时另外2个如果成功了就有值如果还没执行完就是默认值。
3 需要进行线程隔离的多批次任务
如多组任务, 各组任务之间彼此不相关每组都需要一个独立的线程池每组都是独立的一套执行单元的组合。有点类似于hystrix的线程池隔离策略。
4 单机工作流任务编排
5 爬虫相关,有前后依赖关系
#### 并行场景之核心——任意编排
1 多个执行单元的串行请求 1 多个执行单元的串行请求
![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/092905_55771221_303698.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/092905_55771221_303698.png "屏幕截图.png")
@ -40,14 +52,14 @@
![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/093023_357a2912_303698.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/093023_357a2912_303698.png "屏幕截图.png")
#### 并场景可能存在的需求之——每个执行结果的回调 #### 并场景可能存在的需求之——每个执行结果的回调
传统的Future、CompleteableFuture一定程度上可以完成任务编排并可以把结果传递到下一个任务。如CompletableFuture有then方法但是却无法做到对每一个执行单元的回调。譬如A执行完毕成功了后面是B我希望A在执行完后就有个回调结果方便我监控当前的执行状况或者打个日志什么的。失败了我也可以记录个异常信息什么的。 传统的Future、CompleteableFuture一定程度上可以完成任务编排并可以把结果传递到下一个任务。如CompletableFuture有then方法但是却无法做到对每一个执行单元的回调。譬如A执行完毕成功了后面是B我希望A在执行完后就有个回调结果方便我监控当前的执行状况或者打个日志什么的。失败了我也可以记录个异常信息什么的。
此时,传统的就无能为力了。 此时,传统的就无能为力了。
我的框架提供了这样的回调功能。并且,如果执行失败、超时,可以在定义这个执行单元时就设定默认值。 我的框架提供了这样的回调功能。并且,如果执行失败、超时,可以在定义这个执行单元时就设定默认值。
#### 并场景可能存在的需求之——执行顺序的强依赖和弱依赖 #### 并场景可能存在的需求之——执行顺序的强依赖和弱依赖
如上图的3A和B并发执行最后是C。 如上图的3A和B并发执行最后是C。
有些场景下我们希望A和B都执行完毕后才能执行CCompletableFuture里有个allOf(futures...).then()方法可以做到。 有些场景下我们希望A和B都执行完毕后才能执行CCompletableFuture里有个allOf(futures...).then()方法可以做到。
@ -73,7 +85,7 @@
创建线程量少。![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/093227_9633e2a8_303698.png "屏幕截图.png") 创建线程量少。![输入图片说明](https://images.gitee.com/uploads/images/2019/1226/093227_9633e2a8_303698.png "屏幕截图.png")
如这样的A会运行在B、C执行更慢的那个单元的线程上而不会额外创建线程。 如这样的A会运行在B、C执行更慢的那个单元的线程上而不会额外创建线程。
#### async-Tool介绍 #### asyncTool介绍
解决任意的多线程并行、串行、阻塞、依赖、回调的并发框架,可以任意组合各线程的执行顺序,还带全链路回调和超时控制。 解决任意的多线程并行、串行、阻塞、依赖、回调的并发框架,可以任意组合各线程的执行顺序,还带全链路回调和超时控制。
其中的A、B、C分别是一个最小执行单元worker可以是一段耗时代码、一次Rpc调用等不局限于你做什么。 其中的A、B、C分别是一个最小执行单元worker可以是一段耗时代码、一次Rpc调用等不局限于你做什么。