构建实时垂直搜索网站经验分享
刘连春@去哪儿网
大纲
•垂直搜索
•实时搜索
•监控系统
垂直搜索
•什么是垂直搜索?
–与业务紧密耦合
•高访问量
•高可用性
•快速响应
垂直搜索-高访问量
•构建集群
•动静分离
•转发策略
•缓存系统
•消息系统
高访问量-构建集群
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(报警短信,邮件)
•深入应用的探针
–了解应用特性
–快速定位故障
–指导优化
•
分时报警
–不同时间段,不同的预警值
•设置
合理阈值
构建实时垂直搜索网站经验分享(转)
猜你喜欢
转载自desert3.iteye.com/blog/1346574
今日推荐
周排行