내 응용 프로그램은 Windows Web Server의 프로덕션 웹 팜에있는 분산 캐싱 모델에 AppFabric을 사용하고 있습니다. 응용 프로그램은 .net4 C# 웹 응용 프로그램입니다. 우리는 AppFabric에 몇 가지 문제를 겪고 있으며 그와 같은 설정에 관해 몇 가지 질문을합니다.appfabric 문제를 해결하는 데 도움이 필요합니다.
- : 우리가 가진 가장 큰 문제는 웹 (5 개) 서버 중 하나가 다시 시작되는 경우, 다른 서버에있는 사이트는 또한 우리의 이벤트 로그에 나타나는 다음과 같은 appfabric 예외 짧은 시간 동안 아래로 갈 것입니다 메시지 : ErrorCode : SubStatus : 일시적인 오류가 있습니다. 나중에 다시 시도하십시오.
- ErrorCode : SubStatus : 참조 된 지역이 존재하지 않습니다. CreateRegion API를 사용하여 오류를 수정하십시오.
우리는 datacachefactory 객체 등을 만드는 캐시 공급자 래퍼 클래스를 가지고 있으며 웹 응용 프로그램과 appfabric 사이의 중개자로 사용됩니다. 이는 싱글 톤 클래스이므로 클래스의 초기화시 datacachefactory 객체의 인스턴스 하나만 생성됩니다.
위의 두 번째 오류는 내가 우리 코드에서 영역이 Init에서 즉 매우 초기에 만들어졌지만 그 노드가 해당 메모리를 포함하는 클러스터에서 나왔다는 것을 발견했다고 믿습니다 , 위의 오류가 결과입니다. 이 문제를 해결하려면 모든 요청 appfabric에서 영역을 만들어야하지만 존재하지 않는 경우에만 영역을 생성해야합니다.이 소리가 맞습니까?
다른 오류에 관해서는, 나는 그것이 구성 될 수 있다고 생각합니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="dataCache" type="Microsoft.ApplicationServer.Caching.DataCacheSection, Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
</configSections>
<dataCache size="Small">
<caches>
<cache consistency="StrongConsistency" name="App1Cache"
secondaries="1">
<policy>
<eviction type="Lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
<cache consistency="StrongConsistency" name="App2Cache"
secondaries="1">
<policy>
<eviction type="Lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
<cache consistency="StrongConsistency" name="App3Cache"
secondaries="1">
<policy>
<eviction type="Lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
<cache consistency="StrongConsistency" name="default">
<policy>
<eviction type="Lru" />
<expiration defaultTTL="10" isExpirable="true" />
</policy>
</cache>
</caches>
<hosts>
<host replicationPort="22236" arbitrationPort="22235" clusterPort="22234"
hostId="724664608" size="1228" leadHost="true" account="SERVER1\user"
cacheHostName="AppFabricCachingService" name="SERVER1"
cachePort="22233" />
<host replicationPort="22236" arbitrationPort="22235" clusterPort="22234"
hostId="598646137" size="1228" leadHost="true" account="SERVER2\user"
cacheHostName="AppFabricCachingService" name="SERVER2"
cachePort="22233" />
<host replicationPort="22236" arbitrationPort="22235" clusterPort="22234"
hostId="358039700" size="1228" leadHost="true" account="SERVER3\user"
cacheHostName="AppFabricCachingService" name="SERVER3"
cachePort="22233" />
<host replicationPort="22236" arbitrationPort="22235" clusterPort="22234"
hostId="929915039" size="1228" leadHost="false" account="SERVER4\user"
cacheHostName="AppFabricCachingService" name="SERVER4"
cachePort="22233" />
<host replicationPort="22236" arbitrationPort="22235" clusterPort="22234"
hostId="1752630351" size="1228" leadHost="false" account="SERVER5\user"
cacheHostName="AppFabricCachingService" name="SERVER5"
cachePort="22233" />
</hosts>
<advancedProperties>
<securityProperties>
<authorization>
<allow users="everyone" />
</authorization>
</securityProperties>
</advancedProperties>
</dataCache>
</configuration>
참고 :이 클러스터 구성 XML 파일입니다 우리가 appfabric를 사용하여, 그들 모두와 함께 같은 문제를보고 여러 응용 프로그램을 가지고 우리가 설정 캐시하여 여러 있습니다.
<dataCacheClient requestTimeout="15000" channelOpenTimeout="3000" maxConnectionsToServer="1">
<localCache isEnabled="true" sync="TimeoutBased" ttlValue="300" objectCount="10000" />
<clientNotification pollInterval="300" maxQueueLength="10000" />
<hosts>
<host name="SERVER1" cachePort="22233" />
<host name="SERVER2" cachePort="22233" />
<host name="SERVER3" cachePort="22233" />
<host name="SERVER4" cachePort="22233" />
<host name="SERVER5" cachePort="22233" />
</hosts>
<transportProperties connectionBufferSize="131072" maxBufferPoolSize="268435456" maxBufferSize="8388608" maxOutputDelay="2" channelInitializationTimeout="60000" receiveTimeout="600000" /></dataCacheClient>
누구든지 위에 문제를 참조하십시오 그리고 이것은 각 서버에서 응용 프로그램의 Web.config의 항목은
입니까? 보시다시피 3 명의 리드 호스트와 2 명의 보조 호스트가 있습니다.
나는이에서에 다음과 같은 한 몇 가지 질문은 다음과 같습니다
- 나는 로컬 캐시 문제에 대해 읽고 -이의 기술적 장점은 무엇입니까? 즉. 이것은 노드 당 데이터의 로컬 사본을 제공 할 것인가?
- 포트 관련 권장 사항은 무엇입니까? 위의 포트가 정확합니까? 아니면 동일한 포트와 충돌이있을 수 있습니까?
- 3 명의 리드 호스트와 2 명의 보조 호스트가 권장되는 분할입니까? 데이터의 사본이 3 개 있다는 것을 의미합니까?
서버를 다시 시작할 때 우리는 동시에 리드 호스트를 다시 시작하지 않습니다.
의견을 보내 주셔서 감사합니다.