У меня есть кластер с равномерным распределением данных, который маршрутизируется на основе документа _id
- случайной строки. Во время обычной работы поиск и запись в кластер выполняется с равномерным распределением. Однако при массовом обновлении документов в кластере в течение нескольких минут работают только 1-2 узла.
Вот как выглядит операция массового обновления после нескольких минут выполнения -
q qs node_id
0 200 Wd5JFj4gRk-9pKL_Jubd3w
0 200 FQ86BI1ASUS0tu-XQMuk6w
0 200 dMeO029LSiqjwicm3YP8JA
0 200 b8zAduWdRyO7P9Lz7hSFBQ
0 200 K0o4v_mHRqSRNZWJpzvJPQ
224 200 HN1yQG_hRF2eiCyy_0Dpcg
0 200 GXsc0FKsSUemue-e1Cuzsg
0 200 LcDaZoipQA63UOg0_WHguA
0 200 PdKFe7nLRaCnEqECNLpFvg
0 200 glani3PYQ4qppwzvLQnjIQ
0 200 T9jqycccQ-a03YtUCGVy0w
Как видите, узел HN1y
становится очень активным, когда другие узлы кажутся go тихими. Общая пропускная способность обновлений резко падает, и единственный способ решить ее - приостановить выполнение массового обновления, подождать минуту и возобновить работу. В этот момент мы go выполняем те же этапы равномерного распределения, которые в конечном итоге оказываются на одном узле, выполняющем всю работу.
Как кластер может попасть в такую ситуацию? Это говорит о том, что распределение действительно неравномерное или что-то еще происходит?