Redis база данных снимков различий или другой предлагаемой БД для мониторинга сети / ресурсов

У меня есть служба мониторинга, которая опрашивает REST API для получения информации о последних ресурсах (список хостов / список лицензий). Кэш службы мониторинга хранит все эти данные в базе данных Redis. Все отлично работает для открытия новых ресурсов. Однако проблема, с которой я сталкиваюсь, это когда хост отключается от сети. Проблема, с которой я сталкиваюсь, заключается в том, что у меня нет возможности узнать, что хост исчез из списка хостов. API REST только дает мне возможность запрашивать список хостов. Один из способов, которым я могу придумать (теоретически), - взять diff из rdb через разные промежутки времени. Однако это не кажется эффективным для меня, и, честно говоря, я не уверен, как бы я сделал это с Redis.

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

1 ответ

Решение

Нет необходимости прибегать к чему-либо кроме самого Redis - он достаточно надежен, чтобы продолжать обслуживать ваши требования, пока вы говорите, что делать (как и любое другое программное обеспечение;)).

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

SET acme.org "some cached value"

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

SADD request:<timestamp> acme.org foo.bar ...

Наборы особенно полезны здесь, потому что вы можете выполнять операции Set, SDIFF а также SINTER и store-варианты в вашем случае, чтобы отслеживать текущие онлайн и удаленные хосты. Например:

MULTI
SINTERSTORE online:<timestamp> request:<timestamp> request:<previous-timestamp>
SDIFFSTORE dropped:<timestamp> request:<timestamp> request:<previous-timestamp>
EXEC

Примечание: поскольку вы кешируете вещи, хорошей практикой является истечение значений (TTL) для всех соответствующих ключей и использование соответствующей политики исключения.

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