zoukankan      html  css  js  c++  java
  • FastDFS

    最近业务需要了解了一下FastDFS。

    紧接是基于nginx的FastDFS第三方模块。

    FastDFS存非常高效,但是取却不高效。同时nginx拥有高效的直接读取磁盘文件的能力,但是却没有FastDFS的tracker-storage的优势。

    故而需要来扩展FastDFS的nginx第三方模块来丰富业务需求。比如任意剪裁图片(ImageMagick的resize)。转换音频(ffmpeg)。

    不过值得注意的是,这个操作消耗的是服务器的CPU和存储。

    这个过程从6月30号开始搭FastDFS环境,到7月1号下午开会明确上面的需求,到今天7月3号阅读源码尝试着修改。

    虽然到现在21:13分没有成功。但是还是有很多收获。

    比如安装FastDFS的时候需要配置的storage.conf, tracker.conf, 以及fastdfs-ngx模块的conf,nginx自己的启动配置conf,以上配置文件都需要一个一个地过,加深了理解。

    比如ubuntu下安装nginx需要修改objs文件夹下面的Makefile,于'-llua'后面添加'-ldl',还有其他一些问题的解决,让自己面对问题不是无能为力而是明确错误的一个大致范围,逐步来确定问题。

    最主要的是从大学毕业之后就很久没碰过的C代码的大量阅读。比如宏定义一些“过程”,

    FDFS_SPLIT_GROUP_NAME_AND_FILENAME(file_id)
    #define FDFS_SPLIT_GROUP_NAME_AND_FILENAME(file_id) 
        char new_file_id[FDFS_GROUP_NAME_MAX_LEN + 128]; 
        char *group_name; 
        char *filename; 
        char *pSeperator; 
        
        snprintf(new_file_id, sizeof(new_file_id), "%s", file_id); 
        pSeperator = strchr(new_file_id, FDFS_FILE_ID_SEPERATOR); 
        if (pSeperator == NULL) 
        { 
            return EINVAL; 
        } 
        
        *pSeperator = ''; 
        group_name = new_file_id; 
        filename =  pSeperator + 1; 

    以及一些库函数的调用:

        if (strncasecmp(pContext->url, "http://", 7) == 0)
        {
            p = strchr(pContext->url + 7, '/');
            if (p == NULL)
            {
                logError("file: "__FILE__", line: %d, " 
                    "invalid url: %s", __LINE__, pContext->url);
                OUTPUT_HEADERS(pContext, (&response), HTTP_BADREQUEST)
                return HTTP_BADREQUEST;
            }
    
            uri_len = url_len - (p - pContext->url);
            url = p;
        }
        else
        {
            uri_len = url_len;
            url = pContext->url;
        }

    还有就是memcpy,memcmp等的调用实例,

    if (group_count == 0)
            {
                bSameGroup = (group_name_len == my_group_name_len) && 
                        (memcmp(file_id, my_group_name, 
                            group_name_len) == 0);
            }
            else
            {
                int i;
    
                bSameGroup = false;
                for (i=0; i<group_count; i++)
                {
                    if (group_store_paths[i].group_name_len == 
                        group_name_len && memcmp(file_id, 
                            group_store_paths[i].group_name, 
                            group_name_len) == 0)
                    {
                        the_storage_port = group_store_paths[i]. 
                                storage_server_port;
                        bSameGroup = true;
                        pStorePaths = &group_store_paths[i].store_paths;
                        break;
                    }
                }
            }

    新京报有一个微博,说是如果重新走回一条路的话,那么,首先最好是面对一个真实的自己。

    我知道需要努力的地方有很多。但是容纳复杂度,循序渐进是最好的成长道路。勉励自己。又踏入服务器开发3个月了。

                                            

  • 相关阅读:
    随感
    to Live On
    记Weblogic部署BUG(websocket)
    CentOS更换yum源配置
    Java-14常用类-03=String类详解
    大牛博客推荐
    java-14常用类-02=Java中的String类
    npm-02 修改NPM下载地址(转换地址与下载源)
    selenium-10 selenium原理+ide录制+文件上传+弹框处理
    测试基础介绍
  • 原文地址:https://www.cnblogs.com/dotdog/p/4619742.html
Copyright © 2011-2022 走看看