Можно / нужно использовать объединительную панель SignalR для создания распределенного кеша?

Наше веб-приложение использует кэширование в памяти (кэширование данных приложения) для повышения пропускной способности, так что часто запрашиваемые данные не нужно загружать из базы данных (SQL Server) для каждого запроса. Потенциально он будет развернут в веб-ферме, поэтому нам нужно решить классическую проблему синхронизации кешей всех узлов. Итак, нам нужен распределенный кеш.

Легко доступные решения - NCache и REDIS (и, возможно, другие). Однако, поскольку мы уже используем SignalR Backplane для передачи изменений в нашем наборе данных службе Windows (и клиентам браузера), мне интересно, можно ли ее использовать для реализации распределенного кеша.

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

Думаю, мои самые большие вопросы: есть ли в этом смысл? И достаточно ли надежной объединительной платы SignalR, чтобы гарантировать, что никакие события не будут потеряны, что приведет к устареванию кешей? Или это архитектурное злоупотребление?


person Dejan    schedule 24.03.2016    source источник
comment
Я задал связанный и более конкретный вопрос здесь: http://stackoverflow.com/questions/36239434/how-reliable-is-signalr-backplane   -  person Dejan    schedule 28.04.2016


Ответы (1)


Signalr предназначен для решения в реальном времени, а не для статики.

В своем решении вы выберете данные для одной службы и отправите их в другую службу по объединительной плате. Тогда что ? Возможно, вы сохраните это в памяти. Что произойдет, если одна из служб перезапустится? Данные уйдут. С Redis вы никогда не столкнетесь с этой проблемой. Кроме того, вы будете использовать локальную память для этих данных.

И как вы будете управлять истечением срока? Кроме того, вы приложите усилия для реализации этой системы кеширования с помощью signalr.

Я не предлагаю вам использовать для этого объединительную плату сигнального устройства. Придерживайтесь Redis или аналогичных технологий.

person Erkan Demirel    schedule 24.03.2016
comment
Я не отправляю данные из одной службы в другую. Я просто хочу использовать систему, которая уже отправляет события, связанные с изменением данных. Был бы только еще один подписчик: само веб-приложение, чтобы оно знало, когда очищать кеш. Я не уверен, почему вы говорите, что для распространения сообщений нужна другая технология? SignalR делает это. - person Dejan; 25.03.2016
comment
Вы говорите о сигнализаторе как о объединительной плате или о сигнальной объединительной плате? Signalr отправляет сообщения клиентам или клиентам, отправляющим на серверы. Таким образом, на одном сервере вы отправляете сообщение клиентам, но если вы хотите получить клиентов других серверов, этому сигнализатору сообщений нужна объединительная плата. Я хотел это сказать. Но если вы говорите о сигнализаторе как о объединительной плате, это не связано с вашим вопросом. - person Erkan Demirel; 25.03.2016
comment
Я говорю о объединительной плате SignalR, как описано здесь: asp.net / signalr / overview / performance / scaleout-with-sql-server. Насколько я понимаю, это помогает мне распределять сообщения по отдельным процессам (IIS или Windows Service). - person Dejan; 25.03.2016
comment
Да, он разделяет сообщения между серверами (сервер сигнализации). В любом случае я удалю лишнюю информацию, если она сделает ответ неясным. - person Erkan Demirel; 25.03.2016