构建实时垂直搜索网站经验分享(转)
构建实时垂直搜索网站经验分享
刘连春@去哪儿网
大纲
?垂直搜索
?实时搜索
?监控系统
垂直搜索
?什么是垂直搜索?
与业务紧密耦合
?高访问量
?高可用性
?快速响应
垂直搜索-高访问量
?构建集群
?动静分离
?转发策略
?缓存系统
?消息系统
高访问量-构建集群
Nginx
AppServer
Memcached
AMQ
Spider
添加机器即可扩容(数据库用实机【IO,高可靠性】,应用服务器用虚拟机【快速调整内存,快速部署新机器】)
高访问量-动静分离
Nginx
静态内容
动态内容
高访问量-转发策略
?静态内容轮叫(Round-Robin)
?动态内容转发
按用户转发(同一用户日志在同一机器,问题诊断)
按搜索条件转发
高访问量-缓存系统
?基本信息缓存
配置文件
基础数据(定时刷新,即使刷新)
?分布式缓存
Memcached
高访问量-消息系统
?AMQ (ActiveMQ)
AppServer
Spider
Queue
Topic
Other System
垂直搜索-高可用性
?消除单点
?自动故障转移
?系统尽量小而多
?控制后端压力
?使用外部接口经验
?留有备用系统
高可用性-消除单点
?为什么要消除单点
软硬件故障是常态
?设计上的单点
双机是基本要求
?隐藏的单点
容量单点(2个80%负载的机器)
配置单点(依赖的外部系统挂掉,没有设置超时)
高可用性-自动故障转移
?Failover
(避免类似下述场景问题:Nginx 报表导出 10分钟才能成功 超时转发 最后变成所有服务器都在运行导出服务)
数据库 2Master 1Monitor master之间IP漂移
AMQ 2个个服务器一组
Memcached 客户端转移
?Health check
高可用性-系统尽量小而多
?降低影响用户比例
?快速启动
?快速添加服务器
高可用性-控制后端压力
?分航线配置抓取(查询优化,移除无效查询)
?有效航线
?限制搜索量(考虑供应商服务器性能)
?自动上下线代理商工作时间 顾客量快满了
?协助对方优化系统
高可用性-使用外部接口经验
?假定不稳定
WebService, Socket, Mail
?设置超时(连接超时,读取超时)
?添加监控
?用日志界定边界
所有的输入输出
高可用性-留有备用系统
?缓冲系统压力
垂直搜索-快速响应
?有效利用缓存数据
?Ajax多次回数
?优化静态内容
快速响应-有效利用缓存
?快速返回未过期数据
?主动更新缓存
首页低价
快速响应-Ajax多次回数
?只返回必要的数据
?动态调整刷新时间 可以返回报价的比例,调整相应时间
快速响应-优化静态内容
?利用CDN网络
?缓存静态内容(图片),javascript,css不放 CDN不够稳定,故障,版本不对,系统控制在自己手里
实时搜索
?缓存更新策略
?Memcached使用经验分享
实时搜索-缓存更新策略
?设置过期时间
?反馈式更新
?热门点击易变化
缓存更新策略-设置过期时间
?根据业务特点设置不同数据,时间不同
缓存更新策略-反馈式更新
?构建反馈回路
AppServer
WebSite
User
Memcached
主动更新!
缓存更新策略-热门点击易变化(设置短的缓存失效周期)
?最低的价格
?最好的时段
实时搜索-Memcached
?独立的LRU
?设置合理的过期时间
?缩减Key长度
?设置客户端的网络超时
监控系统
?Cacti(监控)+Nagios(报警短信,邮件)
?深入应用的探针
了解应用特性
快速定位故障
指导优化
?分时报警
不同时间段,不同的预警值
?设置合理阈值