系统架构

整体架构

Pegasus系统的整体架构如下图所示,一共分为四个部分:

  • Client Lib:封装数据到存储服务器的映射规则,以及和存储服务器(Replica Server)的通信细节,而提供一套简洁的Key-Value存取接口供用户使用
  • Replica Server:负责数据存储,响应Client Lib的数据存取请求
  • Meta Server:负责Replica Server的存活检测、数据分片(replica)管理、负载均衡等,通常采用一主多备的部署模式
  • Zookeeper:负责对Meta Server进行选主,以实现leader节点的高可用,并存储系统的各种元数据

pegasus-architecture-components

Replica Server

Replica Server主要负责数据存储和存取,以replica为管理单元提供服务:

  • 服务的replica角色既可能是主(primary)副本,也可能是从(secondary)副本
  • 底层使用RocksDB来存储数据
  • 管理commit log,并实现数据复制协议,提供数据一致性保证

Meta Server

Meta Server通常采用一主多备的部署模式,所有的状态都会持久化到Zookeeper上,同时通过Zookeeper进行选主。当leader故障后,另一台backup立即抢到锁,然后从Zookeeper上恢复状态,成为新的leader。Meta Server负责的功能包括:

  • 集群初始化
  • Replica Server的管理
  • Replica的分配、管理和负载均衡调度
  • Table的创建与删除
  • 响应Client请求,对Client提供最新的路由表(partition configuration)

Apache Zookeeper

在Pegasus中,Zookeeper主要有两个功能:

  • 集群元信息存储
  • Meta Server选主

Client Lib

Client Lib对用户提供数据存取接口,其特点包括:

  • 接口简洁:对用户提供简单的接口,将数据寻址和容错等细节封装在内部
  • 配置简单:用户只需通过配置文件指定Meta Server地址列表,就可以访问Pegasus集群
  • 尽量直接与Replica Server进行交互,尽量少地访问Meta Server的频率以避免单点问题,不依赖Zookeeper