Partilhar via


A Microsoft Orleans

Orleans:

  • É uma estrutura multiplataforma para criar aplicativos distribuídos robustos e escaláveis. Os aplicativos distribuídos são definidos como aplicativos que abrangem mais de um único processo, muitas vezes além dos limites de hardware usando comunicação ponto a ponto.
  • Escala de um único servidor local para milhares de aplicativos distribuídos e altamente disponíveis na nuvem.
  • Estende conceitos familiares e expressões idiomáticas C# para ambientes multi-servidor.
  • É projetado para escalar elasticamente. Quando um host ingressa em um cluster, ele pode aceitar novas ativações. Quando um host sai do cluster, as ativações anteriores nesse host serão reativadas nos hosts restantes conforme necessário. Um host pode deixar um cluster devido à redução da escala ou a uma falha da máquina. Um Orleans cluster pode ser reduzido para um único host. As mesmas propriedades que permitem a escalabilidade elástica permitem a tolerância a falhas. O cluster deteta automaticamente e recupera rapidamente de falhas.
  • Simplifica as complexidades do desenvolvimento de aplicativos distribuídos, fornecendo um conjunto comum de padrões e APIs.
  • Permite que desenvolvedores familiarizados com o desenvolvimento de aplicativos de servidor único façam a transição para a criação de serviços resilientes e escaláveis nativos da nuvem e aplicativos distribuídos.
  • Às vezes é chamado de "Distributed .NET".
  • É a estrutura preferida ao criar aplicativos nativos da nuvem.
  • É executado em qualquer lugar com suporte para o .NET. Isso inclui hospedagem em Linux, Windows e macOS.
  • Os aplicativos podem ser implantados em Kubernetes, máquinas virtuais e serviços PaaS, como o Serviço de Aplicativo do Azure e os Aplicativos de Contêiner do Azure.

O "Modelo de Ator"

Orleans baseia-se no "modelo de ator". O modelo de ator teve origem no início da década de 1970 e é hoje um componente central do Orleans. O modelo de ator é um modelo de programação em que cada ator é um objeto leve, simultâneo e imutável que encapsula um pedaço de estado e comportamento correspondente. Os atores se comunicam exclusivamente entre si usando mensagens assíncronas. Orleans inventou notavelmente a abstração do Ator Virtual , em que os atores existem perpetuamente.

Nota

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.

Esta é uma nova abordagem para 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 ao desenvolvedor.

Para obter mais informações, consulte Orleans: Atores virtuais via Microsoft Research. Um ator virtual é representado como um Orleans grão.

O que são grãos?

O grão é um dos vários Orleans primitivos. Em termos de modelo de ator, um grão é um ator virtual. O bloco de construção fundamental em qualquer Orleans aplicação é 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 que tornam os grãos sempre disponíveis para invocação. Os grãos podem ser invocados por outros grãos ou por qualquer número de clientes externos. 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 que podem ser 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. O estado de grão é mantido 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 Orleans grão.

A instanciação de grãos é executada automaticamente sob demanda pelo Orleans tempo de execução. Os grãos que não são usados por um tempo são automaticamente removidos da memória para liberar recursos. Isso é possível devido à sua identidade estável, que permite invocar grãos independentemente de já estarem carregados na memória ou não. Isso também permite uma recuperação transparente de falhas, porque o chamador não precisa saber em qual servidor um grão é instanciado em nenhum momento. Os grãos têm um ciclo de vida gerenciado, com o Orleans tempo de execução responsável por ativar/desativar e colocar/localizar grãos conforme necessário. Isso permite que o desenvolvedor escreva 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 tempo de execução é o que implementa o modelo de programação para aplicativos.

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 entre si 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 entre si como se estivessem em um único processo. Para ajudar a visualizar a relação entre clusters, silos e grãos, considere o seguinte diagrama:

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. Você pode ter qualquer número de clusters, cada cluster 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 um conjunto de 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 posso fazer com Orleans?

Aplicativos Web e outros clientes externos chamam grãos no cluster usando a biblioteca de cliente, que gerencia automaticamente a comunicação de rede. Os clientes também podem ser co-hospedados no mesmo processo com silos para simplificar.

O que posso fazer com Orleans?

Orleans é uma estrutura para criar aplicativos nativos da nuvem e deve ser considerada sempre que você estiver criando aplicativos .NET que eventualmente precisariam ser dimensionados. Existem aparentemente infinitas maneiras de usar Orleans, mas as seguintes são algumas das maneiras 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. Orleans é usado pela Microsoft no Azure, Xbox, Skype, Halo, PlayFab, Gears of War e muitos outros serviços internos. Orleans tem muitos recursos que o tornam fácil de usar para uma variedade de aplicações.

Persistência

Orleans Fornece um modelo de persistência simples que garante que o estado esteja disponível antes de processar uma solicitação e que sua consistência seja mantida. Os grãos podem ter vários objetos de dados persistentes nomeados. Por exemplo, pode haver um chamado "perfil" para o perfil de um usuário e outro chamado "inventário" para seu inventário. Esse estado pode ser armazenado em qualquer sistema de armazenamento.

Enquanto um grão está em execução, o estado é mantido na memória para que as solicitações de leitura possam ser atendidas sem acessar o armazenamento. Quando o grão atualiza seu estado, a chamada IStorage.WriteStateAsync garante que o armazenamento de suporte seja atualizado para 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. Eles podem ser usados para garantir que alguma ação seja concluída em um ponto futuro, mesmo que o grão não esteja ativado naquele 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 tempo de execução decide em qual servidor (silo) ativar esse grão. Isso é chamado de colocação de grãos.

O processo de colocação é Orleans totalmente configurável. Os desenvolvedores podem escolher entre um conjunto de políticas de posicionamento prontas para uso, como lógica aleatória, preferencial local e baseada em carga, ou lógica personalizada pode ser configurada. Isso permite total flexibilidade na decisão de onde os grãos são criados. Por exemplo, os grãos podem ser colocados em um servidor próximo aos recursos contra os quais precisam operar ou outros grãos com os quais se comunicam.

Para obter mais informações, consulte Colocação de grãos.

Versionamento de grãos e clusters heterogêneos

Atualizar os sistemas de produção de uma maneira que leve em conta as mudanças com segurança pode ser um desafio, especialmente em sistemas com monitoração de estado. Para dar conta disso, as interfaces de grão podem Orleans ser versionadas.

O cluster mantém um mapeamento de quais implementações de grãos estão disponíveis em quais silos no cluster e as versões dessas implementações. Esta versão das informações é usada pelo tempo de execução em conjunto com estratégias de posicionamento para tomar decisões de posicionamento ao rotear chamadas para grãos. Além disso, para 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 que não têm nenhum estado associado e podem ser ativados em vários silos simultaneamente. Isso permite um maior paralelismo para funções sem monitoração de estado.

Para obter mais informações, consulte grãos de trabalhador apátrida.

Filtros de chamada de grãos

Um filtro de chamada de grão é uma lógica comum a muitos grãos. Orleans suporta filtros para chamadas recebidas e efetuadas. Filtros para autorização, registro em log e telemetria e tratamento de erros são considerados comuns.

Contexto da solicitação

Metadados e outras informações podem ser passados com uma série de solicitações usando o contexto da solicitação. O contexto da solicitação pode ser usado para armazenar informações de rastreamento distribuídas ou quaisquer outros valores definidos pelo usuário.

Transações ACID distribuídas

Além do modelo de persistência simples descrito acima, os grãos podem ter um 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 (não há um gerenciador de transações central ou coordenador de transações) e têm isolamento serializável.

Para obter mais informações sobre transações, consulte Transações.

Fluxos

Os fluxos ajudam os desenvolvedores a processar uma série de itens de dados quase em tempo real. Orleans Os fluxos são gerenciados, os fluxos não precisam ser criados ou registrados antes que um grão ou cliente publique ou assine um fluxo. Tal 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.

Vídeo de introdução a Orleans

Se você estiver interessado em um vídeo de introdução ao Orleans, confira o seguinte vídeo:

Próximos passos