前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Phoenix框架 从0到1设计业务并发框架 怎么组织设计一个框架

Phoenix框架 从0到1设计业务并发框架 怎么组织设计一个框架

作者头像
Meng小羽
修改于 2024-03-19 03:25:44
修改于 2024-03-19 03:25:44
1090
举报
文章被收录于专栏:Debug客栈Debug客栈

上篇文章主要讲了设计 Phoenix 框架前的遇到的问题和设计框架的思路 《 Phoenix 框架 从0到1设计业务并发框架 小米商城产品站革新之路》,本篇文章主要讲一下如何设计框架的。

不死鸟并发框架,是自动构建有向图按照深度进行构建并发组并进行并发调用结果的框架。

产品站业务静态接口与动态接口都需要调用大量的后台服务进行获取数据进行业务编排,而各个并发调用之间又相互存在依赖,采用并发组设计拆解依赖,同时并发控制调用,BO to DTO 采用统一的 Transfer 层进行设计,开发人员只需要关系定义每次调用事件的 Task 和 Transfer 代码逻辑的书写,直接返回业务数据。

分层设计
分层设计

名词解释

  • PhoenixFramework 不死鸟(凤凰)框架,此业务并发框架的名称;
  • Task 在业务并发中定义一次调用,可以是 HTTP、DUBBO 或者是 Redis 获取、MySQL 读库操作;
  • Transfer 在业务定义中是一个子业务模块的转换逻辑将 BO 数据转换为 DTO 数据;

Task 与 Trans 注解

怎么定义 Task

在框架设计之初,我们内部有两种方案,一种是继承抽象类实现的方式,Task 通过继承实现 PhoenixTask 类实现定义 Task,另外一种是采用注解的方式,将每个 Task 都定义成具有强约束的 Task ,并且把详细的描述信息在注解中定义,给开发人员一目了然的设计思路。

经过内部讨论,我们选择了 Java 优秀的语言特性,注解的方式声明定义 Task ,这样的定义使得代码简洁明了,也有利于通过 Spring Bean 收集工具来收集我们的定义。

代码语言:java
AI代码解释
复制
/**  
 * PhoenixTask 
 * 任务注解  
 *  
 * @author debuginn
 */
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.TYPE)  
public @interface PhoenixTask {  
    String taskName();                     // 任务名称  
    String[] beforeTaskName() default {};  // 前置任务  
    String[] filterPlatform() default {};  // 过滤渠道,黑名单  
    String[] taskBoName();                 // 任务生成的 BO 数据 用来校验冲突  
}

PhoenixTask 注解定义非常简单:

  • taskName用来标识任务名称,采用枚举,强制约束命名的唯一;
  • beforeTaskName前置任务,前面讲到每个任务都是一次事件,区分前置任务是需要在并发调用的时候等待结果的返回,之后用来作为此 Task 调用的前置参数;
  • filterPlatform 过滤渠道,也就是黑名单的功能,但请求渠道在 Task 中声明了黑名单,在并发执行的时候就自动屏蔽掉执行;
  • taskBoName任务转化为 BO 的数据,通过接口调用或者中间件获取数据,转化为 Transfer 层使用的数据,在框架层做数据参数校验;

怎么定义 Trans

Trans 是 Transfer 的简称,同样和 Task 设计一样,也是采用注解的方式定义:

代码语言:java
AI代码解释
复制
/**  
 * PhoenixTrans 
 * 业务编排注解  
 *  
 * @author debuginn 
 */
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.TYPE)  
public @interface PhoenixTrans {  
    String transName();             // 业务编排块名称  
    String apiName();               // 执行 使用并发 api  
    String[] tasks() default {};    // 依赖的 task 任务  
}

PhoenixTrans 注解定义同样非常简单:

  • transName用来标识业务编排块名称;
  • apiName 用来区分这个 Transfer 业务编排是隶属于哪个并发 API 所属的;
  • tasks就是定义依赖的 Task 任务有哪些,一个业务编排可能会利用 n 个 Task 返回的 BO 数据进行编排;

大家在这里可能会比较疑惑,为啥 Task 中没有定义 apiName 而是 Transfer 中定义的,是因为在设计中,为了便于后续 Task 可以被 n 个并发 API 共·用,这样在 Transfer 定义了 apiName,之后通过 tasks 定义依赖的 Task 就可以推断出这个 Task 目前是被哪一个并发 API 使用的。

怎么收集 Task 和 Trans

自定义了 PhoenixTaskPhoenixTrans 注解,通过声明一个 AnnotationProcessor 继承 BeanPostProcessor 来进行收集定义的注解。

收集 Task 与 Trans
收集 Task 与 Trans
  • 首先是根据注解类收集上来对应的 Task 和 Trans;
  • 根据不同的 Trans 划分不同的 API,收集不同 API 依赖的 Task;
  • 按照 Trans 是否进行依赖过滤使用到的 Task;
  • 根据 Task 之间的相互依赖关系,将 Task 进行分组;
划分 API
划分 API
划分并发调用组
划分并发调用组

这样就完成了对框架的分层与自动构建的设计,框架的设计主要的是要思考如何将实际业务中使用的模块抽象化设计,同时要思考框架的扩展性与强约束性。

结尾

本篇文章主要讲解我如何将业务与调用关系进行抽象成 Trans 与 Task 的,接下来我将讲述并发框架并发线程池的核心设计、配置化思考、监控设计以及自动构建算法等系列文章。

如果你感兴趣,推荐关注,欢迎互动与交流,让我们一起变得更强~

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Phoenix框架 从0到1设计业务并发框架 自动构建有向无循环图设计
Phoenix 自动构建有向无环图的业务并发框架,核心就在于不需要开发人员关心调用分层和依赖互斥的排序问题,通过算法进行自动构建、收集 Task 任务、检测环或者依赖,最后打印并发组分层信息。
Meng小羽
2024/05/15
1490
Phoenix框架 从0到1设计业务并发框架 自动构建有向无循环图设计
Phoenix框架 从0到1设计业务并发框架 自动构建有向无循环图设计
Phoenix 自动构建有向无环图的业务并发框架,核心就在于不需要开发人员关心调用分层和依赖互斥的排序问题,通过算法进行自动构建、收集 Task 任务、检测环或者依赖,最后打印并发组分层信息。
Meng小羽
2024/05/13
1460
Phoenix框架 从0到1设计业务并发框架 自动构建有向无循环图设计
Phoenix框架 从0到1设计业务并发框架 小米商城产品站革新之路
小米商城产品站之前由于历史原因,存在着诸多问题与不便,随着技术的快速变革,技术部中台化的建设,越来越不适用于现在快速迭代的业务需求,接下来我将以技术的视角讲解我们遇到的痛点,以及解决这些痛点的思路,也就是 Phoenix 框架诞生的故事。
Meng小羽
2024/03/07
2000
Phoenix框架 从0到1设计业务并发框架 小米商城产品站革新之路
高并发、高可用系统设计原则
高并发原则 无状态:应用无状态,配置文件有状态 拆分:系统维度、功能维度、读写维度、AOP维度、模块维度 服务化:进程内服务->单机远程服务->集群手动注册服务->自动注册和发现服务->服务分组/隔离/路由->服务治理(限流/黑名单) 消息队列:实现服务解耦、异步处理、流量削峰/缓冲(需要注意:处理生产消息失败、消息重复接收处理、生产重试;作为大流量缓冲,牺牲强一致性,保证最终一致性;需要数据校对) 数据异构:异构数据形成闭环,数据存储到合适的存储引擎;聚合数据,使前端通过少量调用拿到所需数据;依赖系统出问
Clive
2019/03/06
9720
Phoenix框架 从0到1设计业务并发框架 并发线程池的核心设计
前两篇文章已经讲述了我设计框架的背景以及抽象设计的细节,今天讲一下并发框架最为关键的并发线程池的核心设计,主要讲一下在设计线程池划分遇到的问题以及最终我采用了哪种方式实现的。
Meng小羽
2024/04/07
2300
Phoenix框架 从0到1设计业务并发框架 并发线程池的核心设计
货拉拉 Android 模块化路由框架:TheRouter
TheRouter 是一个 Kotlin 编写,用于 Android 模块化开发的一整套解决方案框架。
android技术分享
2022/09/07
1.9K0
货拉拉 Android 模块化路由框架:TheRouter
从0到1:美团端侧CDN容灾解决方案
CDN已经成为互联网重要的基建之一,越来越多的网络服务离不开CDN,它的稳定性也直接影响到业务的可用性。CDN的容灾一直由美团的SRE团队在负责,在端侧鲜有方案和实践。
美团技术团队
2022/01/25
1.1K0
从0到1:美团端侧CDN容灾解决方案
重新认识下JVM级别的本地缓存框架Guava Cache(3)——探寻实现细节与核心机制
通过《重新认识下JVM级别的本地缓存框架Guava Cache——优秀从何而来》一文,我们知道了Guava Cache作为JVM级别的本地缓存组件的诸多暖心特性,也一步步地学习了在项目中集成并使用Guava Cache进行缓存相关操作。Guava Cache作为一款优秀的本地缓存组件,其内部很多实现机制与设计策略,同样值得开发人员深入的掌握与借鉴。
是Vzn呀
2022/11/30
9420
[UI自动化设计模式]超越PO:使用Serenity和ScreenplayPattern新一代自动化测试
在如今快节奏的软件交付环境下,自动化验收测试是很有必要的。高质量的自动化验收测试能够减少手动测试和bug修复所耗费的时间,从而帮助我们更快地交付有价值的特性。将其与行为驱动开发(Behaviour-Driven Development)方式相结合的话,自动化验收测试还能指导和校验开发工作的开展,帮助团队聚焦于特性的构建,并确保这些特性是真正重要和可运行的。
测试邦
2019/08/12
1.6K0
[UI自动化设计模式]超越PO:使用Serenity和ScreenplayPattern新一代自动化测试
java——ip黑名单设计方案(大全+实战)
思路:将黑名单ip存入一个txt文件中(置于resources下),用一个bean去加载文件内容,并存入一个Set中。
小薛cOde
2024/01/29
3580
java——ip黑名单设计方案(大全+实战)
分布式定时任务框架之Uncode-Schedule框架源码分析
Uncode-Schedule是基于zookeeper的分布式任务调度组件,非常小巧,使用简单。 1.1. 它能够确保所有任务在集群中不重复,不遗漏的执行。 1.2. 单节点故障时,任务能够自动转移到其他节点继续执行。 1.3. 支持动态添加和删除任务。 1.4. 支持添加机器ip黑名单。 1.5. 支持手动执行任务。
lyb-geek
2018/07/26
1.3K0
Phoenix边讲架构边调优
一 基础架构详解 1 概念 讲调优之前,需要大家深入了解phoenix的架构,这样才能更好的调优。 Apache Phoenix在Hadoop中实现OLTP和运营分析,实现低延迟应用是通过结合下面两个优势: 具有完整ACID事务功能的标准SQL和JDBC API的强大功能 通过利用HBase作为后台存储,为NoSQL世界提供了late-bound, schema-on-read灵活的功能。 Apache Phoenix与其他Hadoop产品完全集成,如Spark,Hive,Pig,Flume和Map
Spark学习技巧
2018/01/31
4K0
Phoenix边讲架构边调优
dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
对于大型的应用软件,特别是客户端应用软件,应用启动过程中,需要执行大量的逻辑,包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的,而客户端应用软件是对应用的启动性能有所要求的,不同于服务端的应用软件。设想,用户双击了桌面图标,然而等待几分钟,应用才启动完毕,那用户下一步会不会就是点击卸载了。为了权衡大型应用软件在启动过程,既需要执行复杂的启动逻辑,又需要关注启动性能,为此过程造一个框架是一个完全合理的事情。我所在的团队为启动过程造的库,就是本文将要和大家介绍我所在团队开源的 dotnetCampus.ApplicationStartupManager 启动流程框架的库
林德熙
2022/08/12
3380
dotnet 为大型应用接入 ApplicationStartupManager 启动流程框架
HBase操作组件:Hive、Phoenix、Lealone
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。
王知无-import_bigdata
2020/07/21
1.8K0
HBase操作组件:Hive、Phoenix、Lealone
HBase整合Phoenix
Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。
ha_lydms
2023/12/04
3850
HBase整合Phoenix
流式视频处理架构设计
image.png 在LiveVideoStack线上交流分享中,新浪微博视频平台架构师曾诚分享了微博大规模视频处理如何应对多业务场景,大流量,高并发的挑战。包括利用工作流式计算引擎实现场景动态配置,
LiveVideoStack
2019/07/22
3K0
流式视频处理架构设计
Apache Phoenix系列 | 真 · 从入门到精通
文章简介:Phoenix是一个开源的HBASE SQL层。它不仅可以使用标准的JDBC API替代HBASE client API创建表,插入和查询HBASE,也支持二级索引、事物以及多种SQL层优化。
王知无-import_bigdata
2019/09/03
6.1K0
Apache Phoenix系列 | 真 · 从入门到精通
Pipeline 设计模式的优缺点和实践案例
之前我们在《Java 中的 Pipeline 设计模式》 一文中介绍了 Pipeline 设计模式,核心思想是创建一组操作(管道)并将数据在这些操作中传递,每个操作可以独立工作,同时处理多个数据流。
明明如月学长
2023/03/14
3.1K1
Pipeline 设计模式的优缺点和实践案例
HBase的SQL中间层——Phoenix(附大数据入门指南)
大数据依然是当前较为火热的领域,其背后的核心价值是数据。今天分享一个GitHub上一个系类文章,作者是heibaiying,大数据入门指南(2019)地址:https://github.com/heibaiying/BigData-Notes(本文末点击阅读原文进入),内容涉及下图的相关技术。
大数据技术架构
2019/09/10
1.4K0
HBase的SQL中间层——Phoenix(附大数据入门指南)
如何接手并维护一个项目
若是有最开始的包括后续优化的相关技术文档或者系统文档,对于接手过来的项目无疑是最有助于开发人员的方式。但是大家会发现往往接手过来的项目是没有这一类的文档的,交接过来的系统若是对开发有极高追求的,一般都会有文档,并且 README.md 中会有项目介绍包括相关文档,但是...... 往往我们拿到手的系统是纯代码,README.md 可能都没有这个文件,这种往往是最痛苦的,不过也是最锻炼梳理系统这项技能的。
Meng小羽
2024/02/24
3010
如何接手并维护一个项目
推荐阅读
相关推荐
Phoenix框架 从0到1设计业务并发框架 自动构建有向无循环图设计
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档