分布式调度,分布式事务,分布式执行计划

一.问题描述

最近在做分布式调度系统,用于把全网流量,在两个机房之间切换,切换时间控制在5分钟内。

在做调度系统中,需要涉及到dns,高防,接入层集群,应用层集群,中间层集群,消息系统集群,数据库集群,缓存集群,ES集群,CICD,监控等等。

为了保证切流成功。采用两个策略:1.各层级切流各自独立,互不干扰。2.统一调度集中统一。

现在就讲讲统一调度。

统一调度,需要再发指令 调度下级个层级集群 完成流量切换。有一个问题,如何做到高效、快速、精准、一致。

最好的结果是各层级切流都成功,或都失败。

最坏的结果是部分成功、部分失败、并且在很长的时间内,不知道哪些成功哪些失败。完全失控。

二.问题分析

所以,这 是一个分布式系统一致性问题。CAP+Latency。

这里不想展开。立刻想到类似的问题和解决思路:

1.分布式事务。交易场景在大规模多微服务系统之间完成一笔交易。也涉及到该问题。解决方式如 TCC。

2.分布式执行计划。spark 如何生成执行计划,将转换算子,执行算子,宽/窄依赖,shuffle&stage 做成一致高效的分布式执行计划,才可充分利用多个node,加快加速完成计算任务。spark的执行计划是 从转换算子,分解到执行算子,再汇总出依赖图,再回报给解析器。可以理解为 从根节点,到叶子节点,再回传到根节点。

三.问题解决。

1.我们的系统,也应该在统一调度发指令之后,先prepare,再commit,再rollback。或者如TCC  try confirm cancel。在prepare阶段,要获得各下级调度系统的执行计划。

所以我们设计,应该融合执行计划和分布式事务。只有这样才能做到高效、快速、精准、一致 的完成分布式切换。

1.1 prepare +explain。统一调度系统下发指令,各二级调度系统 做好prepare,并上报 自己的执行计划。(为了精准、一致)

1.2 commit。统一调度系统,确认出各层级模块,都做好了准备,那么让大家提交。(为了快速)

1.3 rollback。如果有二级模块异常,直接回滚全部。(为了一致)

你可能感兴趣的:(高性能网站,hadoop)