首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果sunspot-solr不可用,则构建故障保护

如果sunspot-solr不可用,则构建故障保护
EN

Stack Overflow用户
提问于 2012-02-04 01:27:56
回答 1查看 714关注 0票数 4

我目前正在构建一个Rails3.2应用程序,它使用gem sunspot为我的应用程序提供搜索功能。sunspot使用Apache Solr执行全文索引和搜索。

代码语言:javascript
复制
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

我知道我可以从异常中执行rescue,但这仍然意味着每个请求都会生成一个到solr的连接尝试。有没有办法防止这种情况发生?(例如,捕获一次异常,然后在应用程序尝试重新连接到solr之前等待5分钟)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-04 05:43:54

作为太阳黑子的贡献者和Websolr的联合创始人,我建议使用超时时间较低的rescue_from

对于太阳黑子来说,看起来指定超时的选项是recently added to RSolr,这是太阳黑子使用的库,所以如果这是你需要的一个特性,那么你应该考虑向太阳黑子发送一个拉取请求,以将超时传递给RSolr。

如果您有适当的超时设置,那么生成对Solr的失败请求的代价应该不是很高。如果Solr关闭,您希望它在打开TCP连接时超时。一个健康的Solr服务器应该在不到一秒的时间内打开一个TCP连接,并在不超过一两秒的时间内开始为非常昂贵的查询发回数据。

在这里,0.1秒的打开超时和5秒的数据超时应该足够了。

下一个最好的选择是在您的应用程序和Solr之间建立其他本地代理,它可以在Solr关闭时限制请求。也许是缓存中间件,或者是Varnish。当然,我认为这是一种更复杂的方法,除非这样的代理或缓存已经是应用程序基础架构的一部分。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9132819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档