“去哪儿”2011年2月10日1DavidWu一、“去哪儿”介绍二、监控系统三、虚拟化在去哪儿的应用四、Java开发的一些tips一、“去哪儿”介绍“去哪儿”简介•中国领先的旅游媒体•2005年5月上线•最大的旅游搜索引擎•机票,酒店,知道,博客,打折,签证,度假,景点•开始提供手机服务增长趋势Search数字•35M月访问用户•每天60M动态请求,峰值1700+/sec•每天消息系统承载30M消息,峰值1000/sec•每天18M次数据获取、网页解析•30Gmemcacheddata,264M次访问,峰值7000/sec•50%的数据能够在3s内得到服务,80%的数据能在8s内提供服务数字•过去两年我们搜索量增长了28倍•技术团队从10个人增长到60个人•产品线从2个增长到6个•各种系统从5个增长到近30个技术部门的使命•实现–实现产品–给产品的实现更多的可能性•用户体验–可用性–速度•成本–Capex(固定资产投资)/opex(运营费用)–开发效率系统演进的动力•来源–流量的增长–产品需求的复杂化•发现的途径–监控–变更和发布记录–实现当中发现的问题–项目管理中发现的开发效率问题二、监控系统高可用性•3个9:99.9%–2592秒/月=43分钟/月–2小时/季度•4个9:99.99%–259秒/月=4.3分钟/月–12.9分钟/季度一个故障特定事情发生服务质量不可接受故障发生注意到故障并开始修复修复结束网站故障来源•故障的来源–各种变更–访问量增长(capacityplanning)–人为操作失误–硬件、软件异常监控•监控分为两大类–监•及时发现失效点•关联关系–控•控制,就要有预先的概念•保留历史记录,对可能出现的问题进行预判和预先改进•在故障处理的时候,检查历史记录,找出变更对应的时间对关联关系的看法•个人认为使用服务方负责监控服务的质量和可用性–识别重要关联关系–对关联服务有质量标准,譬如成功率,延时等–制定报警标准–根据实际情况修正相关标准层次用户业务系统共享基础设施操作系统设备Qunar的监控系统•What’sup–监控服务器存活状态–监控URL存活状态•Cacti–监控服务器各项资源的使用情况–丰富的plugin•Squid/memcached/netapp–保存历史记录,观察流量和各项资源的使用的关系•要求ops每天都需要浏览cacti,每周全面审核Qunar监控•Hyperic–Java–开源–丰富的plugin–可用的报警机制–所有的业务、系统相关指标都在hyperic•Smokeping–Monitor机房到各省各个运营商的链路质量经验实施的步骤•先从用户体验和业务入手•设备监控•系统、基础设施•操作系统经验•每次发布完,团队要对所有的监控指标和系统图形观察30分钟以后才算结束发布•ops团队每天早上会对关键应用的指标进行快速review•Ops团队每周会对监控指标做快速巡查•90%以上的故障能通过监控系统发现三、虚拟化在去哪儿的应用Xen•虚拟化–70%以上的生产服务器跑在Xen上–迁移方便–部署、管理简单–更高的使用率,平均cpu使用率从15%-45%•OVM/Xen–有基于web的管理界面–剪裁比较好,300MHardware•CPU–2x4core•Ram–32Gor16G•Disk–2x500G,Raid0+1,有些有带电池写cache的raid卡•NIC–2x1G,1foriloXen•Example[david.wu@tools1.ops.cn1~]$sshl-ovms8.ops.cn1'sudo/usr/sbin/xmlist'NameIDMemVCPUsStateTime(s)112_tw6_f_cn1222004r-----3097120.3114_tw7_f_cn1322004-b----3099024.2116_mem1_f_cn1117004-b----267107.3118_sug1_f_cn11012004-b----58702.3430_twb2_f_cn1_ovms8922004r-----2283516.6434_askdb1_ovms81122004-b----60466.4Domain-006688r-----1661065.3问题•性能–RAM/Syscall(contextswitch)–I/Operformance•Diskperformance•Networkperformance(notsoimportantinwebenvironment)•管理–Networkstructure(vlantagging)–VMM层–Vm之间隔离RAM/Syscall•Unixbenchscore•Raw503•Dom-0397•Dom-U31705001000150020002500RawDom-0Dom-UUnixbenchscore0100200300400500600RawDom-0Dom-USystemBenchmarksIndexScoreSystemBenchmarksIndexScoreDiskperformance(withwritebuffer)Bonnie++01020304050607080CharwriteBlockwriteCharreadBlockreadRaw(withwb)Dom-0(withwb)Dom-U(withwb)Diskperformance(withoutwritebuffer)01020304050607080CharwriteBlockwriteCharreadBlockreadRaw(withoutwb)Dom-0(withoutwb)Dom-U(withoutwb)Diskperformance(Randomseek)020406080100120140160180RandomSeekRaw(withwb)Raw(withoutwb)Dom-0(withwb)Dom-0(withoutwb)Dom-U(withwb)Dom-U(withoutwb)Vlantagging•一个物理主机上要支持在多个vlan的虚拟机–规模扩大,单个网段无法满足需求–安全分区需求Xen•Inthefuture–Sharestorage/Livemigration–Devicepass-through–VMDq/VT-d/SR-IOV–Networkstructureoptimization–UpgradetoXen4.0toimprovetheperformance四、Java开发的一些tipsJAVA开发的一些Tips•善用jdk的命令–Jps–Jstat–Jmap–Jstack–jhattips•内存–OOM–GC并不能杜绝内存泄露–仔细计算内存的使用,内存是有限的,给内存的使用一个上限–Jhat可以帮助你看到你的内存用在什么地方–内存池化tips•线程–线程数量是有限的–所以减少线程数量是非常重要的–减少数量意味着要缩短线程的长度–线程池化,降低创建和销毁线程的开销tips•Cache和timeout是互联网永恒的主题•数字,数字,数字•监控对于工程师,相当于雷达对于战斗机•还可以更简单吗??•如果不知道未来,那就不要为未来做准备•性能(速度)象海绵,挤一挤总会有的•去掉一个部件远比增加一个部件功劳大•并发安全是魔鬼一点体会•共享基础设施比代码重用更加重要•保持状态是扩展性的天敌•团队的背景很大程度决定了架构的采用•“最好”vs“最合适”•“解决现在的问题”vs“解决将来的问题”•好的架构匹配好的运维•任何一项技术/架构的引进都需要一个痛苦的过程邮箱:david.wu@qunar.com电话:13701172202