2014-02-15 3 views
0

У меня есть рабочий кэш в Лазури. Я планировал переопределить поведение OnStart роли, чтобы предварительно заполнить мой кеш и использовать собственный планировщик, чтобы заполнить кеш из самой рабочей роли. Это не масштабируемо, я знаю это, но мне это не нужно.Может ли Cache WorkerRole добавить к своему кешу?

Итак, мой вопрос: возможно ли это? Я знаю, что могу переопределить OnStart, но как получить доступ к кешу? Из моих других ролей я бы настроить web.config и просто сделать:

DataCacheFactory cacheFactory = new DataCacheFactory(); 
DataCache cache = cacheFactory.GetDefaultCache(); 

Но будет изменяя Web.config создавать проблемы? Я бы сделал это?

<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" /> 

Или я:

<autoDiscover isEnabled="true" identifier="CacheRoleName" /> 

Кто-нибудь делал это раньше, и какие-либо рекомендации о том, как настроить?

ответ

1

Я пробовал это очень быстро, и он работал нормально, добавив пакет Nuget Microsoft.WindowsAzure.Caching к роли Рабочего места, в котором размещен выделенный кеш. Пакет NuGet добавил элемент autoDiscover выше, и я просто обновил идентификатор, чтобы быть именем роли. Я перегрузил OnStart и добавил элементы в кеш, как и в любом другом месте (строки, которые у вас есть в вопросе, получат доступ к кешу по умолчанию).

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

Предупреждение здесь. Вы уже упоминали, что рабочая роль на загрузке OnStart сама по себе является проблемой масштабирования, и это несколько. Во время первоначального развертывания вы не можете гарантировать порядок выполнения ролей и экземпляров в Интернете. Это означает, что пользователи (веб-роли и т. Д.) Кэша могут быть доступны до того, как кластер кэша будет готов к работе. Им нужно будет знать, как бороться с получением пустых значений из кеша или не находить то, что они хотят. Вот почему шаблон Cache Aside используется сильно. Другими словами, не делайте ошибку, полагая, что предварительное заполнение кеша таким образом гарантирует, что данные будут присутствовать в кеше при запросе. Может произойти любое количество вещей, которые сделают это неверным. Если потребители кэша не знают, как получить данные от чего-то другого, кроме кэша, вы можете оказаться в плохой ситуации.

Кроме того, если у вас имеется несколько экземпляров выделенного кэшиста, они будут пытаться запускать этот код каждый раз, когда они запускаются или получаются повторно. Убедитесь, что эти вызовы являются идемпотентными, и если у вас есть значения, которые будут медленно изменяться в вашем кеше, вы не будете непреднамеренно переопределять их значениями «запускать».

+0

Все хорошие советы. Это просто прототип. Необходимо построить быстрые и дешевые, а не масштабируемые для этого, а потребители имеют разумные резервы. Это просто быстрый (и грязный) способ достижения цели. Спасибо за комментарии: D – Faraday