FastDFS FastTracker 分析(version:3.11)

来源:互联网 发布:淘宝hottoys在哪买 编辑:程序博客网 时间:2024/05/16 00:59


FastTracker进程总共有9个线程(默认配置, 根据配置文件可以更改工作线程(work_thread_entrance)数量)在运行:

1:

 主进程创建其他进程后主要就是在listen客户端的连接:

tracker_accept_loop:  每当一个连接进来, 就将socket号传递给工作线程work_thread_entrance线程; 传递采用了libevent的peer socket方式传递给工作线程:

write(pThreadData->pipe_fds[1], &incomesock, sizeof(incomesock)) != sizeof(incomesock));

工作线程的选择主要是根据socket号被工作线程数取余的方式选择。因此工作线程是采用线程池的方式工作。


2:

工作线程(work_thread_entrance)将peer socket的另一端pipe_fds[0] 加入到libevent的的事件处理中,处理事件的函数是recv_notify_read;工作线程在libevent提供的处理接口event_base_loop上等待并处理收到 的事件。当收到主进程的accept后的事件后,recv_notify_read就读取accept的socket。获取一个空闲的连接处理任务:fast_task_info; 在socket上设置读和写的事件处理接口client_sock_read和client_sock_write(利用libevent的机制来处理读写)。发送的接口是send_add_event,也是采用事件的方式来发送数据。client_sock_read中处理消息的接口是:tracker_deal_task。


3:

httpd_entrance: 处理http消息的线程,主要由generic_handler来处理http来的事件,也是采用libevent来的事件方式来处理。主要是用于处理http的查询消息。


4:

 http_check_entrance :用于定时检查storage server是否正常,主要是建立到storage的连接是否可以建立。




5:

sched_thread_entrance: 主要来处理一些本地全局变量,storage状态写入文件等事件。 

log_sync_func:  将日志同步到磁盘;

tracker_mem_check_alive: 找出不活动的 storage server,接下来并更改 storage 的状态

fdfs_stat_file_sync_func: 将统计数据同步到磁盘;


6:

relationship_thread_entrance:主要是用于选择leader和维护leader。


后续几个线程写的比较简单,后续完善



原创粉丝点击