ruby-on-rails – 如果sunspot-solr不可用,建立故障保护
我目前正在构建一个Rails 3.2应用程序,它使用gem sunspot为我的应用程序提供搜索功能. sunspot使用Apache Solr执行全文索引和搜索.
def index @search = Article.search do fulltext params[:search] with(:published_at).less_than(Time.zone.now) paginate :page => params[:page],:per_page => 10 facet(:published_month) end @articles = @search.results respond_to do |format| format.html # index.html.erb format.json { render json: @articles } end end 现在,每当有人点击文章索引页面然后呈现结果时,我的代码就会执行搜索.我担心solr由于某种原因而失效,我的应用程序就死了.如果solr发生故障,我怎么能为执行基本Article.all的操作实现故障保护? 我知道我可以从异常中解救,但这仍然意味着每个请求都会生成连接尝试来解决.有办法防止这种情况吗? (例如,在应用程序尝试重新连接到solr之前等待一次然后等待5分钟) 解决方法
作为Sunspot的贡献者和
Websolr的联合创始人,我建议使用具有低时间超时的rescue_from.
在Sunspot方面,看起来指定超时的选项是recently added到RSolr,Sunspot库使用,所以如果这是你需要的功能,那么你应该考虑向Sunspot提供拉取请求以将超时传递给RSolr. 如果您有适当的超时时间,那么向Solr生成失败的请求应该不会那么昂贵.如果Solr关闭,您希望在打开TCP连接时超时.一个健康的Solr服务器应该打开一个小于一秒的数量级的TCP连接,并开始在不超过一秒或两秒的时间内发回数据,以用于非常昂贵的查询. 这里的开启超时为0.1秒,数据超时为5秒应该足够了. 这里的下一个最佳选择是在您的应用程序和Solr之间使用其他本地代理,这可以在Solr关闭时限制请求.也许是缓存中间件或Varnish.当然,我认为这是一种更复杂的方法,除非这样的代理或缓存已经是应用程序基础结构的一部分. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |