Introdução às coleções confiáveis nos serviços stateful do Azure Service Fabric
As Coleções Confiáveis permitem que você escreva aplicativos em nuvem altamente disponíveis, escaláveis e de baixa latência como se estivesse escrevendo aplicativos de um único computador. As classes no namespace Microsoft.ServiceFabric.Data.Collections fornecem um conjunto de coleções que automaticamente tornam seu estado altamente disponível. Os desenvolvedores precisam programar apenas para as APIs de Coleção Confiável e permitir que as Coleções Confiáveis gerenciem o estado replicado e local.
A principal diferença entre as Coleções Confiáveis e outras tecnologias de alta disponibilidade (como Redis, serviço de Tabela do Azure e serviço de Fila do Azure) é que o estado é mantido localmente na instância de serviço e, ao mesmo tempo, é altamente disponível. Isto significa que:
- Todas as leituras são locais, o que resulta em leituras de baixa latência e alta taxa de transferência.
- Todas as gravações incorrem no número mínimo de E/S de rede, o que resulta em gravações de baixa latência e alta taxa de transferência.
Reliable Collections pode ser pensado como a evolução natural das classes System.Collections : um novo conjunto de coleções que são projetadas para a nuvem e aplicativos multi-computador sem aumentar a complexidade para o desenvolvedor. Como tal, as Coleções Fiáveis são:
- Replicado: as alterações de estado são replicadas para alta disponibilidade.
- Assíncrono: as APIs são assíncronas para garantir que os threads não sejam bloqueados ao incorrer em E/S.
- Transacional: as APIs utilizam a abstração de transações para que você possa gerenciar várias coleções confiáveis dentro de um serviço facilmente.
- Persistente ou volátil: os dados podem ser mantidos em disco para durabilidade contra interrupções em grande escala (por exemplo, uma queda de energia do datacenter). Algumas Coleções Confiáveis também suportam um modo volátil (com Advertências) onde todos os dados são mantidos na memória, como um cache replicado na memória.
Coleções confiáveis fornecem fortes garantias de consistência prontas para facilitar o raciocínio sobre o estado do aplicativo. Uma forte consistência é alcançada garantindo que as confirmações de transação terminem somente depois que toda a transação tiver sido registrada em um quórum majoritário de réplicas, incluindo a primária. Para obter uma consistência mais fraca, os aplicativos podem confirmar o retorno ao cliente/solicitante antes que a confirmação assíncrona retorne.
As APIs de coleções confiáveis são uma evolução das APIs de coleções simultâneas (encontradas no namespace System.Collections.Concurrent ):
- Assíncrono: retorna uma tarefa uma vez que, ao contrário das coleções simultâneas, as operações são replicadas e persistidas.
- Sem parâmetros de saída: Usa
ConditionalValue<T>
para retornar umbool
e um valor em vez de parâmetros de saída.ConditionalValue<T>
é comoNullable<T>
, mas não requer T para ser uma estrutura. - Transações: usa um objeto de transação para permitir que o usuário agrupe ações em várias Coleções Confiáveis em uma transação.
Hoje, Microsoft.ServiceFabric.Data.Collections contém três coleções:
- Dicionário confiável: representa uma coleção replicada, transacional e assíncrona de pares chave/valor. Semelhante a ConcurrentDictionary, tanto a chave quanto o valor podem ser de qualquer tipo.
- Fila confiável: representa uma fila FIFO (first-in, first-out) rígida replicada, transacional e assíncrona. Semelhante a ConcurrentQueue, o valor pode ser de qualquer tipo.
- Fila simultânea confiável: representa uma fila de pedidos de melhor esforço replicada, transacional e assíncrona para alta taxa de transferência. Semelhante ao ConcurrentQueue, o valor pode ser de qualquer tipo.