Неравномерное распределение нагрузки upstream hash consistent
Алексей
alexcool на gmail.com
Вс Фев 14 08:46:04 UTC 2021
Здравствуйте.
Создал балансировщик на 10 кэширующих серверов.
Использовал consistent hash по $request_uri
upstream cacheserver {
hash $request_uri consistent;
server 10.0.0.2:8080 max_fails=0;
server 10.0.0.3:8080 max_fails=0;
server 10.0.0.4:8080 max_fails=0;
server 10.0.0.5:8080 max_fails=0;
server 10.0.0.6:8080 max_fails=0;
server 10.0.0.7:8080 max_fails=0;
server 10.0.0.8:8080 max_fails=0;
server 10.0.0.9:8080 max_fails=0;
server 10.0.0.10:8080 max_fails=0;
server 10.0.0.11:8080 max_fails=0;
keepalive_requests 10000;
keepalive 64;
}
Уникальных урлов более 30 миллионов. Размер файлов примерно одинаковый.
Ожидал, что распределение нагрузки между серверами будет примерно
одинаковое. Однако отклонения достигают 23% как по трафику, так и по
объему закэшированных данных.
Поставил php реализацию библиотеки ketama, смоделировал эту ситуацию и
получил похожий результат. На тесте с десятью серверами и миллионом
ключей - отклонения до 27%.
Улучшает ситуацию увеличение количества серверов. При десятикратном
увеличении серверов отклонение составило 8%.
Для выравнивания cache hit rate по серверам скорректировал размеры кэш
зон в соответствии с реальным распределением нагрузки.
С наилучшими пожеланиями.
Алексей.
P.S.: Может быть стоит отразить эту особенность в документации.
Подробная информация о списке рассылки nginx-ru