高性能队列Fqueue的设计和使用实践课件

上传人:磨石 文档编号:243004319 上传时间:2024-09-13 格式:PPTX 页数:25 大小:747.62KB
返回 下载 相关 举报
高性能队列Fqueue的设计和使用实践课件_第1页
第1页 / 共25页
高性能队列Fqueue的设计和使用实践课件_第2页
第2页 / 共25页
高性能队列Fqueue的设计和使用实践课件_第3页
第3页 / 共25页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2011/11/26,#,高性能队列,Fqueue,的设计和使用实践,2011.11,孙立,sunli1223,提纲,FQueue,简介,Fqueue,的存储设计,Fqueue,的使用实践,Q&A,Fqueue,简介,Fqueue,(,Fast Queue,),提供跟,Memcached,一样的客户端分布式和高可用机制,单实例多队列功能,每个队列可设置安全认证密码,可动态增加队列或者更改密码,纯,JAVA,实现,可以内置到,JAVA,进程内使用,simple,真的,simple,开源,Fqueue,有多快,进程内,每次写入,10,字节,,909,万,qps 86MB/s,每次写入,1024,字节,,19,万,qps 185MB/s,跨服务器,多个,client,每次写入,10,字节,,32,万,qps,Fqueue,使用有多简单,下载,-,解压,-,启动,直接使用,无需繁杂的参数优化,你总是能获得高性能的,Queue,队列服务器,Fqueue,的存储设计,Fqueue,的整体设计结构,Producer,Memcached,接口,FSQueue,持久化队列存储,Comsumer,管理、监控,Fqueue,协议实现,FSQueue,持久化队列存储,FSQueue,持久化队列存储,架构在,Memcached,协议之上,add,get,Fqueue,的存储结构设计,1,2,3,4,5,6,7,8,9,3,18,单文件顺序存储数据,存储出队和入队的位置,初始想法,问题:出队数据不好删除,1,2,Fqueue,的存储结构设计,Read offset,Write offset,最终的结构,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,File1,File2,File3,Read,FileNo,Write,FileNo,数据顺序写,数据顺序读,IndexFile,记录读写位置和文件编号,Index File,标记删除,不删除物理数据,FileNo,全部消费后,再删除,FileNo,文件。,Index File,选择读写实现方式,-,内存映射,写方式,结果耗时,(ms),备注,BufferedOutputStream,414,速度最快(与设置的,cache,大小有关),数据,cache,在,JVM,内。,RandomAccessFile,29499,速度最慢,数据直接刷盘。,1868,速度比较快。,OS,级别,cache,MappedByteBuffer,1456,速度快。,OS,级别内存映射,JAVA,的读写文件方式有很多,性能、特点都不一样,所以需要选择一个合适的。,测试方式:循环顺序写入,10,字节数据,1000,万次,BufferedOutputStream,虽然最快,但是易丢失数据,权衡之下,我们选择,了,MappedByteBuffer,作为我们的文件操作实现,Fqueue,一些优化,FileNo,文件全部消费后,交给后台线程异步删除,在新创建一个,FileNo,时,会让后台线程预创建,下一编号的存储文件,每,10ms,让,OS,强制刷盘,每个,Queue,的读写都有自己的,Queue,级别,writeLock,1,、,2,在中实现,Fqueue,的使用实践,队列服务器的常见使用场景,-,缓解数据库写压力,app,数据库,直接,Insert into,应用的性能直接依赖于数据库的响应时间和性能,直接写数据库,队列服务器的常见使用场景,-,缓解数据库写压力,用户,queue,queue,数据库,处理,job,高速队列,降低了应用写库的时间,能提高系统的写入吞吐量,应付高峰值,批量,insert,合并写。(批量插入可提升性能),用队列服务器应付高峰写入,队列服务器的常见使用场景,-,缓解数据库写压力,用队列服务器应付高峰写入,用户,queue,queue,数据库,处理,job,数据库宕机,队列部分宕机不影响应用的正常服务,队列服务器的常见使用场景,-,缓解数据库写压力,用了队列服务器,如何实现实时性?,用户,queue,queue,数据库,处理,job,实时缓冲区,用户,数据库,复制,merge,队列服务器的常见使用场景,-,任务处理,比如发送邮件,maila,maila,maila,mailb,mailb,mailb,发送进程,发送进程,发送进程,Queue.get(),Queue.get(),Queue.get(),maila,maila,maila,mailb,mailb,mailb,发送进程,Queue.get(),发送进程,Queue.get(),发送进程,Queue.get(),分组发送,队列服务器的常见使用场景,-,任务处理,自描述任务,/,存储逻辑到队列,memcachedClient,.add(,job_pass, 0,#!/bin/shrnsome code,);,memcachedClient,.add(,job_pass, 0,);,/,执行代码,String code =,memcachedClient,.get(,job_pass,);,String,result=,RunJob.,runCode(code);,队列服务器的常见使用场景,-,数据收集,日志收集,app,app,app,queue,queue,统计系统,日志监控报警系统,系统性能分析系统,低延迟,速度稳定,延迟比较高,速度不稳定,可能跨机房,日处理,1,亿日志的队列服务资源占用截图,高峰期不超过,20%,队列服务器的常见使用场景,-,解耦程序,视频网站的用户视频上传流程,视频上传,视频上传,视频上传,视频传,Queue,存储用户上传的信息,文件实体分开存储,转换处理,Queue,存储转换成功的数据,Queue,存储分发成功的数据,转换成功,成功的后续处理,用队列异步解耦程序,可以更好的进行扩展,这与,actor,模型类似。,转换处理,转换处理,文件分发,文件分发,文件分发,db,Fqueue,的使用,PHP,使用,Java,使用(,Xmemcached,),Fqueue,的使用,-,分布式与,key,的设计,Hash,(key_pass),始终,只会,hash,到一台。(,HA,),Hash,(key_pass_,固定字符串,),,固定,hash,到,3,三台,可用于负载均衡。,Hash,(Key_pass_,变化字符串,),,随机,hash,到三台,可用于负载均衡。,Fqueue1,Fqueue2,Fqueue3,client,Fqueue,实践,-Q,的火车票余票抓取,火车票系统,Memcached,余票抓取任务,Fqueue,处理程序,处理程序,处理程序,后台定时任务,清除堆积数据,Fqueue,Fqueue,实践,-,监控,谢谢,加入我们吧,Q&A,各种技术人员,简历投递到,li.,微博联系:,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 方案规范


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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