storage功能概要分析

storage初始化注册:其对于tracker做客户端处理
1、storage进程main->storage_func_init->storage_func_init->tracker_get_my_server_id->tracker_get_storage_id->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_SERVER_ID)/fdfs_recv_response
2、storage进程main->storage_func_init->fdfs_get_storage_ids_from_tracker_group->fdfs_get_storage_ids_from_tracker_server->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_FETCH_STORAGE_IDS)/fdfs_recv_response
3、storage进程main->tracker_report_thread_start->tracker_report_thread_entrance->tracker_get_storage_max_status->tracker_get_storage_status->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)定时触发
storage进程main->storage_func_init->storage_check_and_make_data_dirs->storage_disk_recovery_restore->recovery_get_src_storage_server->tracker_get_storage_max_status->tracker_get_storage_status->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)初始化获取


tracker作服务端处理:
1、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_GET_SERVER_ID)->tracker_deal_get_storage_id->fdfs_get_storage_id_by_ip
2、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_FETCH_STORAGE_IDS)->tracker_deal_fetch_storage_ids
3、tracker_deal_task(TRACKER_PROTO_CMD_STORAGE_GET_STATUS)->tracker_deal_server_get_storage_status->
获取到的数据放入fast_task_info结构的data字段中,静荷数据前有TrackerHeader头,静荷数据依次拷贝,服务处理最后调用send_add_event完成发送


storage之间相互同步:
tracker_report_thread_start->tracker_report_thread_entrance->tracker_heart_beat->tracker_check_response->
A、storage相互间开始同步:trunk_sync_thread_start_all->trunk_sync_data->tcpsenddata_nb(STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG)/响应
B、向tracker通报变化:tracker_merge_servers->tracker_sync_diff_servers->tcpsenddata_nb(TRACKER_PROTO_CMD_STORAGE_REPLICA_CHG) 
服务端处理:
storage_deal_task(STORAGE_PROTO_CMD_TRUNK_SYNC_BINLOG)->storage_server_trunk_sync_binlog->trunk_binlog_write_buffer->trunk_binlog_fsync 写入trunk_binlog_fd文件并fsync强制落盘
tracker变化处理:tracker_deal_storage_replica_chg->tracker_mem_sync_storages 只向Group中相应storage_id记录IP和状态变化


storage与client交互,client做客户端
1、PHP_METHOD(FastDFS, storage_upload_by_filename1)->storage_upload_by_filename1_ex(STORAGE_PROTO_CMD_UPLOAD_FILE)->storage_upload_by_filename_ex->storage_do_upload_file->tcpsenddata_nb()/tcpsendfile/fdfs_recv_response
当中会使用sendfile零拷贝发送完整文件,包括FILE_1G_SIZE以上的大文件
storage服务端处理:
storage_deal_task(STORAGE_PROTO_CMD_UPLOAD_FILE)->storage_upload_file->storage_write_to_file
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值