构建实时垂直搜索网站经验分享(转)

构建实时垂直搜索网站经验分享
刘连春@去哪儿网

大纲
•垂直搜索
•实时搜索
•监控系统


垂直搜索
•什么是垂直搜索?
–与业务紧密耦合
•高访问量
•高可用性
•快速响应

垂直搜索-高访问量
•构建集群
•动静分离
•转发策略
•缓存系统
•消息系统

高访问量-构建集群
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