Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Orleans é uma estrutura multiplataforma projetada para simplificar a criação de aplicativos distribuídos. Seja dimensionando de um único servidor para milhares de aplicativos baseados em nuvem, Orleans fornece ferramentas para ajudar a gerenciar as complexidades dos sistemas distribuídos. Ele estende conceitos familiares de C# para ambientes multisservidor, permitindo que os desenvolvedores se concentrem na lógica do aplicativo.
Aqui está o que Orleans oferece:
- Foi projetado para escalar de forma elástica. Adicione ou remova servidores e Orleans ajusta de acordo para manter a tolerância a falhas e a escalabilidade.
- Ele simplifica o desenvolvimento de aplicativos distribuídos com um conjunto comum de padrões e APIs, tornando-o acessível até mesmo para aqueles novos em sistemas distribuídos.
- É nativo da cloud e funciona em plataformas onde o .NET é suportado — Linux, Windows, macOS e outras.
- Ele dá suporte a opções de implantação modernas, como Kubernetes, Serviço de Aplicativo do Azure e Aplicativos de Contêiner do Azure.
Orleans é frequentemente referido como "Distributed .NET" devido ao seu foco na criação de serviços resilientes e escaláveis nativos da nuvem.
O que há de novo na Orleans versão 10.0
Orleans O 10.0 introduz várias novas funcionalidades e melhorias:
- Orleans Dashboard: Um painel integrado para monitorização em tempo real do seu Orleans cluster, grãos e silos.
- Fornecedores de Redis: Provedores confiáveis de Redis para agrupamento, persistência e lembretes.
- Suporte a CancellationToken para alvos do sistema: Suporte alargado a tokens de cancelamento em todo o framework.
Sugestão
Orleans O 10.0 tem como alvo .NET 8.0, .NET 9.0 e .NET 10.0.
O que há de novo na Orleans versão 9.x
Orleans O 9.x introduz várias funcionalidades significativas:
- Suporte total ao CancellationToken: Os métodos Grain suportam agora totalmente os tokens de cancelamento.
- Strong-Consistency Grain Directory: Um novo diretório distribuído em memória com fortes garantias de consistência.
- Descarte de Ativação com Base na Memória: Desativação automática dos grãos sob pressão de memória.
- Cluster de Testes In-Process: Infraestrutura de testes simplificada para Orleans aplicações.
- Protocolo de Adesão Melhorado: Deteção de falhas mais rápida (90 segundos contra 10 minutos nas versões anteriores).
- Reequilíbrio de Ativação: Reequilíbrio automático de grãos entre silos (estável, experimental em 8.2).
- Alteração de Colocação Padrão (9.2): A estratégia de colocação por defeito mudou de Aleatória para Otimizada para Recursos.
Sugestão
Orleans O 9.x tem como alvo .NET 8.0 e .NET 9.0.
O que há de novo na Orleans versão 8.x
Orleans O 8.x introduziu várias funcionalidades importantes:
- Integração com o .NET Aspire: Suporte de primeira classe para o .NET Aspire para desenvolvimento simplificado na cloud-native.
- Alocação Otimizada de Recursos: Uma nova estratégia de alocação baseada na utilização da CPU e da memória.
- Repartição de Ativação (8.2, Experimental): Redistribuição automática dos grãos para melhorar o desempenho.
-
Nova API Grain Timer (8.2):RegisterGrainTimer substitui o método obsoleto
RegisterTimer. - MessagePack Serializer (8.2): Uma nova opção de serialização de alto desempenho.
- Cassandra Clustering Provider (8.2): Suporte para o Apache Cassandra como fornecedor de clustering.
Sugestão
Orleans O 8.x tem como alvo o .NET 8.0.
Novidades na Orleans 7.0
Orleans A 7.0 foi um lançamento importante com melhorias significativas:
- APIs simplificadas: Padrões de construtores simplificados usando UseOrleans e UseOrleansClient.
- Geradores de Código-Fonte: Substituíram a geração de código por geradores de código-fonte para melhor desempenho em tempo de construção.
- Novo Sistema de Serialização: Um novo framework de serialização de alto desempenho e tolerante a versões.
- IAsyncEnumerable Support (7.2): Streaming de respostas dos métodos de grain.
- Timeouts por chamada (7.2.2): Especifique tempos limite em chamadas individuais de grain.
- Cosmos DB Providers (7.2): O Azure Cosmos DB fornece suporte para o clustering, a persistência e os lembretes.
Sugestão
Orleans A 7.0 tem como alvo .NET 7.0 e posteriores.
Orleans 3.x (Legado)
Orleans A 3.x é uma versão legada. Para novos projetos, considere atualizar para Orleans a versão 7.0 ou posterior para tirar partido de melhor desempenho, APIs simplificadas e novas funcionalidades.
Principais diferenças em relação às versões mais recentes:
- Usa ClientBuilder e SiloHostBuilder em vez do padrão unificado UseOrleans .
- É necessário
ConfigureApplicationParts()para a análise de montagem. - Usa o gerador de código antigo em vez dos geradores de código-fonte.
Para orientações sobre migração, consulte o Guia de Migração.
O modelo do ator
Orleans baseia-se no modelo do ator. Originado no início da década de 1970, o modelo de ator é agora um componente central do Orleans. No modelo de ator, cada ator é um objeto leve, simultâneo e imutável que encapsula um pedaço de estado e o comportamento correspondente. Os atores se comunicam exclusivamente usando mensagens assíncronas. Orleans inventou notavelmente a abstração do Ator Virtual , onde os atores existem perpetuamente.
Observação
Os atores são entidades puramente lógicas que sempre existem, virtualmente. Um ator não pode ser explicitamente criado nem destruído, e sua existência virtual não é afetada pela falha de um servidor que o executa. Como os atores sempre existem, eles são sempre endereçáveis.
Essa nova abordagem ajuda a criar uma nova geração de aplicativos distribuídos para a era da nuvem. O Orleans modelo de programação doma a complexidade inerente a aplicativos distribuídos altamente paralelos sem restringir recursos ou impor restrições.
Para obter mais informações, consulte Orleans: Virtual Actors via Microsoft Research. Um ator virtual é representado como um grão de Orleans.
O que são grãos?
O grão é um dos vários Orleans primitivos. No contexto do modelo de ator, um grão é um ator virtual. O elemento fundamental em qualquer aplicação Orleans é um grão . Grãos são entidades que compreendem identidade, comportamento e estado definidos pelo usuário. Considere a seguinte representação visual de um grão:
As identidades de grãos são chaves definidas pelo usuário, tornando os grãos sempre disponíveis para invocação. Outros grãos ou qualquer número de clientes externos podem invocar grãos. Cada grão é uma instância de uma classe que implementa uma ou mais das seguintes interfaces:
- IGrainWithGuidKey: Interface de marcação para grãos com teclas Guid.
-
IGrainWithIntegerKey: Interface de marcação para grãos com teclas
Int64. -
IGrainWithStringKey: Interface de marcação para grãos com teclas
string. - IGrainWithGuidCompoundKey: Interface de marcação para grãos com chaves compostas.
- IGrainWithIntegerCompoundKey: Interface de marcação para grãos com chaves compostas.
Os grãos podem ter dados de estado voláteis ou persistentes armazenados em qualquer sistema de armazenamento. Como tal, os grãos particionam implicitamente os estados do aplicativo, permitindo escalabilidade automática e simplificando a recuperação de falhas. Orleans Mantém o estado de grão na memória enquanto o grão está ativo, levando a menor latência e menos carga nos armazenamentos de dados.
O Orleans tempo de execução instancia automaticamente os grãos sob demanda. Os grãos não usados por um tempo são automaticamente removidos da memória para liberar recursos. Esta remoção é possível devido à sua identidade estável, permitindo a invocação de grãos quer estejam carregados na memória ou não. Isso também permite a recuperação transparente de falhas, porque o chamador não precisa saber em qual servidor um grain é instanciado a qualquer momento. Os grãos têm um ciclo de vida gerido, com o tempo de execução Orleans responsável por ativar/desativar e colocar/localizar os grãos conforme necessário. Isso permite escrever código como se todos os grãos estivessem sempre na memória.
O que são silos?
Um silo é outro exemplo de um Orleans primitivo. Um silo abriga um ou mais grãos. O Orleans runtime implementa o modelo de programação para aplicações.
Normalmente, um grupo de silos é executado como um cluster para escalabilidade e tolerância a falhas. Quando executados como um cluster, os silos coordenam-se para distribuir o trabalho e detetar e recuperar de falhas. O tempo de execução permite que os grãos hospedados no cluster se comuniquem como se estivessem dentro de um único processo. Para ajudar a visualizar a relação entre clusters, silos e grãos, considere o diagrama a seguir:
O diagrama anterior mostra a relação entre aglomerados, silos e grãos. Pode haver qualquer número de aglomerados, cada aglomerado tem um ou mais silos e cada silo tem um ou mais grãos.
Além do modelo de programação principal, os silos fornecem grãos com serviços de tempo de execução, como temporizadores, lembretes (temporizadores persistentes), persistência, transações, fluxos e muito mais. Para obter mais informações, consulte O que pode ser feito com Orleans?.
Aplicações web e outros clientes externos chamam grãos no cluster usando a biblioteca do cliente, que gerencia automaticamente a comunicação de rede. Os clientes podem também ser hospedados juntamente no mesmo processo com silos para simplificar.
O que pode ser feito com Orleans?
Orleans é uma estrutura para criar aplicativos nativos da nuvem e deve ser considerada ao criar aplicativos .NET que possam eventualmente precisar ser dimensionados. Existem aparentemente infinitas maneiras de usar Orleans, mas as seguintes são algumas das mais comuns: jogos, bancos, aplicativos de bate-papo, rastreamento GPS, negociação de ações, carrinhos de compras, aplicativos de votação e muito mais. A Microsoft usa Orleans no Azure, Xbox, Skype, Halo, PlayFab, Gears of War e muitos outros serviços internos. Orleans tem muitos recursos tornando-o fácil de usar para várias aplicações.
Persistência
Orleans Fornece um modelo de persistência simples que garante a disponibilidade do estado antes de processar uma solicitação e manter a consistência. Os grãos podem ter vários objetos de dados persistentes nomeados. Por exemplo, um pode ser chamado de "perfil" para o perfil de um usuário e outro de "inventário" para seu inventário. Esse estado pode ser armazenado em qualquer sistema de armazenamento.
Enquanto um processo está a correr, Orleans mantém o estado na memória para responder a solicitações de leitura sem acessar o armazenamento. Quando o grão atualiza seu estado, a chamada IStorage.WriteStateAsync garante que o armazenamento de suporte seja atualizado quanto à durabilidade e consistência.
Para obter mais informações, consulte Persistência de grãos.
Temporizadores e lembretes
Os lembretes são um mecanismo de agendamento durável para grãos. Use-os para garantir que uma ação seja concluída em um ponto futuro, mesmo que o grão não esteja ativado no momento. Os temporizadores são a contrapartida não durável dos lembretes e podem ser usados para eventos de alta frequência que não exigem confiabilidade.
Para obter mais informações, consulte temporizadores e lembretes.
Colocação flexível de grãos
Quando um grão é ativado no Orleans, o sistema decide em qual servidor (silo) ativá-lo. Este processo é chamado de colocação de grãos.
O processo de colocação em Orleans é totalmente configurável. Escolha entre políticas de posicionamento prontas para uso, como aleatórias, locais preferenciais e baseadas em carga, ou configure a lógica personalizada. Isso permite total flexibilidade na decisão de onde os grãos são criados. Por exemplo, coloque grãos em um servidor perto dos recursos com os quais eles precisam operar ou outros grãos com os quais eles se comunicam.
Para mais informações, consulte colocação de grãos.
Versionamento de grãos e clusters heterogêneos
Atualizar com segurança os sistemas de produção, levando em consideração as alterações, pode ser um desafio, especialmente em sistemas com estado. Para dar conta disso, as interfaces grain podem ser versionadas em Orleans.
O cluster mantém um mapeamento de quais implementações de grãos estão disponíveis em quais silos e suas versões. O tempo de execução utiliza estas informações de versão juntamente com estratégias de alocação para tomar decisões quando encaminha chamadas para instâncias. Além de atualizar com segurança um grão versionado, isso também permite clusters heterogêneos onde silos diferentes têm diferentes conjuntos de implementações de grãos disponíveis.
Para obter mais informações, consulte controle de versão de grãos.
Trabalhadores apátridas
Os trabalhadores apátridas são grãos especialmente marcados sem estado associado que podem ser ativados em vários silos simultaneamente. Isso permite um maior paralelismo para funções sem estado.
Para obter mais informações, consulte grãos de trabalhador sem estado.
Filtros de chamada de grão
Um filtro de chamada de grãos é uma lógica comum a muitos grãos. Orleans suporta filtros para chamadas de entrada e saída. Os usos comuns incluem autorização, registro em log e telemetria e tratamento de erros.
Contexto da solicitação
Passe metadados e outras informações com uma série de solicitações usando o contexto da solicitação. Use o contexto de solicitação para armazenar informações de rastreamento distribuídas ou quaisquer outros valores definidos.
Transações ACID distribuídas
Além do modelo de persistência simples descrito acima, os grãos podem ter estado transacional. Vários grãos podem participar de transações ACID juntos, independentemente de onde seu estado é armazenado. As transações são Orleans distribuídas e descentralizadas (ou seja, sem gerente ou coordenador central de transações) e têm isolamento serializável.
Para obter mais informações sobre transações, consulte Transactions.
Fluxos
Os fluxos ajudam a processar uma série de itens de dados quase em tempo real. Orleans os fluxos são geridos; os fluxos não precisam ser criados ou registados antes que um grão ou cliente publique ou subscreva. Isto permite uma maior dissociação entre produtores e consumidores de fluxos e das infraestruturas.
O processamento de fluxo é confiável: os grãos podem armazenar pontos de verificação (cursores) e redefinir para um ponto de verificação armazenado durante a ativação ou em qualquer momento subsequente. Os fluxos suportam a entrega em lote de mensagens aos consumidores para melhorar a eficiência e o desempenho da recuperação.
Os fluxos são apoiados por serviços de enfileiramento, como Hubs de Eventos do Azure, Amazon Kinesis e outros.
Um número arbitrário de fluxos pode ser multiplexado em um número menor de filas, e a responsabilidade pelo processamento dessas filas é equilibrada uniformemente em todo o cluster.
Introdução ao vídeo Orleans
Para um vídeo de introdução ao Orleans, confira o seguinte vídeo: