【发布时间】:2015-12-21 07:24:00
【问题描述】:
我正在尝试为我的一个项目评估 solr,我需要检查我的应用程序的 tps(每秒事务数)方面的可伸缩性。 我已将 1 个 AWS 服务器上的 solr 配置为独立应用程序,它为我的查询提供了 ~8000 的搜索查询 tps。 为了测试可扩展性,我在两台 AWS 服务器上对相同的数据进行了分片,每台服务器有 250 万条记录。当我尝试使用与之前相同的查询查询集群时,它给了我约 2500 的 tps。 我的理解是集群中的 tps 应该增加,因为它们是两台不同的机器,它们将执行单独的 I/O 操作。 我正在使用 solr 提供的查询 REST 端点。 我没有配置任何单独的负载均衡器,因为 solr 文档说默认情况下 solr cloud 将以循环方式执行负载均衡。 感谢任何帮助验证我的理解。
【问题讨论】:
-
如何查询集群?当您从一个节点转到两个节点时,您的查询必须从您正在查询的节点分发,从而产生更多的网络吞吐量。有趣的问题通常是当您引入节点 3、4、5 等时会发生什么,因为从 1 到 2 会引入处理分布式查询的所有复杂性。
-
我正在通过 solr 提供的 /select REST 端点查询集群。您认为网络延迟可能会在这种程度上降低性能吗?
-
但是您使用的是集群感知客户端吗?否则 Solr 将从您正在查询的服务器执行路由以查找包含文档的节点,因此它将在 Solr 端具有(额外的)网络开销。虽然以前可以通过请求 - 服务器 - 响应来处理请求,但现在它是请求 - 服务器 - 请求 - 服务器 - 响应 - 服务器 - 响应,并在适当的地方合并结果。
-
我可以使用集群感知客户端,这给了我很好的 tps。那么使用 solr 客户端是否需要知道分片中的数据,以便它可以直接查询特定分片?如果我总是必须查询集群以防我的客户端不知道集群,我该如何扩展?
-
我添加了一个解释作为实际答案,因为它需要更多空间:-)
标签: performance solr solrcloud