Соединение Mongos замедляется, когда осколок становится занятым - PullRequest
0 голосов
/ 29 февраля 2012

Я наблюдаю поведение моих монго, когда драйвер SendMessage для C # занимает значительно больше времени, когда на одном из моих шардов возникает очередь, а монго переадресовывает вызовы на этот шард.Разве SendMessage не должен быть независимым от того, насколько занят шард, и я должен иметь возможность ставить в очередь вещи в зависимости от скорости моего сетевого подключения, а не от того, насколько занят шард?

1 Ответ

1 голос
/ 29 февраля 2012

Разве SendMessage не должен быть независимым от того, насколько занят шард, и я должен иметь возможность ставить в очередь все, основываясь на скорости моего сетевого соединения, а не на том, насколько занят шард?

MongoDB не не использует буфер, но операционная система / сетевой стек имеет его для всего сетевого трафика ( и по сокету / соединению ).

То, о чем вы на самом деле говорите, это сетевой буфер сервера шарда. Вы говорите «Эй, это не имеет значения, если вы заняты, просто примите этот запрос» . Однако сетевой буфер не бесконечно длинный. В какой-то момент буфер будет заполнен, и это соединение просто перестанет принимать больше данных, пока не очистится.

Если вы находитесь в точке, где вы отправляете больше операций / данных, чем может обработать один осколок, у вас есть ограниченное количество опций:

  1. Больше оборудования (disk / mem) => больше осколков => меньше нагрузки на один осколок
  2. Дважды проверьте распределение ключей вашего шарда (, хотя изменить почти невозможно )
  3. Попробуйте ручную блокировку , чтобы облегчить нагрузку

К сожалению, ни одно из этих решений не является простым. MongoDB великолепен тем, что предоставляет возможность разделения данных. Но у него нет автоматизированных функций для обработки «горячих» узлов. Если вы знаете, какие чанки горячие, вы можете разделить их, и балансировщик переместит их, но не существует автоматического процесса, который сделает это за вас, если данные в чанке не изменились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...