Partilhar via


A Microsoft Orleans

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.

Veja o que Orleans oferece:

  • Está concebido 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 nuvem e é executado em plataformas onde o .NET é suportado — Linux, Windows, macOS e muito mais.
  • 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. Vamos explorar o modelo de ator a seguir.

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:

Um grão é composto por uma identidade, comportamento e estado estáveis.

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:

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 ciclo de vida gerenciado de um grão Orleans.

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:

Um aglomerado tem um ou mais silos e um silo tem um ou mais grãos.

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:

Próximos passos