通信模块主要是基于 MEC 实现(Message Exchange Component),提供整个 DCF 组件实例间通信
能力,以及异步事件处理框架,主要功能有:可扩展的多种通信协议,单播、广播、环回的发送接
口,消息异步处理的框架,支持多 channel 机制和多优先级队列,支持压缩和批量发送等
服务层:
服务层是驱动整个 DCF 运行的基础,提供程序运行所需要的各种基础服务,例如:锁、任务异步
调度、线程池服务、定时器能力等
2 DCF 能做什么?
2.1 支持在线添加、删除节点,在线转让 Leader 能力
DCF 在标准的 multi-paxos 基础上,支持在线添加、删除节点,支持在线将 leader 能力转让给其他
节点,这更适合广泛业务场景,构建开发的生态。
2.2 支持优先级选主和策略化多数派
策略化多数派:经典 Paxos 理论中,多数派达成一致后数据就可以提交,而多数派是非特定的,
并不能保证某个或某些节点一定能得到完整的数据,在实际应用中,往往是地理位置较近的节点
会拥有强一致的数据,而地理位置较远的节点,一直处于非强一致的状态,在发生城市级容灾的
时候无法激活为主节点,形同虚设。策略化多数派能力,可以让用户通过动态配置,指定某个或
某些节点必须保有强一致的数据,在出现容灾需求的时,可以立即激活为主节点。
优先级选主:用户可以指定各个节点的优先级,DCF 严格按照指定的优先级选主,只有在优先级
高的节点全部不可用时,才会激活优先级低的节点。
2.3 支持节点角色多样性
DCF 除了可以提供经典的 Leader、Follow、Candidate 角色外,还可以提供定制化的角色,例如
Passive 角色(有日志,有数据,没有被选举权,不参与多数派投票),log 角色(有日志,没有
数据,没有被选举权,参与多数派投票),有了这些节点角色的支持,DCF 可以支持节点同步、
同异步混合部署等多集群部署方式。
2.4 Batch & Pipeline
Batch:DCF 支持多级 batch 操作,主要包括:1)将多个日志合并成单个消息进行发送;2)将多
个日志合并写磁盘;3)将多个日志合并复制。Batch 可以有效的降低消息粒度带来的额外损耗,
提升吞吐。
Pipeline:是指在上一个消息返回结果以前,并发的发送下一个消息到对应节点的机制,通过提高
并发发送消息数量(Pipeline 数量),可以有效的降低并发单请求延迟,提升性能;DCF 在日志
持久化、网络发送、日志复制等多个阶段采用纯异步方式,将 Pipeline 性能发挥至极致。
2.5 高效流控算法
Batching、Pipelining 虽然能够提升系统整体吞吐量和性能,但是过大 Batch 也容易造成单请求时
评论