Я пытаюсь переварить архитектурные шаблоны Service Fabric и их лучшие практики.
вариант использования:
Я определяю службу с отслеживанием состояния с 26 разделами, и в каждом разделе я храню слова с одинаковыми первыми буквами.
- 1) Означает ли это, что у меня на самом деле есть 26 экземпляров службы с отслеживанием состояния?
- 2) Находясь за пределами службы с отслеживанием состояния, т. е. в вызывающем объекте, я создаю URI для своего клиента структуры служб, указывая идентификатор раздела, с которым я хочу, чтобы клиент работал. Означает ли это, что когда я нахожусь в контексте службы с отслеживанием состояния (т. е. экземпляр службы, созданный и вызываемый службой с отслеживанием состояния), я не могу ссылаться на другие разделы?
3) Верно ли сказать, что служба с отслеживанием состояния — это единица работы, которой нужно знать, с каким разделом работать, и которая не может принимать решения самостоятельно? Здесь я имею в виду множество примеров, когда внутри метода RunAsync службы с отслеживанием состояния есть вызовы базового надежного хранилища, например, код, взятый из этого поста:
protected override async Task RunAsync(CancellationToken cancelServicePartitionReplica) { var myDictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<string, int>> ("myDictionary"); var partition = base.ServicePartition.PartitionInfo.Id; byte append = partition.ToByteArray()[0]; while (!cancelServicePartitionReplica.IsCancellationRequested) { // Create a transaction to perform operations on data within this partition's replica. using (var tx = this.StateManager.CreateTransaction()) { var result = await myDictionary.TryGetValueAsync(tx, "A"); await myDictionary.AddOrUpdateAsync(tx, "A", 0, (k, v) => v + append); ServiceEventSource.Current.ServiceMessage(this, $"Append {append}: {(result.HasValue ? result.Value : -1)}"); await tx.CommitAsync(); } // Pause for 1 second before continue processing. await Task.Delay(TimeSpan.FromSeconds(3), cancelServicePartitionReplica); } }
Итак, вероятно, мое утверждение 3) неверно. Служба с отслеживанием состояния может вызывать свое внутреннее хранилище без того, чтобы кто-то (клиент службы) вызывал ее извне и предоставлял информацию для точного раздела. Но тогда как приведенный выше код решает, в какой раздел поместить свои данные? И, самое главное, как позже запросить эти данные через клиент службы, который должен предоставить точный идентификатор раздела?