OceanBase数据库源码解析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2.1 依赖库

deps子目录比较特别,它包含OceanBase内核代码的依赖库,deps子目录的目的是尽可能让OceanBase源码包能够形成一个自包含的软件包,使用者只需要从OceanBase源码包编译部署就能让OceanBase集群运行起来,而不需要手工下载安装各种依赖库。

1)3rd子目录包含一组工具,用来下载和编译第三方库。这些第三方库以预编译的Linux软件包(RPM包)形式发布在阿里云的镜像仓库中,3rd用deps后缀的文本文件记录了该仓库的URL地址以及需要的第三方库名称。使用build.sh脚本进行OceanBase编译时会自动根据deps文件从镜像仓库中下载这些RPM包并且安装在编译环境中。

2)easy子目录实现的是名为libeasy[1]的RPC框架,它是在libev基础上修改形成,OceanBase集群的节点间交互完全依赖于这套RPC机制。

3)oblib子目录包括最核心的基础库,它没有外部依赖,包含了错误码定义、容器类、内存分配器等大量基础类,以及最基础的头文件ob_define.h。一般情况下,oblib子目录下的代码(特别是oblib/src/lib下的代码)是与OceanBase内核的业务代码无关的。此外,由于OceanBase的编码规范要求不使用STL容器,因此oblib中自行实现了很多STL容器提供的功能。