SlideShare uma empresa Scribd logo
1 de 19
如何用队列提升系统的性能 孙立@凤凰网                               www.ifeng.com http://twitter.com/sunli1223http://t.sina.com.cn/sunli1223 http://t.ifeng.com/sunlihttp://sunli.cnblogs.com/
谁在用队列完成异步处理 银行排队的取号机 ebay 微博,sns的feed处理 短信,邮件系统 用户数据的提交(不直接入库) 手机凤凰网,凤凰评论系统 ……
用队列进行异步处理可以 提高系统吞吐量-throughput 降低系统的延迟 -latency 节约峰值处理成本 合并计算和请求 异步任务处理 解耦程序,提高伸缩性和可靠性
如何用队列提升数据库写入性能 典型的数据库写入应用 app 数据库 直接Insert into 应用的性能直接依赖于数据库的响应时间和性能
如何用队列提升数据库写入性能 数据库写应用中使用队列 queue 用户 数据库 处理job 批量insert queue 合并写,(注:linux文件系统也会利用合并来提升性能-【电梯算法】) 高速队列,降低了应用写库的时间,能提高系统的写入吞吐量,应付高峰值
如何用队列提升数据库写入性能 队列在数据写入中的应用 queue 用户 数据库 处理job queue 数据库宕机,队列部分宕机不影响应用的正常服务
如何用队列提升数据库写入性能 队列在数据写入中的实时性 queue 用户 数据库 处理job queue 复制 数据库 实时缓冲区 用户 merge
如何用队列提升数据库写入性能 Merge举例
用队列实现分布式任务处理 邮件发送,短信发送 发送进程 a@126.commaila Queue.get() Queue.get() Queue.get() b@126.commaila 发送进程 b@gmail.commaila c@126.commailb 发送进程 d@sina.commailb e@sina.commailb ……
用队列实现任务分组 按照规则分组执行任务邮件按运营商分组,防止过快被封IP按照优先级别分组任务按照类型分组任务 Queue.get() Queue.get() Queue.get() a@126.commaila 发送进程 b@126.commaila c@126.commailb d@sina.commailb 发送进程 e@sina.commailb 发送进程 b@gmail.commaila
用队列实现可执行任务 队列存储可执行脚本逻辑 //存储逻辑到队列 memcachedClient.add("job_pass", 0, "#!/bin/shsome code"); memcachedClient.add("job_pass", 0, "<?phpsone code?>"); //执行代码 String code = memcachedClient.get("job_pass"); String result=RunJob.runCode(code);
用队列收集日志进行处理 准实时的日志处理(统计)比如wap站不支持js,只能靠日志统计 app 统计系统 queue 日志监控报警系统 app queue 系统性能分析系统 app 延迟比较高,速度不稳定,可能跨机房 低延迟,速度稳定 日处理1亿日志的队列服务资源占用截图,高峰期不超过20%
用队列解耦程序 视频网站的用户视频上传流程 Queue存储转换成功的数据 视频上传 Queue 存储用户上传的信息,文件实体分开存储 转换处理 文件分发 视频上传 文件分发 转换处理 视频上传 文件分发 转换处理 视频传 db Queue存储分发成功的数据 成功的后续处理 转换成功 用队列异步解耦程序,可以更好的进行扩展,这与actor模型类似。
用ICQueue架构队列 20万QPS(高性能),底层存储高达500万QPS Memcached协议兼容(易用) 支持数万并发连接(高并发) 最低只需几十M内存(低内存消耗) 多队列支持 安全认证,支持密码 基于磁盘持久化,支持大数据量。 随着数据增加,性能稳定
ICQueue与MemcacheQ测试 Icqueue(200客户端) Memcacheq(200客户端)
ICQueue的配置文件
ICQueue的使用 <?php $mem=newMemcache(); $mem->addServer("127.0.0.1",13421,false,1,100); $str=json_encode($posts); $mem->add("bbs_password_",$str,0,0);//入队,bbs为队列名称,password为密码,$str为入队的内容 $mem->get("bbs_password_");//从队列中获取队列头部的数据 ?> <?php $mem=newMemcache(); $mem->addServer("127.0.0.1",13421,false,1,100); $mem->get(“clear|bbs|password”);//清空 $mem->get(“size|bbs|password”); //获取队列剩余数据条数 ?>
ICQueue的扩展和可靠性 利用memcached的hash可实现扩展 $mem->add(“bbs_password_123”,$str,0,0); $mem->add(“bbs_password_135”,$str,0,0); //bbs_password_{随机字符},icqueue自动忽略密码后的字符 利用故障转移功能可实现高可靠性 $mem=new Memcache(); $mem->addServer(“192.168.100.11",13421,false,1,100); $mem->addServer(“192.168.100.12",13421,false,1,100);
没有了!

Mais conteúdo relacionado

Semelhante a 如何用队列提升系统性能

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconYiwei Ma
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)vanadies10
 
baidu fuye
baidu fuyebaidu fuye
baidu fuyedachmx
 
百度 fuye
百度 fuye百度 fuye
百度 fuyedachmx
 
香港六合彩
香港六合彩香港六合彩
香港六合彩zhanghe
 
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)Tim Y
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维guiyingshenxia
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维colderboy17
 
淘宝数据库架构演进历程
淘宝数据库架构演进历程淘宝数据库架构演进历程
淘宝数据库架构演进历程zhaolinjnu
 
淘宝数据库架构演进历程
淘宝数据库架构演进历程淘宝数据库架构演进历程
淘宝数据库架构演进历程Jian Peng
 
Solution apc 4.0
Solution apc 4.0Solution apc 4.0
Solution apc 4.0ahnlabchina
 
1.4亿在线背后的故事
1.4亿在线背后的故事1.4亿在线背后的故事
1.4亿在线背后的故事llkk0914
 
鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobaoterryice
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 SaacChao Zhu
 
阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台guiyingshenxia
 
集群运维管理平台
集群运维管理平台集群运维管理平台
集群运维管理平台mysqlops
 

Semelhante a 如何用队列提升系统性能 (20)

Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Cibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qconCibank arch-zhouweiran-qcon
Cibank arch-zhouweiran-qcon
 
Java@taobao
Java@taobaoJava@taobao
Java@taobao
 
淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)淘宝网架构变迁和挑战(Oracle架构师日)
淘宝网架构变迁和挑战(Oracle架构师日)
 
baidu fuye
baidu fuyebaidu fuye
baidu fuye
 
百度 fuye
百度 fuye百度 fuye
百度 fuye
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 
大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)大数据时代feed架构 (ArchSummit Beijing 2014)
大数据时代feed架构 (ArchSummit Beijing 2014)
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维
 
淘宝数据库架构演进历程
淘宝数据库架构演进历程淘宝数据库架构演进历程
淘宝数据库架构演进历程
 
淘宝数据库架构演进历程
淘宝数据库架构演进历程淘宝数据库架构演进历程
淘宝数据库架构演进历程
 
Mocha Bsm
Mocha BsmMocha Bsm
Mocha Bsm
 
Solution apc 4.0
Solution apc 4.0Solution apc 4.0
Solution apc 4.0
 
1.4亿在线背后的故事
1.4亿在线背后的故事1.4亿在线背后的故事
1.4亿在线背后的故事
 
鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao鹰眼下的淘宝_EagleEye with Taobao
鹰眼下的淘宝_EagleEye with Taobao
 
中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac中大型规模的网站架构运维 Saac
中大型规模的网站架构运维 Saac
 
阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台阿里云 张旭 集群运维管理平台
阿里云 张旭 集群运维管理平台
 
集群运维管理平台
集群运维管理平台集群运维管理平台
集群运维管理平台
 

如何用队列提升系统性能