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:
- Дайте каждому написать / вставить случайный ключ.
- Создайте индексный объект, который хранит ключи для ваших вставок.
- Когда вам нужно выполнить массовую вставку, вы можете просто вызвать GET, который вернет массив ключей, используемых для вставок.
- Переберите список ключей и начните вставлять.
Это больше похоже на работу для MSMQ - и это была первая технология, которая пришла мне в голову, когда я начал читать ваш вопрос.
Вы также можете рассмотреть некоторые альтернативы с открытым исходным кодом, такие как RabbitMQ или ActiveMQ.
Ну, я подумала о Redis, когда впервые прочитала вопрос. Он чертовски прост в настройке (по сравнению с AppFabric) и обладает проверенной масштабируемостью. Вы можете использовать его для распределенного кэширования, или, как в этом случае, вы можете использовать встроенную функциональность очередей. Не нужно добавлять больше инструментов и сложности в смесь.