TFS Nginx模块实现.ppt

上传人:qwe****56 文档编号:70105306 上传时间:2023-01-16 格式:PPT 页数:29 大小:359.71KB
返回 下载 相关 举报
TFS Nginx模块实现.ppt_第1页
第1页 / 共29页
TFS Nginx模块实现.ppt_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《TFS Nginx模块实现.ppt》由会员分享,可在线阅读,更多相关《TFS Nginx模块实现.ppt(29页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、Nginx-tfs实现2012.8.10明俨1AgendaThe Big PictureThe Big Picture配置和使用配置和使用内部实现内部实现2The Big Picture3/26CLIENTPOSTGETPUTDELETEHEADNginxtenginengx_mod_tfsngx_mod_tairTFSrc servername serverdata serverroot servermeta serverUpStreamDownStream配置和使用4配置文件http#http 配置块tfs_upstream 10.232.36.203:6100;#rc_server 地址

2、tfs_rc_zone size=128M;#rc所使用共享内存大小tfs_block_cache_zone size=256M;#本地block cache所使用共享内存大小tfs_poll_rcs lock_file=/home/xxx/nginx/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_tim

3、eout 3s;#从tfs server读数据超时时间tair_timeout 1s;#tair超时时间(连接/发送/接收数据)server#server 配置块tfs_keepalive max_cached=100 bucket_count=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;#配置使用的网卡(获取本地地

4、址用于rc登录)location/#根location配置块tfs_pass enable=1;#是否启用tfs模块5编译运行6/26编译./configure-add-module=/home/path/to/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内部实现7ngx_tfs模块框架8/26通用模块部分RESTful解析连接池rc

5、keep-alive模块本地block cacheTFS交互模块JSON输出模块排重通用模块部分配置文件指令解析3个配置数据结构main_confsrv_confloc_conf生命周期和nginx进程周期相同设置Handler(请求入口)ngx_http_tfs_handler初始化timer(用于rc-keep-alive)9/26Handler分配关键数据结构ngx_http_tfs_t从请求的pool中分配的生命周期和请求的生命周期相同RESTful解析解析URI解析操作对请求进行处理特殊请求:写文件请求(带body)10/26RESTful解析URI解析协议版本v1:原生TFSv2:

6、自定义文件名appkey关键词和文件名操作解析方法:GET/POST/PUT/DELETE/HEAD参数举例curl-data-binary file_to_up 10.232.35.41:3900/v1/tfscom11/26TFS交互模块状态机连接的读写事件ngx_http_tfs_read_handlerngx_http_tfs_send_handler内存管理pool中分配,无需显式释放发送/接收buf12/26状态机13/26读原生TFS文件自定义文件名目录操作STARTGET_META_TABLEGET_BLK_INFOREAD_DATADONESTARTGET_META_TABL

7、EPROCESSDONE状态处理流程14/26CREATE_REQUESTINPUT_FILTER(可选)PROCESS_REQUEST_BODYFINALIZE_REQUEST(可选)RETRY_HANDLER(可选)typedef ngx_int_t(*tfs_peer_handler_pt)(ngx_http_tfs_t*t);连接读写事件写事件连接tfs server(ngx_event_connect_peer)发送tfs请求读事件接收tfs应答15/26内存管理配置数据结构main_conf/srv_conf/loc_conf生命周期:nginx进程从pool中分配生命周期:请求共

8、享内存生命周期:nginx进程16/26接收bufHeader buffer(共用)每个连接有各自的body buffer处理buf overflow情况17/26recv_chainheader_buffertfs_peerngx_http_tfs_tbufnextngx_chain_tbufnextngx_chain_tpeerbody_bufferpoolngx_http_tfs_peer_connection_t连接池模块维护到tfs的server之间的长连接根据ip地址计算hash两个hash链表cachefree保存在main_conf结构中放入连接池中时挂上读事件以便处理serv

9、er端关闭18/26共享内存在ngx_tfs_mod中的使用每个appkey的rc节点block cache在所有worker process中共享需要互斥访问19/26共享内存(cont)解析配置文件指令时就建立好固定大小数据结构红黑树内存分配/释放ngx_slab_alloc/ngx_slab_free_locked我们需要实现选择红黑树的key查找/插入/淘汰20/26原生大文件重用小文件的各个过程区分:大文件标记参数显式指定(写)数据超过指定大小(15MB)(写)文件名(L)(读/删/stat)BatchGetBlockInfo21/26原生大文件(cont)22/26数据分片:根据数

10、据长度计算好分片个数元分片:数据全部写成功之后生成元分片:读到内存一个临时的buf中数据分片:根据offset和size找到需要的分片写元分片:读到内存一个临时的buf中数据分片:和元分片一块删除读使用readV2协议将元分片的头读出来删Stat自定义文件名重用原生文件的各个过程区分:URI中的协议版本号(v2)增加目录操作的过程Meta table保存在配置文件的loc_conf结构中更新:首次/root server更改/操作返回版本错误时23/26自定义文件名文件24/26重用大文件的过程每写成功一批分片,保存元数据到meta server重用大文件的过程(反复从ms读分片信息)空洞:将

11、一个zero_buf反复挂到输出链写重用大文件的过程(反复从ms读分片信息)挨个删除分片,再删除ms上的元数据读删自定义文件名其他25/26使用json输出模块ls_dir要处理buf overflow无法使用递归利用ngx_str_t结构的特性,使用一个长度数组ls_dir/ls_file自动创建父目录排重使用ngx_tair模块动态创建tair实例在main_conf中使用一个固定大小的数组,保存tair实例指针tair地址的哈希每个逻辑集群有自己的tair实例只初始化一次tair地址改变或进程退出时销毁tair实例所有的tair操作(PUT/GET/DELETE)也都是异步的26/26r

12、c keep-alive利用nginx的定时事件module初始化时创建一个在worker process之间互斥的变量worker process初始化时添加定时事件在事件超时时模拟请求处理过程遍历共享内存中的rc节点记录当前keep-alive的节点在队列中的位置处理完毕再添加一个定时事件27/26JSON输出模块依赖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/26Thank You!29

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

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com