Elasticsearch - Sharding и Performance

Я думаю, что я наконец понял фундаментальное понимание того, как распределять осколки для Elasticsearch. Пожалуйста, поправьте меня, если я ошибаюсь, вот что я собрал:

  1. В идеале должен существовать только один осколок на индекс на узел.
  2. Единственная причина, по которой мы когда-либо захотим настроить более одного сегмента IS для избыточного распределения для будущего роста (т.е. добавление большего количества узлов для физической поддержки данных).

Теперь, предполагая, что то, что у меня есть выше, является верным, я затем задаюсь вопросом, есть ли какие-либо проблемы с производительностью или различия, если бы у меня был только один узел с 1 шардом против одного узла с 5 шардами. Может ли кто-нибудь просветить меня на эту тему?

2 ответа

"Единственная причина, по которой мы когда-либо захотим сконфигурировать более одного сегмента IS для избыточного распределения для будущего роста (т.е. добавление большего количества узлов для физической поддержки данных)".

Не обязательно так. Наличие большего количества сегментов помогает распараллелить ваши запросы и помогает быстрее завершать их, но через некоторое время это может привести к обратным результатам, так как слишком большое количество фрагментов будет означать накладные расходы при объединении ответов отдельных сегментов и времени, потраченного на создание очередей и тому подобное.

"один узел с 1 осколком против одного узла с 5 осколками"

Это зависит от того, каков ваш вариант использования, но вы должны увидеть некоторый прирост производительности для более крупных запросов с 5 осколками.

Я считаю, что это зависит от размера осколков. Например, на эластичном веб-сайте они говорят следующее:

"Запросы большого количества маленьких осколков ускорят обработку каждого осколка, но, поскольку нужно ставить в очередь и обрабатывать намного больше задач, это не обязательно будет быстрее, чем запрос меньшего количества больших осколков. Наличие большого количества маленьких шарды могут также уменьшить пропускную способность, если есть несколько одновременных запросов. "

https://www.elastic.co/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster

На практике я обнаружил, что использование некоторого поискового тестирования с реалистичными запросами помогает мне более определенно определить, как мне следует двигаться дальше с моей архитектурой. Это действительно зависит от варианта использования. Однако, как было сказано ранее, наступает момент, когда вы можете "чрезмерно оптимизировать", и это в конечном итоге сводит на нет любые заметные выгоды, которые вы могли бы получить, выполнив противоположное решение.

Чтобы быть кратким, один осколок на индекс, на узел является хорошей практикой. Но если вам нужно больше, то сначала оцените ваш вариант использования и определите, действительно ли необходимы дополнительные осколки.

Другие вопросы по тегам