Skip to main content

Dispatch

Dispatch 模块用于将 Core Cluster 和 Core节点之间的消息的分发。

core_cluster_message_dispatching

Dispatch 模块位于外部应用和 Core 内部节点之间。

Dispatch Upstream

Dispatch 模块的输入是两种类型的 Queue, Queue 是对消息队列的抽象,前者为与外部应用交互的 Queue,另一种用于转发 Core 集群内节点转发的消息。两种类型的 Queue 都可以存在一个或多个。

Queue中的消息满足以实体为主体有序,即: 以 kafka 为例, topic 中的同一实体消息需要分布在同一 partition, 以保证 dispatch 操作后同一实体消息的有序性。

Dispatch Downstream

Dispatch 将上游 Queue 中的消息以 分发算法 分发到 众多的下游 Queue 中,为 Core 提供消息输入。

Reliability

可靠性主要体现在消息的丢失, Dispatch 和 Core 与 Queue 之间的消息可靠性主要使用 Queue 具体中间件的 Ack 机制来保证。 而 Core 节点 Republish 出来的消息发送到其他 Core 节点的消息的可靠性使用 重入Queue 来保障。

TTL

Core Cluster 中的消息可能在 Core 节点之间相互转发,那么我们可以对消息进行 TTL 设置,来保证消息不会循化传播,避免引起洪泛效应。

Queue 调度

Queue 扩展

对于 Dispatch 模块上游的 Queue 我们可以动态增减,来接入或删除外部 Application。对于 Dispatch 模块和 Core 之间的 Queue 我们在部署之前,会根据具体场景预估 Core 集群的大小,从而固定 Queue 的数量,Queue 的数量应该是更多于 Core 节点的数量的。

性能优化

性能优化主要在两个方面:对 Queue 本身的优化 和 消息传递流程优化。

Queue 优化

对于 Dispatch 与 Core 之间的 Queue 我们可以抽象具体的中间机制来实现优化,如使用轻量级的 kafka.topic.partition 抽象成 Queue 来实现优化。

消息传递流程优化

对于 Core 节点输出 转发 到其他 Core 节点的消息我们可以直接转发到目标 Core 节点消费的 Queue 上,而避免在此 dispatch 操作产生的消耗。

Dispatch 独立部署

Dispatch 模块可以作为 Core 服务的一个模块构建,也可以将 Dispatch 模块独立构建,独立部署。

Dispatch 横向扩展

由于前面对 Dispatch 模块上游 Queue 中的消息限制,所以我么可以对 Dispatch 模块进行横向扩展。

Runtime 和 Dispatch 的数据交互

runtime-dispatch

Reference