2014-02-15 3 views
0

저는 Azure에 Cache WorkerRole을 가지고 있습니다. 롤의 OnStart 동작을 재정의하여 캐시를 미리 채우고 자체 스케줄러를 사용하여 작업자 역할 자체에서 캐시를 채울 계획이었습니다. 이것은 확장 가능하지 않습니다. 저는 이것을 알고 있지만, 필요하지 않습니다.캐시 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을 전용 캐시를 호스팅하는 Worker 역할에 추가하여 정상적으로 작동했습니다. NuGet 패키지는 위의 autoDiscover 요소를 추가했으며 단순히 식별자를 역할 이름으로 업데이트했습니다. OnStart를 무시하고 다른 곳과 마찬가지로 항목을 캐시에 추가했습니다. 질문에 대한 내용은 기본 캐시에 액세스 할 수있게 해줍니다.

프로젝트에 추가 한 웹 역할에서 캐시의 데이터를 읽을 수있었습니다.

여기에주의 할 단어. 이미 OnStart 로딩에 대한 작업자 역할은 스케일링 문제이며, 다소 있습니다. 처음 배포하는 경우 역할 및 인스턴스가 온라인 상태가되는 순서를 보장 할 수 없습니다. 즉, 캐시 클러스터가 준비되기 전에 캐시의 사용자 (웹 역할 등)가 사용 가능할 수 있습니다. 그들은 캐시에서 빈 값을 얻는 방법을 다루거나 그들이 원하는 것을 찾지 않아야합니다. 이것이 Cache Aside 패턴이 많이 사용되는 이유입니다. 즉,이 방식으로 캐시를 미리 채우는 것이 요청 될 때 캐시에 데이터가 존재하는지 확인하는 실수를 저 지르지 마십시오. 그것이 사실이 아니게 만들 수있는 많은 것들이 발생할 수 있습니다. 캐시 소비자가 캐시 이외의 다른 곳에서 데이터를 가져 오는 방법을 모르는 경우 나쁜 상황이 발생할 수 있습니다.

또한 전용 캐시 작업자 인스턴스가 두 개 이상이면 시작하거나 재활용 할 때마다이 코드를 실행하려고 시도합니다. 이러한 호출이 멱등한지, 캐시에서 천천히 바뀔 값이있는 경우 실수로 "시작"값으로 값을 무시하지 않는지 확인하십시오.

+0

좋은 조언. 이것은 프로토 타입을위한 것입니다. 이 제품을 위해 빠르고 저렴하게 확장 할 필요가 없으며 소비자는 현명한 후퇴를 필요로합니다. 이것은 목표를 달성하기위한 단순한 (그리고 더러운) 방법 일뿐입니다. 의견을 주셔서 감사합니다 : D 조 – Faraday

관련 문제