Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Orleans é uma estrutura multiplataforma projetada para simplificar a criação de aplicativos distribuídos. De um único servidor a milhares de aplicativos baseados em nuvem, Orleans fornece ferramentas para ajudar a gerenciar as complexidades dos sistemas distribuídos. Ele estende conceitos de C# familiares para ambientes de vários servidores, permitindo que os desenvolvedores se concentrem na lógica do aplicativo.
Veja o que Orleans oferece:
- Ele foi projetado para ser dimensionado elasticamente. Adicione ou remova servidores e Orleans ajuste adequadamente 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 os novos sistemas distribuídos.
- Ele é nativo de nuvem e é executado em plataformas em que há suporte para .NET — 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 geralmente é chamado de ".NET distribuído" devido ao seu foco na criação de serviços nativos de nuvem resilientes e escalonáveis. Vamos explorar o modelo de ator em seguida.
O modelo de ator
Orleans é baseado no modelo de ator. Originado no início da década de 1970, o modelo de ator agora é um componente principal de Orleans. No modelo de ator, cada ator é um objeto leve, simultâneo e imutável encapsulando um pedaço de estado e o comportamento correspondente. Os atores se comunicam exclusivamente usando mensagens assíncronas. Orleans notavelmente inventou a abstração do Ator Virtual , onde 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 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: 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:
As identidades de grão 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 marcador para granularidades com chaves
Guid
. -
IGrainWithIntegerKey: interface de marcador para granularidades com chaves
Int64
. -
IGrainWithStringKey: interface de marcador para granularidades com chaves
string
. - IGrainWithGuidCompoundKey: interface de marcador para granularidades com chaves compostas.
- IGrainWithIntegerCompoundKey: interface de marcador para granularidades com chaves compostas.
Os grãos podem ter dados de estado voláteis ou persistentes 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. Orleans mantém o estado de grão na memória enquanto o grão está ativo, levando a uma latência menor e menos carga nos armazenamentos de dados.
O Orleans runtime cria uma instância automática de grãos sob demanda. Os grãos não usados por um tempo são removidos automaticamente da memória para liberar recursos. Essa remoção é possível devido à sua identidade estável, permitindo a invocação de grãos, sejam eles 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 grão é instanciado em nenhum momento. Os grãos têm um ciclo de vida gerenciado, com o Orleans runtime responsável por ativar/desativar e colocar/localizar 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 primitivo Orleans. Um silo hospeda um ou mais grãos. O Orleans runtime 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 para distribuir o trabalho e detectar e recuperar-se de falhas. O runtime 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 seguinte diagrama:
O diagrama anterior mostra a relação entre clusters, silos e grãos. Pode haver 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 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?.
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 pode ser feito com Orleans?
Orleans é uma estrutura para a criação de aplicativos nativos de nuvem e deve ser considerada ao criar aplicativos .NET que eventualmente precisam ser dimensionados. Há maneiras aparentemente intermináveis de usar Orleans, mas as seguintes são algumas das mais comuns: jogos, bancos, aplicativos de chat, rastreamento de 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 facilitando o uso para vários aplicativos.
Persistência
Orleans fornece um modelo de persistência simples que garante a disponibilidade de 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 "inventário" para seu inventário. Esse estado pode ser armazenado em qualquer sistema de armazenamento.
Enquanto um grão é executado, Orleans mantém o estado na memória para atender solicitações de leitura sem acessar o armazenamento. Quando o grão atualiza seu estado, a chamada IStorage.WriteStateAsync garante que o repositório de backup atualize para 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. Use-os para garantir que uma ação seja concluída em um momento no futuro, mesmo que a funcionalidade não esteja ativada 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) ativá-lo. Esse processo é chamado de posicionamento de grãos.
O processo de posicionamento no Orleans pode ser totalmente configurado. Escolha entre políticas de posicionamento prontas para uso, como aleatória, preferência local e baseada em carga, ou configure a lógica personalizada. Isso permite flexibilidade total na decisão de onde os grãos são criados. Por exemplo, coloque grãos em um servidor próximo aos recursos com os quais eles precisam operar ou 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
Atualizar sistemas de produção de maneira segura, levando em conta as alterações, pode ser desafiador, especialmente em sistemas que mantêm estado. Para levar em conta isso, as interfaces de grãos 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 runtime utiliza essas informações de versão junto com estratégias de alocação para tomar decisões ao rotear chamadas para grains. Além de atualizar com segurança um grão versionado, isso também possibilita 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
Trabalhadores sem estado são unidades especialmente sinalizadas que não possuem estado associado e podem ser ativadas em múltiplos 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 é uma lógica comum a muitos grãos. Orleans dá suporte a 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 de solicitação. Use o contexto de solicitação para manter 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 em conjunto, independentemente de onde seu estado seja armazenado. As transações em Orleans são distribuídas e descentralizadas (ou seja, nenhum gestor ou coordenador central de transações) e apresentam isolamento serializável.
Para obter mais informações sobre transações, consulte Transações.
Fluxos
Os fluxos ajudam a processar uma série de itens de dados quase em tempo real. Orleans os fluxos são gerenciados; não é necessário criar ou registrar os fluxos antes que um grão ou cliente publique ou assine. Isso permite um maior desacoplamento de produtores e consumidores de fluxo de dados em relação entre si e da infraestrutura.
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 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
Para uma introdução em vídeo de Orleans, confira o seguinte vídeo: