SlideShare a Scribd company logo
1 of 38
Download to read offline
MongoDB at
Qihoo 360
王 超
DTCC2013
• 背景
• 发展历程
a) 初涉 - 千万
b) 挑战 - 亿级
c) 试炼 - 百亿
• 展望未来
DTCC2013
So Exciting!
• High Performance
• Scalability
• Schema free
DTCC2013
初涉
2012.01
• MongoDB 2.0.2
• 2 * mongos + 3 * mongod + 3 * config
• mongod(1 primary + 1 secondary + 1 arbiter)
• 3 Servers(Xen)
• 32G RAM
• SAS 15K – RAID 5
DTCC2013
千万级数据规模
- Keeping data in RAM
• QPS < 500
• R:W ~ 4:1
• Opcounters < 20 Million
• Document < 50 Million
DTCC2013
问题
• 每天一万多个Timeout (3s)
排查
• Profiling Levels(1), slowms
• mongostat
• iostat
DTCC2013
现象
• iostat,w/s, wkB/s 有规律的间隔出现
• 与slow log能对应上,批量呈现
• 产生I/O时,mongostat状态如下
– insert/query/update 持续几秒内有所下降
– lock > 80%
– flushes = 1
DTCC2013
--syncdelay
mmap, flush memory data into disk
• 默认60秒
• 不建议太长,早晚要刷入磁盘,出来混迟早要
还的!
• RWLOCK, global Lock(ver 2.0.x)
or
db.runCommand( { setParameter: 1, syncdelay: N} )
DTCC2013
• 缩短syncdelay为5秒
• 减少了60%的timeout
继续观察…
slow query总伴随着moveChunk出现
DTCC2013
• 调整balancer启动时间,避免高峰期工作
db.settings.update
(
{ "_id" : "balancer" },
{ $set : { "activeWindow" : { start : "00:00", stop : "8:00" } } },
true
)
• Mongos Connection Pool /
VersionManager Bug,偶尔超时
DTCC2013
超时问题总结
• Syncdelay
• moveChunk, activeWindow
• BUG - Connection Pool / VersionManager
DTCC2013
挑战
亿级数据规模 - 2012.04
• 6 Servers, 64G RAM
• SAS 15K – RAID 5
• Opcounters > 50 Million
• Document > 100 Million
DTCC2013
问题
• Timeout (3s) again!
– 平均latency上涨 (毫秒->百毫秒)
– 平均lock > 50%
– 缺页非常严重
• 0:00-8:00已无法均衡白天产生的数据
DTCC2013
归根结底
• 数据超出了内存
• 纯随机读写
DTCC2013
如何让数据重返内存?
• 节省空间使用
• 增加内存资源
DTCC2013
业务应用场景
老的结构:
– _id: BSON string, hash(160 bit)
– cnum: Array
……
{
_id: “d0be2dc421be4fcd0172e5afceea3970e2f3d940”,
cnum: [0, 1, 2],
……
}
DTCC2013
压缩后的结构:
• _id: BSON Binary, hash(160 bit)
40 bytes -> 20 bytes
• cnum: Int32
Array -> 位运算
……
空间节省一半
其他的好处…
DTCC2013
TIPS:
注意document长度对QPS的影响
– 6000万数据
– 随机读写,数据小于内存
测试结果:
– 3K: r/s > 6000, w/s > 500
– 1K: r/s > 11000, w/s > 1500
DTCC2013
预热数据
何时预热?
– 机器重启
– 增加secondary
– 增加shard
预热工具
– dd / cat 不好使
– vmtouch:http://hoytech.com/vmtouch/
• 内置touch command (version 2.2)
DTCC2013
0:00-8:00已无法均衡白天产生的数据
原因:
• IOPS瓶颈
– shardkey: sha1, 数据散列在磁盘
DTCC2013
解决
• moveChunk 加入限速功能
• balancer开始时间恢复为 0:00-24:00
内存问题?
预估两个月后,数据会再度超出内存
DTCC2013
SSD in MongoDB
• No Raid! HBA直连,性能发挥到最好!
• PageFault? Memory? 浮云!
• Low latency
diao丝->高富帅
DTCC2013
DTCC2013
试炼
百亿级数据规模
• 100+ Servers, 64G RAM, SSD * 5
• Cluster: 20+
• Opcounters: 2+ Billion
• Document: 30+ Billion
DTCC2013
高枕无忧?NO!
• NUMA架构
• 连接的选择
• 跨IDC应用
• 如何在线迁移业务
DTCC2013
NUMA架构
现象:
• 内存无规律换入换出,pgscand/s、
pgscank/s 飙升(sar –B)
• 某核CPU使用率 100%
• mongostat Lock > 90%
• 持续阻塞时间十秒左右(64G内存)
DTCC2013
原因:
• 使用默认内存访问策略时,单NUMA节点(特别是0节点)内存使用超
出单节点内存大小时, 上述问题与linux的行为有关。
• 关闭swap问题依旧存在
解决:
numactl --interleave=all ./xxx
echo 0 > /proc/sys/vm/zone_reclaim_mode
参考:
http://docs.mongodb.org/manual/administration/production-notes/#production-numa
http://blog.jcole.us/2010/09/28/mysql-swap-insanity-and-the-numa-architecture/
http://blog.jcole.us/2012/04/16/a-brief-update-on-numa-and-mysql/
DTCC2013
连接的选择
• 使用长连接的一次事故
– mongos/mongod crash
– 启动即挂
pthread_create failed,达到系统最大上限
DTCC2013
为什么?
• 一个连接一个线程的网络模型
• php driver < 1.2.10版本有连接泄露(超时异常时),client
设置timeout为100ms
• Client与每个mongos都建立连接,导致mongod连接X倍
• mongos/mongod 服务器复用
Mongod Conns(Threads) Nummber:
N Web Servers * N FastCGI Process * N mongos
e.g. 100 * 128 * 2 ~= 25K Conns(Threads) > maxConns
DTCC2013
如何解决?
• Fix bug - php driver
• 调整系统参数
ulimit [open files| max user processes]
/proc/sys/kernel/threads-max
/proc/sys/kernel/pid_max
/proc/sys/vm/max_map_count
• 改代码去掉maxConns限制
• Client只连接一个mongos (Zookeeper解决可靠性问题)
• 做好连接的预先规划
DTCC2013
短连接
• 创建关闭连接的开销
• 创建关闭线程的开销(no threads cache)
• Mongos Connection Pool /
VersionManager Bug,触发超时逻辑
DTCC2013
跨IDC应用-单集群
特点:
• 多机房容灾,架构、部署简单
• IDC之间依赖光纤
• 区分主次机房
• 适用于读多写少
– 基于就近选择策略(2.2版本官方自带)
DTCC2013
DTCC2013
跨IDC应用-多集群
• 数据同步 – QBUS(分布式消息队列)
DTCC2013
相比单集群优点:
• 集群独立,调整灵活
• 光纤断不影响写入,仅影响新数据同步的
实时性
• IDC瘫痪无需干预,业务切域名
(单集群模式时,主IDC瘫痪需要手动切primary)
DTCC2013
如何在线迁移业务?
• oplog实时同步程序(2.2版本自带)
– 从Secondary copy数据
(mongodump太慢,同步完oplog就跟不到了)
DTCC2013
In Future
展望未来
• WEB化集群管理
• 数据压缩
• 多线程数据同步、迁移
– 新增secondary
– 新增shard
期待:
collection lock! or document lock?
DTCC2013
Q & A
Thanks
Qihoo 360
Weibo: http://weibo.com/chancey
Email: chanceycn@gmail.com
We Are Hiring...
DTCC2013

More Related Content

What's hot

Mysql fast share
Mysql fast shareMysql fast share
Mysql fast sharerfyiamcool
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?kao kuo-tung
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析iammutex
 
美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术团队
 
ClickHouse北京Meetup ClickHouse Best Practice @Sina
ClickHouse北京Meetup ClickHouse Best Practice @SinaClickHouse北京Meetup ClickHouse Best Practice @Sina
ClickHouse北京Meetup ClickHouse Best Practice @SinaJack Gao
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 

What's hot (11)

Tpcc mysql
Tpcc mysqlTpcc mysql
Tpcc mysql
 
um-talk
um-talkum-talk
um-talk
 
Mysql fast share
Mysql fast shareMysql fast share
Mysql fast share
 
Openstack swift, how does it work?
Openstack swift, how does it work?Openstack swift, how does it work?
Openstack swift, how does it work?
 
NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析NoSQL误用和常见陷阱分析
NoSQL误用和常见陷阱分析
 
MySQL-Proxy
MySQL-ProxyMySQL-Proxy
MySQL-Proxy
 
美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践美团点评技术沙龙010-美团Atlas实践
美团点评技术沙龙010-美团Atlas实践
 
ClickHouse北京Meetup ClickHouse Best Practice @Sina
ClickHouse北京Meetup ClickHouse Best Practice @SinaClickHouse北京Meetup ClickHouse Best Practice @Sina
ClickHouse北京Meetup ClickHouse Best Practice @Sina
 
Rrdtool
RrdtoolRrdtool
Rrdtool
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 

Viewers also liked

Qihoo 360 Company presentation
Qihoo 360 Company presentationQihoo 360 Company presentation
Qihoo 360 Company presentationYixing Jiang
 
Red Tech Deep Dive on Qihoo
Red Tech Deep Dive on QihooRed Tech Deep Dive on Qihoo
Red Tech Deep Dive on QihooDigicha
 
Qihoo 360 Advertising 101
Qihoo 360 Advertising 101Qihoo 360 Advertising 101
Qihoo 360 Advertising 101David Ip
 
Technopreneurship and the Early Stage Ecosystem in China 2011
Technopreneurship and the Early Stage Ecosystem in China 2011Technopreneurship and the Early Stage Ecosystem in China 2011
Technopreneurship and the Early Stage Ecosystem in China 2011Chris Evdemon
 
mi proyecto de vida
mi proyecto de vidami proyecto de vida
mi proyecto de vidatorresangie
 
Historia comunicacion oral y escrita
Historia comunicacion oral y escritaHistoria comunicacion oral y escrita
Historia comunicacion oral y escritaerikix06
 
μακεδονικος αγωνας1
μακεδονικος αγωνας1μακεδονικος αγωνας1
μακεδονικος αγωνας1Ελενη Ζαχου
 
CEL Working: Real collaboration day
CEL Working: Real collaboration dayCEL Working: Real collaboration day
CEL Working: Real collaboration dayDiana González
 
Ones electromagnètiques
Ones electromagnètiquesOnes electromagnètiques
Ones electromagnètiquesjvsirerol
 
Testing/Manufacture/Kelvin Double bridge
Testing/Manufacture/Kelvin Double bridgeTesting/Manufacture/Kelvin Double bridge
Testing/Manufacture/Kelvin Double bridgefec2020
 
Technopreneurship and the Early Stage Ecosystem in China in 2013
Technopreneurship and the Early Stage Ecosystem in China in 2013Technopreneurship and the Early Stage Ecosystem in China in 2013
Technopreneurship and the Early Stage Ecosystem in China in 2013Chris Evdemon
 
Testing/Manufacture/Filter Impulse Testing Machine
Testing/Manufacture/Filter Impulse Testing Machine Testing/Manufacture/Filter Impulse Testing Machine
Testing/Manufacture/Filter Impulse Testing Machine fec2020
 

Viewers also liked (16)

Qihoo 360 Company presentation
Qihoo 360 Company presentationQihoo 360 Company presentation
Qihoo 360 Company presentation
 
OH eBoard
OH eBoardOH eBoard
OH eBoard
 
Red Tech Deep Dive on Qihoo
Red Tech Deep Dive on QihooRed Tech Deep Dive on Qihoo
Red Tech Deep Dive on Qihoo
 
Qihoo 360 Advertising 101
Qihoo 360 Advertising 101Qihoo 360 Advertising 101
Qihoo 360 Advertising 101
 
Technopreneurship and the Early Stage Ecosystem in China 2011
Technopreneurship and the Early Stage Ecosystem in China 2011Technopreneurship and the Early Stage Ecosystem in China 2011
Technopreneurship and the Early Stage Ecosystem in China 2011
 
mi proyecto de vida
mi proyecto de vidami proyecto de vida
mi proyecto de vida
 
Informedeficitsdq
InformedeficitsdqInformedeficitsdq
Informedeficitsdq
 
Asmir
AsmirAsmir
Asmir
 
Historia comunicacion oral y escrita
Historia comunicacion oral y escritaHistoria comunicacion oral y escrita
Historia comunicacion oral y escrita
 
μακεδονικος αγωνας1
μακεδονικος αγωνας1μακεδονικος αγωνας1
μακεδονικος αγωνας1
 
CEL Working: Real collaboration day
CEL Working: Real collaboration dayCEL Working: Real collaboration day
CEL Working: Real collaboration day
 
Ones electromagnètiques
Ones electromagnètiquesOnes electromagnètiques
Ones electromagnètiques
 
SUMMIT 2013 Bio Booklet
SUMMIT 2013 Bio BookletSUMMIT 2013 Bio Booklet
SUMMIT 2013 Bio Booklet
 
Testing/Manufacture/Kelvin Double bridge
Testing/Manufacture/Kelvin Double bridgeTesting/Manufacture/Kelvin Double bridge
Testing/Manufacture/Kelvin Double bridge
 
Technopreneurship and the Early Stage Ecosystem in China in 2013
Technopreneurship and the Early Stage Ecosystem in China in 2013Technopreneurship and the Early Stage Ecosystem in China in 2013
Technopreneurship and the Early Stage Ecosystem in China in 2013
 
Testing/Manufacture/Filter Impulse Testing Machine
Testing/Manufacture/Filter Impulse Testing Machine Testing/Manufacture/Filter Impulse Testing Machine
Testing/Manufacture/Filter Impulse Testing Machine
 

Similar to Mongo db at qihoo 360

阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化colderboy17
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化guiyingshenxia
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法mysqlops
 
LinkIt Smart 7688程式開發
LinkIt Smart 7688程式開發LinkIt Smart 7688程式開發
LinkIt Smart 7688程式開發Wei-Tsung Su
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈lovingprince58
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能Feng Yu
 
第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队
第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队
第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队煜林 车
 
大规模高性能计算集群优化.pdf
大规模高性能计算集群优化.pdf大规模高性能计算集群优化.pdf
大规模高性能计算集群优化.pdfchachachat
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践wubx
 
How do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend partHow do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend partacelyc1112009
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术团队
 
Mesos-based Data Infrastructure @ Douban
Mesos-based Data Infrastructure @ DoubanMesos-based Data Infrastructure @ Douban
Mesos-based Data Infrastructure @ DoubanZhong Bo Tian
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconYiwei Ma
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.comHo Kim
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010Chuanying Du
 
开源+自主开发 - 淘宝软件基础设施构建实践
开源+自主开发  - 淘宝软件基础设施构建实践开源+自主开发  - 淘宝软件基础设施构建实践
开源+自主开发 - 淘宝软件基础设施构建实践Wensong Zhang
 
使用 Apache IoTDB 构建工业时序数据管理解决方案的实践
使用 Apache IoTDB 构建工业时序数据管理解决方案的实践使用 Apache IoTDB 构建工业时序数据管理解决方案的实践
使用 Apache IoTDB 构建工业时序数据管理解决方案的实践ZhangZhengming
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)frogd
 

Similar to Mongo db at qihoo 360 (20)

阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化
 
我对后端优化的一点想法
我对后端优化的一点想法我对后端优化的一点想法
我对后端优化的一点想法
 
LinkIt Smart 7688程式開發
LinkIt Smart 7688程式開發LinkIt Smart 7688程式開發
LinkIt Smart 7688程式開發
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
分布式Key-value漫谈
分布式Key-value漫谈分布式Key-value漫谈
分布式Key-value漫谈
 
利用新硬件提升数据库性能
利用新硬件提升数据库性能利用新硬件提升数据库性能
利用新硬件提升数据库性能
 
第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队
第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队
第三届阿里中间件性能挑战赛季军答辩ppt - rapids团队
 
大规模高性能计算集群优化.pdf
大规模高性能计算集群优化.pdf大规模高性能计算集群优化.pdf
大规模高性能计算集群优化.pdf
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践
 
How do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend partHow do we manage more than one thousand of Pegasus clusters - backend part
How do we manage more than one thousand of Pegasus clusters - backend part
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
Mesos-based Data Infrastructure @ Douban
Mesos-based Data Infrastructure @ DoubanMesos-based Data Infrastructure @ Douban
Mesos-based Data Infrastructure @ Douban
 
Taobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qconTaobao casestudy-yufeng-qcon
Taobao casestudy-yufeng-qcon
 
Comment System of 56.com
Comment System of 56.comComment System of 56.com
Comment System of 56.com
 
百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010百度系统部分布式系统介绍 马如悦 Sacc2010
百度系统部分布式系统介绍 马如悦 Sacc2010
 
开源+自主开发 - 淘宝软件基础设施构建实践
开源+自主开发  - 淘宝软件基础设施构建实践开源+自主开发  - 淘宝软件基础设施构建实践
开源+自主开发 - 淘宝软件基础设施构建实践
 
使用 Apache IoTDB 构建工业时序数据管理解决方案的实践
使用 Apache IoTDB 构建工业时序数据管理解决方案的实践使用 Apache IoTDB 构建工业时序数据管理解决方案的实践
使用 Apache IoTDB 构建工业时序数据管理解决方案的实践
 
Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)Mvcc (oracle, innodb, postgres)
Mvcc (oracle, innodb, postgres)
 

Mongo db at qihoo 360