思路

在 mass 开发时有两套设计思路,分别为:*设计B* 和 设计A

设计B: 总线、调度服务、引擎 多子系统设计

主要特性

  • 总线:实现服务发现、注册、消息通信功能
  • 调度服务:调度节点本身逻辑上是单例,提供多节点实现进行高可用
  • 引擎功能同 A 设计
  • 传统的分阶段批数据处理能力,读、数据转换、写分别串行执行。

优点

  • 技术难度较低,有较多的成熟组件可利用、实现上相对容易
  • 多个子系统有单点故障

缺点

  • 处理数据速度较慢
  • 不支持流式、实时数据处理
  • 部署、运维复杂,需要手动部署多套系统

设计A: 无中心节点设计、节点功能复用

主要特性

  • 无中心节点,所有节点(每个节点称为 broker)都是一样的,都具备集群发现、管理功能(基于Akka Cluster)
  • 调度
    1. 使用 Akka Cluster Singleton 选中一个节点作为协调者(调度),总体控制所有Job的执行,使用 Akka Persistence来持久化 调度过程(推荐)。
    2. 每个节点即是执行任务的引擎,同时也是调度。
  • 每个节点都是引擎,调度可分配Job的Task到引擎上执行。引擎在获取到Task后解析业务流程并调用相关组件进行实际的业务操作
  • 读、数据转换、写,数据处理中的各阶段流式并行执行。基于 Akka Stream 提供流式数据处理能力,同时还可使用 Akka Stream Kafka 实现更高性能、高可用、高容错、持久化的数据处理能力。
  • 结合 Kafka 和 reactive-kafka 实现 确定1次 数据处理模型,支持 ELT 等丰富的数据处理模式。

优点

  • 更快的数据处理速度
  • 可进行实时数据ETL
  • 支持ETL、ELT等丰富的数据处理模式
  • 更好的资源利用率
  • 架构统一、清晰
  • 部署简单,不需要分别部署多套子系统
  • 无单点故障问题

缺点

  • 技术难度较大
Found an error in this documentation? The source code for this page can be found here. Please feel free to edit and contribute a pull request.