2014-11-15

SSDB源码分析 – 服务器的启动过程

Views: 43478 | 1 Comment

SSDB 服务器进程的 main 函数在 ssdb-server.cpp 文件里, 启动过程用伪代码表示如下:

welcome();
parse_args(argc, argv);
conf = Config::load();
data_db = SSDB::open(conf);
meta_db = SSDB::open(conf);
net = NetworkServer::init(*conf);
// 初始化业务处理
SSDBServer *ss = new SSDBServer(data_db, meta_db, *conf, net);
// 处理网络请求
net.serve();

这个主体的启动过程其实很简单. SSDB 库(libssdb)是封装好的, 直接打开数据库文件即可. 而 NetworkServer 也是封装好的网络模块(libnet), 之前有介绍过(SSDB 源码分析 – 网络框架概述).

SSDBServer 是比较复杂的地方, 因为它将 libssdb 和 libnet 整合起来, 同时还整合主从同步功能, 所以需要详细介绍.

在 serv.cpp 的 SSDBServer 构造函数里:

reg_procs(net);
backend_sync = new BackendSync(ssdb);
expiration = new ExpirationHandler(ssdb);
start_slaves();

首先, 给网络处理器注册命令处理函数, libnet 是业务无关的, 当 SSDB 服务器增加了一个新命令, 就要注册这个命令的处理函数, 这样当从客户端收到一个请求报文时, 服务器才知道如何处理.

接着会启动主从同步的处理器 BackendSync. 当网络服务器收到一个新的 slave 节点连接进来时, 请求会被转给 BackendSync 处理, BackendSync 将 binlog 发给 slave 处理.

关于 key 过期的处理是独立于 libssdb 的, 在 ExpirationHandler 类里处理.

由于每一个 SSDB 服务器节点既能作为 master, 同时也能作为 slave, 所以, 还需要根据配置文件决定是否启动 slave 处理器.

Related posts:

  1. SSDB源码分析 – 主从和多主同步原理解析
  2. SSDB 源码分析 – 网络框架概述
  3. SSDB NoSQL 数据库引擎介绍
  4. SSDB 配置文件
  5. SSDB常规升级-更新到leveldb-1.14.0, Windows安装包
Posted by ideawu at 2014-11-15 15:02:29

One Response to "SSDB源码分析 – 服务器的启动过程"

  • 请教一下,meta_db 的作用是什么,从源码中看,它只在SSDBServer::set_kv_range和SSDBServer::get_kv_range中有使用 Reply

Leave a Comment