思路
在 mass 开发时有两套设计思路,分别为:*设计B* 和 设计A。
设计B: 总线、调度服务、引擎 多子系统设计
主要特性
- 总线:实现服务发现、注册、消息通信功能
- 调度服务:调度节点本身逻辑上是单例,提供多节点实现进行高可用
- 引擎功能同 A 设计
- 传统的分阶段批数据处理能力,读、数据转换、写分别串行执行。
优点
- 技术难度较低,有较多的成熟组件可利用、实现上相对容易
- 多个子系统有单点故障
缺点
- 处理数据速度较慢
- 不支持流式、实时数据处理
- 部署、运维复杂,需要手动部署多套系统
设计A: 无中心节点设计、节点功能复用
主要特性
- 无中心节点,所有节点(每个节点称为 broker)都是一样的,都具备集群发现、管理功能(基于Akka Cluster)
- 调度
- 使用 Akka Cluster Singleton 选中一个节点作为协调者(调度),总体控制所有Job的执行,使用 Akka Persistence来持久化 调度过程(推荐)。
- 每个节点即是执行任务的引擎,同时也是调度。
- 每个节点都是引擎,调度可分配Job的Task到引擎上执行。引擎在获取到Task后解析业务流程并调用相关组件进行实际的业务操作
- 读、数据转换、写,数据处理中的各阶段流式并行执行。基于 Akka Stream 提供流式数据处理能力,同时还可使用 Akka Stream Kafka 实现更高性能、高可用、高容错、持久化的数据处理能力。
- 结合 Kafka 和 reactive-kafka 实现 确定1次 数据处理模型,支持 ELT 等丰富的数据处理模式。
优点
- 更快的数据处理速度
- 可进行实时数据ETL
- 支持ETL、ELT等丰富的数据处理模式
- 更好的资源利用率
- 架构统一、清晰
- 部署简单,不需要分别部署多套子系统
- 无单点故障问题
缺点
- 技术难度较大