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