1.5 开发说明

FastDCS通过简洁而有效的设计,为开发者提供一套简洁而有效的分布式计算框架,开发者只需要定制由FastDCS提供的几个用户自定义UDF函数(User defined function),就可以完成整个分布式系统的开发工作。

1.5.2 管理节点Master开发说明

开发者可以通过自定义Master节点类实现自定义的FastDCS管理节点功能,需要处理的有如下几个部分:

  1. 自定义 Master 类名 DemoMaster,继承 Master 类后即可拥有FastDCS服务集群的管理功能;
  2. 如果需要初始化 DemoMaster中的自定义变量,可以在虚函数 InitialTracker 中实现;
  3. 如果需要释放 DemoMaster中的自定义变量,可以在虚函数 FinalizeTracker 中实现;
  4. 必须在虚函数 ImportTaskUDF 中实现 DemoMaster 中的计算任务导入到服务集群;
  5. 必须在虚函数 ExportTaskUDF 中实现 DemoMaster 中的计算结果保存到外部存储系统;
  6. 必须通过REGISTER_FASTDCS_TRACKER宏,将自定义类名 DemoMaster 注册到FastDCS中;

管理节点Master开发框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 1.自定义Master类名`DemoMaster`派生在Master之上
class DemoMaster : public Master {
// 2.Master节点启动后,会调用这个方法
void InitialTracker(struct settings_s settings) {
// 初始化在 DemoMaster 中使用的自定义变量
......
Master::InitialTracker(settings);
};
// 3.Master节点退出时,会调用这个方法
void FinalizeTracker() {
// 释放在 DemoMaster 中使用的自定义变量
......
Master::FinalizeTracker();
};
// 4.FastDCS空闲的时候会主动调用这个方法,将新的计算任务导入到服务集群
// 该方法只会由选举为Primary master的节点进行调用
bool ImportTaskUDF(vector<FdcsTask> &tasks) {
// 你需要将外部存储系统中的计算任务导入到服务集群中
......
return true;
};
// 5.FastDCS会主动调用这个方法,将任务的计算结果导出到外部存储系统
// 该方法只会由选举为Primary master的节点进行调用
bool ExportTaskUDF(vector<FdcsTask> tasks) {
// 你需要将计算保存到外部存储系统中
......
return true;
};
private:
自定义变量;
};
// 6.注册宏必须填写正确,`DemoMaster`是你自定义的Master类名称
REGISTER_FASTDCS_TRACKER(DemoMaster);

1.5.3 工作节点Worker开发说明

开发者可以通过自定义Worker节点类实现自定义的FastDCS工作节点功能,需要处理的有如下几个部分:

  1. 自定义 Worker 类名 DemoWorker,继承 Worker 类后即可响应FastDCS服务集群的计算任务调度、并行计算等功能;
  2. 如果需要初始化 DemoWorker中的自定义变量,可以在虚函数 InitialTracker 中实现;
  3. 如果需要释放 DemoWorker中的自定义变量,可以在虚函数 FinalizeTracker 中实现;
  4. 必须在虚函数 ComputingUDF 中实现 DemoWorker 中的计算处理;
  5. 必须通过REGISTER_FASTDCS_TRACKER宏,将自定义类名 DemoWorker 注册到FastDCS中;

工作节点Worker开发框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 1.自定义Worker类名`DemoWorker`派生在Master之上
class DemoWorker : public Worker {
// 2.Worker节点启动后,会调用这个方法
void InitialTracker(struct settings_s settings) {
// 初始化在 DemoWorker 中使用的自定义变量
......
Worker::InitialTracker(settings);
};
// 3.Worker节点退出时,会调用这个方法
void FinalizeTracker() {
// 释放在 DemoWorker 中使用的自定义变量
......
Worker::FinalizeTracker();
};
// 4.FastDCS中有需要计算的任务的时候会主动调用这个方法,
// 开发者自行实现自定义的计算方法
bool ComputingUDF(FdcsTask &task) {
// 开发者自行实现自定义的计算方法
......
return true;
};
private:
自定义变量;
};
// 5.注册宏必须填写正确,`DemoWorker`是你自定义的Worker类名称
REGISTER_FASTDCS_TRACKER(DemoWorker);

1.6 编译和部署说明

FastDCS同样也是非常容易进行部署的,开发者可以轻松的将FastDCS系统部署在很多台Linux服务器中的, FastDCS会自动将这些Linux服务器建立起服务集群,以分布式运行的方式完成开发者的计算任务。

1.6.1 编译和安装说明

FastDCS只能运行在Linux系统中(需要内核版本高于 2.6 ),目前FastDCS-v0.1.1版本需要Google Protocol Buffers库的支持。

FastDCS系统运行是不需要依赖mysql,但由于FastDCS的demo演示程序是使用mysql作为外部存储系统进行代码编写的, 所以你的系统中需要有mysql数据库,或者有能够提供远程连接的mysql数据库。

编译和安装依赖环境

  1. 安装GCC
    • 目前FastDCS开发环境使用的是 GCC 4.4.4 版本。
  2. 安装CMake
  3. 安装Protobuf
    • Google Protocol Buffers用于FastDCS服务集群之间的通讯协议。
    • 你可以通过 http://code.google.com/p/protobuf 下载Protobuf的源代码(目前FastDCS开发环境使用的是 Protobuf-2.4.1 版本 )。
    • $ cd protobuf-2.4.1
    • $ ./configure prefix=/usr/local
    • $ make
    • $ sudo make install
    • 添加环境变量 export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/~/.bash_profile 文件中
    • 添加加载库路径 /usr/local/lib//etc/ld.so.conf文件中
    • $ ldconfig
  4. 编译FastDCS
    • https://github.com/liuxunorg/FastDCS 中下载FastDCS的最新版本源代码。
    • 使用编辑器打开 FastDCS/CMakeLists.txt 文件
    • FastDCS系统自身运行是不需要依赖mysql的,但FastDCS的demo程序是使用mysql作为外部存储系统进行代码编写的, 所以需要配置mysql库的路径,你需要修改 SET(MYSQL_DIR "/usr/local/mysql"),将你的mysql安装路径替换 /usr/local/mysql
    • 如果你需要通过 make install 命令将FastDCS安装到其他路径,你需要修改 set(CMAKE_INSTALL_PREFIX "/home/liuxun/FastDCS"), 将你自己安装路径替换 /home/liuxun/FastDCS
    • $ cd FastDCS-v0.1.1
    • $ mkdir build
    • $ cd build
    • $ cmake ..
    • $ make
    • $ make install

1.6.2 系统配置

FastDCS一共有2个配置文件,分别位于 /src/conf/master.conf 和 /src/conf/worker.conf ,这2个配置文件中绝大部分的配置项是通用的。

系统配置参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# Copyright 2013-02-05
# Author: Liu Xun (my@liuxun.org)
#
# FastDCS master config file
# 设置成 true,系统将以服务的方式在后台运行
# 设置成 false,系统将以应用的方式在前台运行
run_by_daemon = true
# 设置成 true,当系统异常崩溃的时候,将产生core文件
# 设置成 false,当系统异常崩溃的时候,不会产生core文件
max_core_file = false
# 三种日志类型的输出文件路径
# 如果不需要输出到文件,可以设置成/dev/null,如:
# info_log = /dev/null
# 如果需要见日志输出到控制台,可以不设置任何值,如:
# info_log =
info_log = /home/liuxun/FastDCS/demo/info.log
warn_log = /home/liuxun/FastDCS/demo/warn.log
err_log = /home/liuxun/FastDCS/demo/err.log
# 日志文件最大容量,默认值10M,支持的单位如下:
# G or g for gigabyte(GB)
# M or m for megabyte(MB)
# K or k for kilobyte(KB)
log_max_size = 10MB
# 指定以哪个用户运行这个程序,如果没有设置,以当前用户执行
# 该设置项只有在 run_by_daemon = true 的时候才有效
run_by_user = liuxun
# 保存PID的文件名称
pid_file = /tmp/fdcs_master.pid
# 系统支持的最大连接数,默认值256
# 这个参数的建议值是服务集群所运行的节点数的5倍
max_connections = 256
# 用于分配给每个Socket链接的缓冲区大小,默认64KB
# 这个参数建议的范围是 [8KB, 512KB]
socket_buff_size = 128KB
# 在Master 或 Worker 类的基础上派生的自定义类名称
# 例如FastDCS提供的demo程序中的Master节点需要配置成
# class_factory = DictMaster
# 例如FastDCS提供的demo程序中的Worker节点需要配置成
# class_factory = DictWorker
class_factory = "please input you master class name"
# 整个master节点集群的服务器IP和端口队列
# 格式为 host1:port1;host2:port2;...
tracker_group = 127.0.0.1:32301;127.0.0.1:32302;127.0.0.1:32303
# 当前节点的IP和端口
tracker_server = 127.0.0.1:32301
# Socket连接超时时间(单位:秒)
# default value is 30s
connect_timeout = 30
# 网络连接超时时间(单位:秒)
# default value is 30s
network_timeout = 60
# 节点发送心跳包的时间间隔(单位:秒)
# 该设置不能小于 lease_timeout 的设置值
heart_beat_interval = 30
# 节点状态报告的时间间隔(单位:秒)
stat_report_interval = 60
# 数据副本有效期时间(单位:秒)
# 该设置不能大于 heart_beat_interval 的设置值
lease_timeout = 10
# Primary master节点
# 每次从外部存储系统加载的计算任务数目(单位:个)
preload_tasks = 100
# Second master节点每次从Primary master节点
# 同步计算任务副本的数目(单位:个)
task_duplicate = 10
# Worker节点中的任务计算线程数
# 仅使用与Worker节点配置
computing_threads = 2
# FastDCS自带mysql的访问封装类的配置项
# FastDCS自身运行是不需要依赖mysql的
# 如果你需要在自定义函数中使用可以在这里进行配置
mysql_database = FastDCS
mysql_host = localhost
mysql_user = FastDCS
mysql_passwd = fastdcs
mysql_port = 3306