Compartilhar via


Microsoft Orleans

Orleans:

  • É uma estrutura multiplataforma para a criação de aplicativos distribuídos robustos e escaloná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 a comunicação ponto a ponto.
  • Escala desde um único servidor local até milhares de aplicativos distribuídos e altamente disponíveis na nuvem.
  • Estende conceitos familiares e expressões em C# para ambientes de vários servidores.
  • Foi projetado para ser dimensionado elasticamente. Quando um host ingressa em um cluster, ele pode aceitar novas ativações. Quando um host sair do cluster, as ativações anteriores nesse host serão reativadas nos hosts restantes, conforme necessário. Um host pode deixar um cluster devido a uma escalabilidade decrescente ou a uma falha de máquina. Um cluster Orleans pode ser reduzido para um único host. As mesmas propriedades que habilitam a escalabilidade elástica permitem tolerância a falhas. O cluster detecta e se recupera rapidamente de falhas.
  • Simplifica as complexidades do desenvolvimento de aplicativos distribuídos fornecendo um conjunto comum de padrões e APIs.
  • Permite aos desenvolvedores familiarizados com o desenvolvimento de aplicativos de servidor único fazer a transição para a criação de serviços nativos de nuvem resilientes e escalonáveis e aplicativos distribuídos.
  • Às vezes, é chamado de ".NET Distribuído".
  • É a estrutura de escolha ao criar aplicativos nativos de nuvem.
  • É executado em qualquer lugar com suporte do .NET. Isso inclui hospedagem no Linux, no Windows e no macOS.
  • Os aplicativos podem ser implantados em Kubernetes, máquinas virtuais e serviços PaaS, como Serviço de Aplicativo do Azure e Aplicativos de Contêiner do Azure.

O "Modelo de Ator"

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

Nota

Os atores são entidades puramente lógicas que existem sempre virtualmente. Um ator não pode ser criado nem destruído explicitamente 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 é uma nova abordagem para criar uma nova geração de aplicativos distribuídos para a era da nuvem. O modelo de programação Orleans 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 por meio da Microsoft Research. Um ator virtual é representado como um grão do Orleans.

O que são Grãos?

O grão é um dos vários primitivos do Orleans. Em termos de modelo de ator, um grão é um ator virtual. O bloco de construção fundamental em qualquer aplicativo Orleans é um grão. Os 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 estável, comportamento e estado.

Identidades granuladas 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. Dessa forma, os grãos particionam implicitamente os estados do aplicativo, permitindo a 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 uma latência menor e menos carga nos armazenamentos de dados.

O ciclo de vida gerenciado de um grão Orleans.

A instanciação de grãos é executada automaticamente sob demanda pelo runtime do Orleans. Os grãos que não são usados por um tempo são removidos automaticamente 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 a recuperação transparente da falha porque o chamador não precisa saber em qual servidor um grão cria uma instância em nenhum momento. Os grãos têm um ciclo de vida gerenciado, com o runtime Orleans 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 estejam sempre na memória.

O que são Silos?

Um silo é outro exemplo de um primitivo Orleans. Um silo hospeda um ou mais grãos. O Orleans runtime é 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 se coordenam uns com os outros para distribuir o trabalho e detectar e se recuperar de falhas. O runtime permite que os grãos hospedados no cluster se comuniquem entre si como se estivessem dentro de um único processo. Para ajudar a visualizar a relação entre clusters, silos e grãos, considere o seguinte diagrama:

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

O diagrama anterior mostra a relação entre clusters, 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 runtime, 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?.

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

O que posso fazer com Orleans?

Orleans é uma estrutura para a criação de aplicativos nativos de nuvem e deve ser considerada sempre que você estiver criando aplicativos .NET que eventualmente precisarão ser dimensionados. Há maneiras aparentemente intermináveis de usar Orleans, mas as seguintes são algumas das maneiras mais comuns; Jogos, Bancos, aplicativos de chat, acompanhamento 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 facilitam o uso para uma variedade de aplicativos.

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 um chamado "inventário" para seu inventário. Esse estado pode ser armazenado em qualquer sistema de armazenamento.

Enquanto um processo 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 repositório de backup seja atualizado quanto à durabilidade e consistência.

Para obter mais informações, consulte Persistência de granularidade.

Temporizadores e lembretes

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 no momento. Os temporizadores são o equivalente não durável aos 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.

Posicionamento flexível de grãos

Quando um grão é ativado em Orleans, o runtime decide em qual servidor (silo) ativar esse grão. Isso é chamado de posicionamento de grãos.

O processo de posicionamento no Orleans pode ser totalmente configurado. Os desenvolvedores podem escolher entre um conjunto de políticas de posicionamento prontas para uso, como aleatórias, prefer-locais e baseadas em carga, ou a lógica personalizada pode ser configurada. Isso permite a flexibilidade total 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 dos quais necessitam para operar ou a outros grãos com os quais se comunicam.

Para saber mais, consulte o Posicionamento de grãos.

Controle de versão de grãos e clusters heterogêneos

A atualização de sistemas de produção de forma que seja responsável e com segurança para alterações pode ser desafiante, especialmente nos sistemas com estado. Para isso, as interfaces de grão no Orleans podem ser usadas na versão.

O cluster mantém um mapeamento de quais implementações de grãos estão disponíveis em quais silos no cluster e nas versões dessas implementações. Essa versão das informações é usada pelo runtime em conjunto com estratégias de posicionamento para tomar decisões no roteamento de chamadas para grãos. Além disso, para atualizar com segurança um grão com controle de versão, também permite clusters heterogêneos, em que diferentes silos têm diferentes conjuntos de implementações de grãos disponíveis.

Para saber mais, consulte o Controle de versão de grãos.

Trabalhadores sem estado

Os trabalhadores sem estado 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 maior paralelismo para funções sem estado.

Para obter mais informações, consulte Grãos para trabalhador sem estado.

Filtros de chamada de grão

Um filtro de chamada de grãos é a lógica comum a muitos grãos. Orleans dá suporte a filtros para chamadas de entrada e saída. 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 passadas com uma série de solicitações usando o contexto de solicitação . O contexto de solicitação pode ser usado para manter 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 esteja armazenado. As transações no Orleans são distribuídas e descentralizadas (não há nenhum gerenciador de transações central ou coordenador de transações) e têm isolamento em série.

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. Os fluxos do Orleans são gerenciados; os fluxos não precisam ser criados ou registrados antes que uma granularidade ou cliente publique ou assine um fluxo. Isso permite um maior desacoplamento de produtores e consumidores de fluxo de dados uns dos outros e da infraestrutura.

O processamento de fluxo é confiável: os grãos podem armazenar pontos de verificação (cursores) e redefinir um ponto de verificação armazenado durante a ativação ou a qualquer momento subsequente. Os fluxos dão suporte à entrega em lote de mensagens aos consumidores para melhorar a eficiência e o desempenho de recuperação.

Os fluxos são apoiados por serviços de fila, 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 de processar essas filas é equilibrada uniformemente em todo o cluster.

Introdução ao vídeo Orleans

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

Próximas etapas