2016-12-19 11 views
0

У меня есть веб-приложение C#. У меня есть несколько баз данных, где данные одинаковые, поэтому я могу использовать метод Round Robin для распространения вызовов базы данных.C# REST Web APP - Круглые Робин звонки в базы данных

Я планирую читать в каждой строке подключения и перебирать каждую БД и возвращать данные для первого прохода.

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

База кажется излишеством для этого, так что я мог использовать static List для отслеживания этого и блокировки чтения и обновления списка?

ответ

0

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

Здесь вы пытаетесь реализовать балансировку сетевой нагрузки. Вы столкнетесь с несколькими проблемами. IIS с радостью разворачивает несколько потоков вызовов на ваш сайт, если он получает несколько запросов до того, как будет выполнен первый. Во-вторых, если ваш веб-сайт находится в WebGarden (несколько экземпляров IIS на одном компьютере) или запускается как WebFarm (несколько экземпляров ОС) или находится на Azure или какой-либо другой облачной платформе, тогда эти множественные события вашего веб-вызова могут даже не быть на той же машине (или виртуальной машине), поэтому вам нужно быть понятным, что практически невозможно создать настоящую цикличную серию обращений к базе данных на правильно масштабируемом веб-сайте.

Я не уверен, что создание новой точки синхронизации между всеми вашими веб-потоками - хорошая идея для масштабируемости. Round Robin также не является наилучшим использованием ресурсов - если вы хотите, чтобы ваш сайт работал как можно быстрее, используя как можно меньше ресурсов (как правило, почему система NLB внедрена), используйте подход на основе пула для аренды открытой базы данных а не повторять набор открытых подключений к базе данных. Вызывающий код получает следующее соединение, которое не было выпущено обратно в пул.