Как разделить состояние между экземплярами Azure? - PullRequest
11 голосов
/ 22 марта 2011

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

Для обычного веб-приложения я мог бы использовать некоторое хранилище для домена приложениякак AppDomain.SetData или просто статическая переменная.Что вместо этого следует использовать для Azure (кэш? Хранилище BLOB-объектов? Очереди?) И какое решение будет самым быстрым?

Ответы [ 4 ]

8 голосов
/ 22 марта 2011

Для «данных на пользователя» можно использовать объект сеанса ASP.Net.

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

Для «глобальной памяти состояний», тогда я определенно рекомендую кэширование App Fabric или есть несколько предложений сообщества - например, memcached http://www.davidaiken.com/2011/01/11/windows-azure-memcached-plugin/

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

5 голосов
/ 22 марта 2011

AppFabric Cache отлично подходит для обмена данными между ролями (или экземплярами одной роли).Интересной особенностью AppFabric Cache является то, что он применяется не только к состоянию сеанса ASP.NET - просто есть встроенный поставщик состояния сеанса ASP.NET, который находится поверх кэша.

Использование кеша почти тривиально.Вот фрагмент из демонстрационного приложения консоли командной строки:

var dataCacheFactory = new DataCacheFactory();
DataCache dataCache = dataCacheFactory.GetDefaultCache();

Console.Write("Enter a string to cache: ");
string value = Console.ReadLine();

dataCache.Put("key", value);

string response = (string)dataCache.Get("key");
Console.WriteLine("Cached string: " + response);

Использование его в качестве поставщика состояния сеанса требует нулевого изменения кода - все это управляется app.config / web.config.

vtortola хорошо говорит о том, что AppFabric Cache находится в CTP, но мы должны это увидеть в ближайшем будущем.

Хранение таблиц также будет работать, в зависимости от сложности ваших запросов.Похоже, ваши запросы были бы относительно простыми.

Поскольку цены на AppFabric Cache еще не объявлены, это может повлиять на ваше решение, скажем, на Table Storage, который выполняет $ 0,15 / ГБ плюс связанные транзакции (хотятранзакции вряд ли окажут какое-либо заметное влияние на ваши расходы (0,01 долл. США на 10 000 транзакций).

РЕДАКТИРОВАТЬ 7 июня 2012 г. Информация о ценах изменилась с момента первоначального ответа:

  • Служба кэширования находится в производстве и начинается с 45 долларов США за 128 МБ (полная информация о ценах здесь ).
  • Транв настоящее время сакции составляют 0,01 долл. США на 100 000 транзакций, при этом объем хранилища начинается с 0,125 долл. США за ГБ и уменьшается в зависимости от количества (подробнее см. здесь ).
  • Теперь появилась новая возможность кэширования, которая может быть включена вэкземпляры вашей веб- или рабочей роли с использованием процента доступной оперативной памяти и стоимостью ZERO.Вы также можете создать независимую роль кэша.Оба из них поддерживаются с новым SDK v1.7.Скотт Гатри написал в блоге о новых функциях (включая Cache).
3 голосов
/ 11 августа 2016

AppFabric Cache - это устаревший сервис ... для новых разработок используйте Azure Redis Cache.

3 голосов
/ 22 марта 2011

Я думаю, что Table Storage подойдет, но, возможно, служба кэширования AppFabric будет лучше подходить в зависимости от того, что вам нужно, но помните, что последний из них все еще находится в CTP.

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

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...