2017-12-04 18 views
0

현재 해결해야 할 문제가 거의 없으며 SF 프레임 워크에서 나에게 맞는 솔루션을 찾지 못하는 것 같습니다. 문제는 비록 간단하고로 구성되어Azure 서비스 패브릭 : 파티션 키 ID (Int64RangePartitionInformation)를 사용하여 프록시 만들기

  • 나는이 나를 통해 서비스의 모든 파티션을 찾을 수있는 Int64RangePartition :

    _fabricClient.QueryManager.GetPartitionListAsync (_globalStatsSvcUri)

  • 을 이것은 잘 작동하지만 NamedPartitions 스키마와 달리 Int (원격) 서비스 프록시를 만들어 Int 키를 제공하지 않고 서비스를 사용할 수없는 것처럼 보입니다.

    IGlobalStatsSvc globalStatsSvc = ServiceProxy.Create (_globalStatsSvcUri, partitionKey);

  • 필자의 경우 필자는 병렬 통계 ​​계산 서비스를 확장 할 수 있지만 프로필 ID와의 연결을 유지할 수 있기를 원합니다. 따라서 Int64RangePartition 체계를 선택하고 싶습니다.

  • 그러나 시스템의 전역 통계를 쿼리해야 할 때 모든 파티션을 병렬로 호출 한 다음 Chan 알고리즘을 사용하여 평균, 분산 및 표준을 집계해야합니다.

  • 이렇게하려면 어떤 Int 키가 파티션에 매핑되는지 모른 채 프록시를 만들 수 있어야합니다. 파티션 ID가 필요합니다.

  • 슬프게도 SF에서는 RangedPartition이 아닌 NamedPartition 스키마에서만 SF가 후자를 수행 할 수 있습니다.

누구에게이 사례에 대한 해결책이 있습니까? NamedPartition 체계를 선택하는 것은 효과가있을 수 있지만 통계가 수정되는 경우에는 더 복잡합니다. 적어도 임의의 파티션 이름이 통계적으로 호환 가능해야합니다. 다른 해결책은 내가 해결 한 파티션 ID로 URL을 만들 수 있어야하므로 서비스에 대한 프록시를 "수동으로"만드는 것입니다. 그러나 SF가 제공하는 강력하게 형식화 된 클라이언트가 더 많은 작업을 통과합니다.

RangedPartition 체계와 두 가지 동작을 혼합하는 것이 훨씬 간단합니다. 편집 할 때 어떤 파티션을 수정할 것인지 알 수 있고 집계를 수행해야 할 때 읽기 시간에 모든 파티션을 쿼리 할 수 ​​있습니다.

답변

0

문제점에 대한 해결책을 찾았지만 아직 SF 프레임 워크를 처음 접했지만 서비스의 파티션 목록을 쿼리 할 때 특정 파티션의 하위 및 상위 키 에 대한 정보가 제공됩니다.

따라서 프록시를 통해 서비스를 호출하기 전에 해당 ID 만 전달하면됩니다.

충분히 단순 :

VAR partitionInformation = partition.PartitionInformation Int64RangePartitionInformation 같은;

var partitionKey = new ServicePartitionKey (partitionInformation.LowKey);