Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Os principais benefícios de Orleans são:
- Produtividade do desenvolvedor: mesmo para programadores não especializados.
- Escalabilidade transparente por padrão: não requer nenhum esforço especial do desenvolvedor.
Produtividade dos programadores
O Orleans modelo de programação aumenta a produtividade, independentemente do nível de especialização, fornecendo as seguintes abstrações, garantias e serviços do sistema.
Paradigma familiar de programação orientada a objetos (OOP)
Grain são classes .NET que implementam interfaces de grain .NET definidas com métodos assíncronos. Os grãos aparecem como objetos remotos cujos métodos podem ser invocados diretamente. Isso fornece o paradigma OOP familiar, transformando chamadas de método em mensagens, roteando-as para os pontos de extremidade certos, invocando os métodos do grão alvo e lidando de forma transparente com falhas e casos especiais.
Execução de grãos com rosca única
O tempo de execução garante que um grão nunca seja executado em mais de um thread de cada vez. Combinado com o isolamento de outros grãos, os desenvolvedores nunca enfrentam simultaneidade no nível de grão e nunca precisam de bloqueios ou outros mecanismos de sincronização para controlar o acesso aos dados compartilhados. Este recurso por si só torna o desenvolvimento de aplicativos distribuídos tratável, mesmo para programadores não especializados.
Ativação transparente
O tempo de execução ativa um grão somente quando há uma mensagem para ele processar. Isso separa claramente a criação de uma referência de grão (controlada pelo código do aplicativo) e a ativação física do grão na memória (transparente para o aplicativo). Isso é semelhante à memória virtual , onde o sistema operacional decide quando trazer páginas para a memória e quando remover páginas da memória. Da mesma forma, no Orleans, o tempo de execução decide quando ativar um grão (trazê-lo para a memória) e quando desativar um grão (expulsá-lo da memória). A aplicação tem acesso ininterrupto ao "espaço de memória" completo de grãos criados logicamente, independentemente de estarem na memória física em qualquer momento.
A ativação transparente permite o balanceamento de carga dinâmico e adaptável por meio do posicionamento e migração de grãos em todo o pool de recursos de hardware. Esse recurso melhora significativamente o modelo de ator tradicional, onde o tempo de vida do ator é gerenciado pelo aplicativo.
Transparência da localização
Uma referência de grão (objeto proxy) que é usada para invocar os métodos de um grão ou passar para outros componentes contém apenas a identidade lógica do grão. O Orleans ambiente de execução lida de forma transparente com a tradução da identidade lógica do elemento para a sua localização física e com o roteamento das mensagens de acordo com esta tradução.
O código do aplicativo se comunica com os grãos sem saber sua localização física. Esta localização pode mudar com o tempo devido a falhas, gestão de recursos ou porque um grão é desativado quando é chamado.
Integração transparente com uma loja persistente
Orleans Permite mapear declarativamente o estado na memória de um grão para um armazenamento persistente. Ele sincroniza as atualizações, assegurando de maneira transparente que os chamadores recebam resultados somente após a atualização bem-sucedida do estado persistente. Estender e/ou personalizar o conjunto de provedores de armazenamento persistente existentes é simples.
Propagação automática de erros
O ambiente de execução propaga automaticamente erros não tratados na cadeia de chamadas de forma assíncrona e distribuída usando a semântica de try/catch. Como resultado, os erros não se perdem dentro de uma aplicação. Isso permite colocar a lógica de tratamento de erros em locais apropriados sem o trabalho tedioso de propagar erros manualmente em cada nível.
Escalabilidade transparente por padrão
O Orleans modelo de programação orienta os desenvolvedores a dimensionar com sucesso aplicativos ou serviços por meio de várias ordens de magnitude. Ele consegue isso incorporando melhores práticas e padrões comprovados e fornecendo uma implementação eficiente da funcionalidade do sistema de nível inferior.
Aqui estão alguns fatores-chave que permitem a escalabilidade e o desempenho:
Particionamento fino implícito do estado do aplicativo
O uso de grãos como entidades diretamente endereçáveis decompõe implicitamente o estado geral do aplicativo. Embora o Orleans modelo de programação não prescreva tamanho de grão, na maioria dos casos, ter um número relativamente grande de grãos (milhões ou mais) faz sentido, com cada um representando uma entidade de aplicação natural, como uma conta de usuário ou ordem de compra.
Com grãos sendo individualmente endereçáveis e sua localização física abstraída pelo tempo de execução, Orleans tem enorme flexibilidade em equilibrar a carga e lidar com pontos quentes de forma transparente e genérica, sem exigir pensamento do desenvolvedor do aplicativo.
Gestão adaptativa de recursos
Os grãos não assumem a localização de outros grãos ao interagir. Devido a essa transparência de localização, o tempo de execução pode gerir e ajustar dinamicamente a alocação dos recursos de hardware disponíveis. O tempo de execução consegue isso tomando decisões refinadas sobre a colocação e migração de grãos no cluster de computação em reação aos padrões de carga e comunicação — sem falhar nas solicitações de entrada. Ao criar várias réplicas de um grão específico, o tempo de execução pode aumentar sua taxa de transferência sem alterar o código do aplicativo.
Comunicação multiplexada
Os grãos em Orleans têm pontos de extremidade lógicos, e as mensagens entre eles são multiplexadas em um conjunto fixo de conexões físicas tudo-para-tudo (sockets TCP). Isso permite que o ambiente de execução hospede milhões de entidades endereçáveis com baixa sobrecarga do sistema operativo por unidade. Além disso, ativar e desativar um grão não incorre no custo de registrar/cancelar o registro de um ponto de extremidade físico (como uma porta TCP ou URL HTTP) ou mesmo fechar uma conexão TCP.
Agendamento eficiente
O tempo de execução agenda a execução de muitos grãos de thread único usando o .NET Thread Pool, que é altamente otimizado para desempenho. Quando o código grain é escrito no estilo sem bloqueio, baseado em continuação (um requisito do Orleans modelo de programação), o código da aplicação executa-se de maneira muito eficiente de forma multi-threaded "cooperativa" sem contenção. Isso permite que o sistema atinja uma alta taxa de transferência e funcione com uma utilização muito alta da CPU (até 90%+) com grande estabilidade.
O fato de que o crescimento no número de grãos e o aumento da carga não levam a threads adicionais ou outras primitivas do sistema operacional ajudam a escalabilidade de nós individuais e de todo o sistema.
Assincronia explícita
O Orleans modelo de programação torna explícita a natureza assíncrona de aplicativos distribuídos e orienta os desenvolvedores a escrever código assíncrono sem bloqueio. Combinado com mensagens assíncronas e agendamento eficiente, isso permite um grande grau de paralelismo distribuído e taxa de transferência geral sem exigir multithreading explícito.