App Fabric Cache как очередь

У меня есть служба.net WCF (размещенная на IIS 7.5), которая выполняет большое количество вызовов хранимой процедуры SQL Server 2008 r2, которая вставляется в несколько таблиц. Клиенты этой службы WCF работают круглосуточно, хотя ночью обрабатываются меньшие объемы запросов. В большинстве случаев это работает нормально, но раз в месяц должно выполняться задание SSIS, которое выполняет большие объемы вставок в одну и ту же таблицу. Когда задание служб SSIS выполняется (занимает около 4 часов), это вызывает проблемы для службы WCF, что приводит к тайм-аутам.

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

Итак, мне нужно придумать некую форму кэша / очереди, которая не попадает в SQL Server. Этот кеш также должен быть устойчивым и масштабируемым. Кэш App Fabric - лучший инструмент для этого? Я быстро взглянул на API и не смог найти очевидный способ использовать его как очередь, метод для получения из кэша, кажется, требует ключ - который не будет известен новым сервис для извлечения из кэша и записи в постоянное хранилище SQL (после завершения задания SSIS).

В прошлом я использовал MSMQ для решения аналогичной проблемы, но вся документация по этому вопросу кажется очень старой, поэтому, возможно, в настоящее время предпочтительным выбором является App Fabric Cache?

Спасибо,

Роб.

4 ответа

Решение

Спасибо за ваш вклад.

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

Я вижу два варианта: а) Попросить клиентов использовать NetMsmqBinding. Однако обратите внимание, что Windows Server AppFabric сходится с Azure AppFabric, и есть другие варианты. В частности, вы могли бы взглянуть на Service Bus для Windows Server v1.0, который является бесплатным расширением, чтобы сделать Win Server более совместимым с платформой Azure. Независимо от того, используется ли служебная шина Windows Server или MSMQ, это можно сделать довольно легко, если вы будете уведомлены сообществом, если вы не слишком знакомы с параметрами.

б) Использовать Sql Server Service Broker. Это система обмена сообщениями, встроенная в SQL Server, которая позволит вам вызывать sp асинхронно.

Я полагаю, что вы могли бы использовать AppFabric для постановки в очередь записи / вставки в SQL, но я не думаю, что это было предназначено для AppFabric.

Способ, которым вы могли бы сделать это, хотя с AppFabric:

  1. Дайте каждому написать / вставить случайный ключ.
  2. Создайте индексный объект, который хранит ключи для ваших вставок.
  3. Когда вам нужно выполнить массовую вставку, вы можете просто вызвать GET, который вернет массив ключей, используемых для вставок.
  4. Переберите список ключей и начните вставлять.

Это больше похоже на работу для MSMQ - и это была первая технология, которая пришла мне в голову, когда я начал читать ваш вопрос.

Вы также можете рассмотреть некоторые альтернативы с открытым исходным кодом, такие как RabbitMQ или ActiveMQ.

Ну, я подумала о Redis, когда впервые прочитала вопрос. Он чертовски прост в настройке (по сравнению с AppFabric) и обладает проверенной масштабируемостью. Вы можете использовать его для распределенного кэширования, или, как в этом случае, вы можете использовать встроенную функциональность очередей. Не нужно добавлять больше инструментов и сложности в смесь.

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