Мне нужно разработать серверное приложение (на C #), которое будет считывать строки из простой таблицы (в SQL Server 2005 или 2008 ), выполнять некоторую работу, например, вызывать веб-службу, а затем обновлять строки с результирующим статусом (успех, ошибка ).
Выглядит довольно просто, но все становится сложнее, когда я добавляю следующие реквизиты приложения:
Несколько экземпляров приложения должны работать одновременно в целях балансировки нагрузки и отказоустойчивости. Как правило, приложение развертывается на двух или более серверах и одновременно обращается к одной и той же таблице базы данных. Каждая строка таблицы должна обрабатываться только один раз , поэтому между несколькими экземплярами приложения должен использоваться общий механизм синхронизации/блокировки.
Когда экземпляр приложения обрабатывает набор строк, другие экземпляры приложения не должны ждать его завершения, чтобы прочитать другой набор строк, ожидающих обработки.
В случае сбоя экземпляра приложения не требуется никакого ручного вмешательства в обрабатываемые строки таблицы (, например удаление временного статуса, используемого для блокировки приложения для строк, которые обрабатывал экземпляр, в котором произошел сбой ).
Строки должны обрабатываться в очереди -по моде, т. е. самые старые строки должны обрабатываться первыми.
Хотя эти требования не выглядят слишком сложными, у меня возникли некоторые проблемы с поиском решения.
Я видел подсказки блокировки, такие как XLOCK
, UPDLOCK
, ROWLOCK
, READPAST
и т. д.,но я не вижу комбинации блокирующих подсказок, которая позволила бы мне реализовать эти реквизиты.
Спасибо за любую помощь.
С уважением,
Нуно Геррейро