弹性搜索中的多租户

41
我们计划为我们的多租户应用程序引入 ElasticSearch(AWS)。 我们有以下选项:
  1. 每个租户使用一个索引
  2. 每个租户使用一个类型
  3. 所有租户共享一个索引,但使用自定义路由
根据这篇博客https://www.elastic.co/blog/found-multi-tenancy,第一种选择会导致内存问题。但是其他选项不太清楚。
似乎如果使用第三个选项,则没有数据隔离性。不确定是否安全。
我认为第二个选项将是更好的选择,因为可以对数据进行分离。
请帮助我确定最佳选项以在多租户 ElasticSearch 上继续进行。
请注意,我们将利用 AWS 基础设施。

2
每个客户都被视为一个租户。 - Selvakumar Ponnusamy
2
那么答案取决于我们要处理多少租户/客户(1-10,10-100,100-1000,?)以及您期望的增长因素,即客户数量是否稳定或者您是否预计在未来N个月内增长x%?在决定采取哪种策略时,您需要考虑明天而不是今天。 - Val
2
你没有提到第4个选项:所有租户都共享一个带有自定义路由的基于时间的索引。当你的客户数量随着时间增长时,这是最灵活的选择。 - Val
2
你好@SelvakumarPonnusamy,我想了解你采用了什么方法,我们也有疑问,正在寻找过去的经验。如果您能分享您的经验,我将不胜感激。谢谢。 - Doston
我想知道内存问题是否仍然相关,因为这个问题和答案已经有5年的历史了,并且我已经阅读到在 Elastic 的 8.x 版本中,每个分片的内存开销已经显著降低。 - cah1r
显示剩余5条评论
3个回答

37

我们现在正在考虑同样的问题,Elasticsearch的以下一系列文章非常有帮助。

从这里开始阅读:https://www.elastic.co/guide/en/elasticsearch/guide/current/scale.html

然后逐个阅读每篇后续文章,直到阅读到这篇为止:https://www.elastic.co/guide/en/elasticsearch/guide/current/finite-scale.html

以下两篇对我来说非常启发性:

https://www.elastic.co/guide/en/elasticsearch/guide/current/faking-it.html https://www.elastic.co/guide/en/elasticsearch/guide/current/one-big-user.html

基本结论:

  • 每个客户的别名
  • 分片路由
  • 现在您可以为大客户建立索引,为小客户共享索引,并且它们都看起来像是单独的索引

1
有没有自动管理哪个客户端根据大小具有专用索引的方法? - Lior Goldemberg
1
你可以看一下curator。我不确定具体的使用情况,但我过去曾经使用它来执行多个维护任务。此外,Elasticsearch API非常复杂。话虽如此,将客户从共享索引移动到专用索引,并实现零停机时间,这个过程是耗时的 - 我不确定是否应该使其自动化(除非我误解了您的意思)。 - jzheaux
实际上,在现实世界中并不存在一种适合所有情况的解决方案。我们在这里找到了类似的建议:https://pulse.support/blog/multi-tenancy-with-elasticsearch-and-opensearch-7f1571 - synhershko

11

1
HTTP 500 today. - eco

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接