【问题标题】:SOLR, independent on a Jetty server or as a webapp in my existing Tomcat?SOLR,独立于 Jetty 服务器或作为我现有 Tomcat 中的 web 应用程序?
【发布时间】:2011-11-05 22:17:26
【问题描述】:

我有一个电子商务网站,我想在其中实现搜索。在阅读了很多关于 Lucene 和 SOLR 的内容后,我最终选择了 SOLR,因为它增加了 JSON API 方面等功能。

SOLR 带有一个内置的 Jetty 服务器,在后台运行,我的 webapp 运行在 Tomcat 服务器上。我想知道从长远来看,什么对我更好,性能明智,易于定制和使用,是将 SOLR 作为独​​立于不同的 Jetty 服务器上还是将 SOLR 集成到 Tomcat 中,通过在 @987654322 中的 JAVA_OPTS 中列出@?

我个人觉得将 SOLR 放在 Tomcat 中会降低我的性能,因为加载需要更多时间,而且我不希望 SOLR 每次重新部署我的 web 应用程序时都重新启动,但是它可能会在一个地方集中在一起加分(不确定)。我期待那些一直在使用 SOLR 的人的意见,关于什么对我来说最好,数据集很大,每天也吸引着成千上万的用户。

【问题讨论】:

    标签: java performance search tomcat solr


    【解决方案1】:

    将所有这些都放在一个 Tomcat 实例上将使管理更容易。您可以easily redeploy your webapp independently of Solr,Tomcat 旨在托管多个应用程序。如果您必须将 Solr 和您的 Web 应用程序放在一个盒子中,我会避​​免使用两个 Web 服务器,除非您有一个真实的、可衡量的、令人信服的理由。

    【讨论】:

    • 为了扩展这一点,当您只想重新启动一个或另一个应用程序时,您不应该重新启动所有 Tomcat。
    【解决方案2】:

    毛里西奥的回答很好。

    与共享同一个 Tomcat 的操作简单性相反,将 Solr 隔离到它自己的整个 JVM 和堆中会带来潜在的安全性。这样一来,您就不必担心 Solr 中的一些内存泄漏或死亡查询或巨大的 GC 暂停导致主应用程序瘫痪的情况。

    在 Websolr,我们在 Tomcat 中运行 Solr,因为这是我们所知道的。但是,如果我们实现的设计是在同一实例类型上运行多个 Java 服务,我们会认真考虑切换到多个 Jetty 以提高隔离性。

    权衡利弊:操作简单与完全隔离。你的旅费可能会改变。如果这种隔离没有吸引力,请坚持在 Tomcat 中托管。如果有什么让您感到紧张,请设置 monit 和 munin 以密切关注一切。

    不要为了重新加载其中一个 Web 应用程序而重新启动所有 Tomcat。

    【讨论】:

      【解决方案3】:

      考虑到安全性,您可能希望隔离您的 solr 服务器,并且只能从您的 web 应用程序访问。

      在这种情况下,最好托管到未绑定在公共地址上的不同实例。

      【讨论】:

        最近更新 更多