-
Notifications
You must be signed in to change notification settings - Fork 2
系统中间件内核应该具备什么能力
以下将主要从 架构能力模型、数据存储能力模型、容灾能力模型、其他的能力模型 四个方面来讨论。
一个典型的基于数据的分布式系统中间件,
-
从系统设计架构模型来看,大多数都是在 去中心化 和 Leader-Follower 这两种架构模型中来选择。
- 去中心化
- Leader-Follower
-
从 CAP 能力模型来看,一个基于数据的分布式系统中,只能具备 CP 或者 AP。
- CP
- AP
那将 系统架构模型 和 系统对外提供的能力模型 结合起来一起看,正交一下,就会推出一个基于数据的分布式系统中间件的 四种架构能力模型:
- 去中心化 + CP
- 去中心化 + AP
- Leader-Follower + CP
- Leader-Follower + AP
并且我觉得这四种架构能力模型应该是对立与统一的。
说明: 四种架构能力模型可在满足某种条件的情况下,可相互转化。
在 去中心化 + CP 的这种架构能力模型中,如下图所示:
这种架构能力模型下,每个节点都是连通的。
-
赋予具有 Leader 选举的能力,但是仍然保持集群中所有节点都连通时,数据可更新,反之不可更新。
那么就可以演进为具有 Leader-Follower + CP 架构能力模型的系统。如下图所示:
-
不发生 Leader 选举,但是数据更新操作变为 集群中有少数节点不连通的情况系统仍然可用。那么这个时候就可以演进为具有 去中心化 + AP架构能力模型的系统。如下图所示:
同时 去中心化 + AP 架构能力模型和 Leader-Follower + CP 都具备往 Leader-Follower + AP 架构能力模型演进的能力。
基于数据的分布式系统中间件其中最主要的一个系统瓶颈在于整个分布式系统的存储能力。因此这个时候系统应该具备水平伸缩的能力。这里借鉴 redis cluster 模式下和 Kafka 的存储模型分别来介绍他们各自实现的一个存储解决方案,个人觉得也是两种比较典型解决方案。
**说明:**以下仅抛砖引玉,不深入探讨内部的实现机制及相关原理。
- 同构系统: 将存储节点分为若干个组,每个组内的节点服务完全相同的数据,其中一个节点为主节点,其他节点为备节点。
- 异构系统: 将数据划分为很多大小接近的分片,每个分片的多个副本可以分布到集群中的任何一个存储节点。
在一个分布式系统中,同城容灾,异地容灾的能力是比较普遍的,分布式系统中间件也是如此。
因此我觉得同城容灾,异地容灾的能力模型也应该可以收敛于一个统一的分布式系统中间件内核中。
- 会在两个机房部署两套集群,其中一套集群为 Primary,另一套集群为 Secondary。
- Primary 集群中的 Leader Node 具备数据快照同步的能力
- Secondary 集群的 Leader Node 具备数据快照回放的能力
- Primary 集群不可用是,客户端可以马上切换到 Secondary 集群的 Leader Node
有了同城容灾的建设能力,那异地容灾的能力建设可以构建于同城容灾基础之上。如下图所示:
-
至少部署三套集群,同城两套,异地一套。
-
容灾操作
- 操作优先使用 Primary Cluster,也即图中机房-A。
- 由于某种原因不能工作了,此时会在 sdk 侧自动转化为使用同城容灾的 机房-B。
- 如果同城机房-B也不能正常工作了,此时会在 sdk 侧自动转化为使用异地容灾的 机房-C。
-
同城/异地集群间数据同步与回放。
(相关爱好者可补充)
除上面两个具体分析之外,一个分布式系统中间件还应该解决最常规的一些问题,例如:
- Leader-Follower 架构下:
- Leader 选举
- Leader 挂了重选举
- 集群中新加入一个节点
- 集群中已存在的节点 online -> offline -> online
- 整个集群数据的 收 和 发
- CP 模型下集群中数据的一致性保证
- AP 模型下集群可用性保证
- 数据的存储
- ......
是否有这么一个分布式系统中间件一站式的开发解决方案,或者一个分布式系统中间件微内核,这些能力已经在里面实现好了。当你要实现一个基于 Leader-Follower + CP 架构能力模型的系统中间件时,只需要在这个分布式系统中间件微内核之上做一个配置之后就可以开始开发符合你特定业务语义的中间件了。那这个时候,试想一下,就能真正体会到**面向领域驱动设计模型(DDD)**带来的好处,此时你只需要聚焦核心的两个方面:
- 符合你特定业务语义的领域建模
- 数据的收和发。
一群有情有义的人,聚在一起做一件有意义的事-让天下没有难开发的中间件!。