Nano Hash - криптовалюты, майнинг, программирование

В пуле не осталось соединения для кластерных слотов кластера Redis при использовании библиотеки PRedis в Lumen

У моей команды есть один проект, использующий Lumen (это микрофреймворк, основанный на Laravel). Мы используем Predis для подключения нашего кластера Redis и выполнения на нем некоторого задания очереди. Но иногда (мы не можем воспроизвести) система выдает исключение «Нет соединений в пуле для CLUSTER SLOTS в ..».

[2017-08-17 14:05:35] bookmark.ALERT: Predis\ClientException: No connections 
left in the pool for `CLUSTER SLOTS` in 
....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:232 
Stack trace: 
#0 ....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(260): 
Predis\Connection\Aggregate\RedisCluster->queryClusterNodeForSlotsMap(NULL) 
#1 ....../vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php(560): 
Predis\Connection\Aggregate\RedisCluster->askSlotsMap() 
...

Мы долго расследовали. Мы думаем, что проблема может быть в библиотеке Predis для Laravel и в том, как она поддерживает пул соединений. Это может быть связано с тем, что кластер Redis по какой-то причине закрывает соединение, но библиотека Predis не открывает соединение повторно при попытке установить соединение.

и вот наша структура настройки кластера:

'redis' => [
'client' => 'predis',

'clusters' => [
    // Setting for Queue
    'default' => [
        'options' => [ 'cluster' => 'redis' ],
        [
            'host' => 'xxx',
            'password' => 'xxx',
            'port' => 'xxx',
            'timeout' => 0.15,
            'read_write_timeout' => 0.15
        ],
        [
            'host' => 'xxx',
            'password' => 'xxx',
            'port' => 'xxx',
            'timeout' => 0.15,
            'read_write_timeout' => 0.15
        ],
        ...
    ]
]
]

У кого-нибудь есть идеи по этому поводу? Большое спасибо!


Ответы:


1

Поскольку вы видите эти исключения лишь время от времени, значения тайм-аута в вашей конфигурации 'redis' могут быть слишком низкими. Я могу только догадываться, что всплески трафика в сети между серверами PHP и Redis замедляют связь настолько, что это приводит к тайм-ауту клиентских подключений (через 0.15 секунды, как настроено).

Клиент Predis выдает В пуле не осталось соединений для `CLUSTER SLOTS`, когда ему не удается получить карту слотов из всех настроенных Redis. hosts (потому что, по-видимому, все они истекли по тайм-ауту). Вы можете воспроизвести это поведение, установив очень маленькое значение времени ожидания, например 0.0001.

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

20.09.2017
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..