apache / rocketmq-eventbridge

Apache rocketmq
https://rocketmq.apache.org/
Apache License 2.0
137 stars 49 forks source link

[RIP-67] RocketMQ EventBridge Runtime Management #134

Open 2011shenlin opened 1 year ago

2011shenlin commented 1 year ago

When subscription rule increase, a single runtime worker cannot support it, we need to add more worker to provide services at the same time.Here are several key issues:

Jashinck commented 1 year ago

show the Chinese version detail please

2011shenlin commented 1 year ago

问题背景

当订阅规则增加时,单个运行时worker无法支持,需要添加更多worker同时提供服务。这里有几个关键问题:

引入 Runner Task

当在规则中创建一个Target订阅时,EventBridge会为每个任务创建一个Target Runner,用来描述当前这个Target订阅的运行态信息,详细信息可以参考表 event_target_runner: image

但是目前的方式存在几个问题:

为了解决这个问题,我们在DB中,以声明的方式,引入表:event_runner_task image 其中cluster_id、worker_id 指名了当前runner_name运行的集群信息和Worker信息:

虚拟Cluster 管理

Cluster 是一个虚拟的概念,用来标注同一类Worker,这类Worker拥有相同的资源配置,镜像版本等。引入Cluster的目的主要包括:

为此,我们需要在DB中,同样以声明的方式,引入一张表 event_cluster: image

Worker管理

Worker和Runtime的区别是:Runtime代表软件的运行时,而Worker是Runtime运行时的资源节点。这个关系类似进程和系统之间的关系。理论上,一个Worker可以包含多个Runtime,但是为了简化模型,常常一个Worker只包含一个Runtime进程。 为了方便worker的管理,我们在DB中引入一张表event_worker: image

如何创建Worker

方式1: 直接注册物理Node到event_worker表中

发布流程:

如果都满足,则更新当前cluster下的worker到最新镜像。

leehom commented 1 year ago

问题背景 当订阅规则增加时,单个运行时worker无法支持,需要添加更多worker同时提供服务。 下面重点回答弹性资源问题:

现有系统需要多少Worker?

作业管理器询问所有connector task数量,总和就是资源槽数据量,Worker数量=资源槽数据量/每个Worker资源槽数

如何实现弹性伸缩/如何新增加Worker

两个问题其实是一个问题,弹性资源通过增减Worker实现;参考flink的声明式资源管理,资源使用分为,资源申请,检查资源请求/检查资源声明,资源提供 用例-资源管理器

如何实现不同任务之间的隔离?

使用docker的容器

高可用&健壮性设计

组件架构

  1. master的高可用是k8s的复制机制提供,选主机制k8s提供,资源消费者和资源管理器参与选主,资源消费者/任务管理器接入资源管理器主节点监听,获取最新资源管理器地址;任务管理器接入资源消费者主节点监听,获取最新的资源消费者主节点 2 资源消费者/资源管理器/任务管理器直接都有心跳检测,超时重连,保证连接有效性