TFS Nginx模块实现

上传人:油条 文档编号:27544227 上传时间:2018-01-10 格式:PPTX 页数:29 大小:359.71KB
返回 下载 相关 举报
TFS Nginx模块实现_第1页
第1页 / 共29页
TFS Nginx模块实现_第2页
第2页 / 共29页
TFS Nginx模块实现_第3页
第3页 / 共29页
TFS Nginx模块实现_第4页
第4页 / 共29页
TFS Nginx模块实现_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《TFS Nginx模块实现》由会员分享,可在线阅读,更多相关《TFS Nginx模块实现(29页珍藏版)》请在金锄头文库上搜索。

1、Nginx-tfs实现,2012.8.10明俨,1,Agenda,The Big Picture配置和使用内部实现,2,The Big Picture,3/26,UpStream,DownStream,配置和使用,4,配置文件,http #http 配置块tfs_upstream 10.232.36.203:6100; #rc_server 地址tfs_rc_zone size=128M; #rc所使用共享内存大小tfs_block_cache_zone size=256M; #本地block cache所使用共享内存大小tfs_poll_rcs lock_file=/home/xxx/ngi

2、nx/logs/lk.file interval=10s timeout=3s enable=1; #rc keep-alive 使用的锁文件,时间间隔,超时时间,启用否tfs_send_timeout 3s; #向tfs server发送数据超时时间tfs_connect_timeout 3s; #连接tfs server超时时间tfs_read_timeout 3s; #从tfs server读数据超时时间tair_timeout 1s; #tair超时时间(连接/发送/接收数据)server #server 配置块tfs_keepalive max_cached=100 bucket_c

3、ount=10; #连接池大小tfs_tackle_log “pipe:/usr/sbin/cronolog -p 30min /home/mingyan.zc/ngx_bin/logs/cronolog/%Y/%m/%Y-%m-%d-%H-%M-tfs_access.log; #配置tfs访问日志 tfs_net_device bond0; #配置使用的网卡(获取本地地址用于rc登录)location / #根location配置块tfs_pass enable=1; #是否启用tfs模块,5,编译运行,6/26,编译./configure -add-module=/home/path/to

4、/mod_tair/tair_2/ -add-module=/home/path/to/mod_tfs -prefix=/home/path/to/ngx_bin/ -with-debugmakemake install运行./nginx停止./nginx -s stop重载配置文件./nginx -s reload,内部实现,7,ngx_tfs模块框架,8/26,通用模块部分,RESTful解析,连接池,rc keep-alive模块,本地block cache,TFS交互模块,JSON输出模块,排重,通用模块部分,配置文件指令解析3个配置数据结构main_confsrv_confloc_c

5、onf生命周期和nginx进程周期相同设置Handler(请求入口)ngx_http_tfs_handler初始化timer(用于rc-keep-alive),9/26,Handler,分配关键数据结构ngx_http_tfs_t从请求的pool中分配的生命周期和请求的生命周期相同RESTful解析解析URI解析操作对请求进行处理特殊请求:写文件请求(带body),10/26,RESTful解析,URI解析协议版本v1:原生TFSv2:自定义文件名appkey关键词和文件名操作解析方法:GET/POST/PUT/DELETE/HEAD参数举例curl -data-binary file_to_

6、up 10.232.35.41:3900/v1/tfscom,11/26,TFS交互模块,状态机连接的读写事件ngx_http_tfs_read_handlerngx_http_tfs_send_handler内存管理pool中分配,无需显式释放发送/接收buf,12/26,状态机,13/26,读原生TFS文件,自定义文件名目录操作,状态处理流程,14/26,RETRY_HANDLER(可选),typedef ngx_int_t (*tfs_peer_handler_pt)(ngx_http_tfs_t *t);,连接读写事件,写事件连接tfs server( ngx_event_connec

7、t_peer )发送tfs请求读事件接收tfs应答,15/26,内存管理,配置数据结构main_conf/srv_conf/loc_conf生命周期:nginx进程从pool中分配生命周期:请求共享内存生命周期:nginx进程,16/26,接收buf,Header buffer(共用)每个连接有各自的body buffer处理buf overflow情况,17/26,recv_chainheader_buffertfs_peer,ngx_http_tfs_t,bufnext,ngx_chain_t,bufnext,ngx_chain_t,peerbody_bufferpool,ngx_http

8、_tfs_peer_connection_t,连接池模块,维护到tfs的server之间的长连接根据ip地址计算hash两个hash链表cachefree保存在main_conf结构中放入连接池中时挂上读事件以便处理server端关闭,18/26,共享内存,在ngx_tfs_mod中的使用每个appkey的rc节点block cache在所有worker process中共享需要互斥访问,19/26,共享内存(cont),解析配置文件指令时就建立好固定大小数据结构红黑树内存分配/释放ngx_slab_alloc/ngx_slab_free_locked我们需要实现选择红黑树的key查找/插入/

9、淘汰,20/26,原生大文件,重用小文件的各个过程区分:大文件标记参数显式指定(写)数据超过指定大小(15MB)(写)文件名(L)(读/删/stat)BatchGetBlockInfo,21/26,原生大文件(cont),22/26,自定义文件名,重用原生文件的各个过程区分:URI中的协议版本号(v2)增加目录操作的过程Meta table保存在配置文件的loc_conf结构中更新:首次/root server更改/操作返回版本错误时,23/26,自定义文件名文件,24/26,自定义文件名其他,25/26,排重,使用ngx_tair模块动态创建tair实例在main_conf中使用一个固定大小

10、的数组,保存tair实例指针tair地址的哈希每个逻辑集群有自己的tair实例只初始化一次tair地址改变或进程退出时销毁tair实例所有的tair操作(PUT/GET/DELETE)也都是异步的,26/26,rc keep-alive,利用nginx的定时事件module初始化时创建一个在worker process之间互斥的变量worker process初始化时添加定时事件在事件超时时模拟请求处理过程遍历共享内存中的rc节点记录当前keep-alive的节点在队列中的位置处理完毕再添加一个定时事件,27/26,JSON输出模块,依赖yajl库ngx_http_tfs_json_initngx_http_tfs_json_xxx对要返回的内容进行json封装返回一个ngx_chain_t结构指针(会被链在ngx_http_tfs_t的out_bufs的末尾)返回json格式的应答指定content_type = application/json“,28/26,Thank You!,29,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号