Ler em inglês

Partilhar via


Orleans Benefícios

Os principais benefícios são Orleans :

  • Produtividade do desenvolvedor, mesmo para programadores não especializados.
  • Escalabilidade transparente por padrão sem esforço especial do programador.

Produtividade dos programadores

O Orleans modelo de programação aumenta a produtividade de programadores especialistas e não especialistas, fornecendo as seguintes abstrações, garantias e serviços do sistema.

Paradigma familiar de programação orientada a objetos (OOP)

Grãos são classes .NET que implementam interfaces de grão .NET declaradas com métodos assíncronos. Os grãos aparecem para o programador como objetos remotos cujos métodos podem ser invocados diretamente. Isso fornece ao programador 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 de destino e lidando com falhas e casos de canto de forma transparente.

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, o programador nunca enfrenta simultaneidade no nível de grão e nunca precisa usar bloqueios ou outros mecanismos de sincronização para controlar o acesso aos dados compartilhados. Este recurso por si só torna o desenvolvimento de aplicações distribuídas tratável para programadores não especialistas.

Ativação transparente

O tempo de execução ativa um grão somente quando há uma mensagem para ele processar. Isso separa claramente a noção de criar uma referência a um grão, que é visível e controlado pelo código do aplicativo, e a ativação física do grão na memória, que é transparente para o aplicativo. Isso é semelhante à memória virtual na medida em que decide quando "page out" (desativar) ou "page in" (ativar) um grão; O aplicativo tem acesso ininterrupto ao "espaço de memória" completo de grãos criados logicamente, estejam eles na memória física em qualquer ponto específico no tempo.

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 é uma melhoria significativa em relação ao modelo tradicional de ator, no qual o tempo de vida do ator é gerenciado pelo aplicativo.

Transparência da localização

Uma referência de grão (objeto proxy) que o programador usa para invocar os métodos do grão ou passar para outros componentes contém apenas a identidade lógica do grão. A tradução da identidade lógica do grão para sua localização física e o roteamento correspondente de mensagens é feito de forma transparente pelo Orleans tempo de execução.

O código do aplicativo se comunica com os grãos enquanto permanece alheio à sua localização física, que pode mudar ao longo do tempo devido a falhas ou gerenciamento de recursos ou porque um grão é desativado no momento em que é chamado.

Integração transparente com uma loja persistente

Orleans Permite o mapeamento declarativo do estado na memória de um grão para um armazenamento persistente. Ele sincroniza as atualizações, garantindo de forma transparente que os chamadores recebam resultados somente depois que o estado persistente tiver sido atualizado com êxito. Estender e/ou personalizar o conjunto de provedores de armazenamento persistente existentes disponíveis é simples.

Propagação automática de erros

O tempo de execução propaga automaticamente erros não tratados na cadeia de chamadas com a semântica de try/catch assíncrono e distribuído. Como resultado, os erros não se perdem dentro de um aplicativo. Isso permite que o programador coloque a lógica de tratamento de erros nos locais apropriados, sem o trabalho tedioso de propagar manualmente os erros em cada nível.

Escalabilidade transparente por padrão

O Orleans modelo de programação é projetado para guiar o programador por um caminho de provável sucesso no dimensionamento de um aplicativo ou serviço através de várias ordens de magnitude. Isso é feito 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 escalabilidade e desempenho:

Particionamento implícito de grão fino do estado do aplicativo

Ao usar grãos como entidades diretamente endereçáveis, o programador decompõe implicitamente o estado geral de sua aplicação. Embora o Orleans modelo de programação não prescreva quão grande ou pequeno um grão deve ser, na maioria dos casos faz sentido ter um número relativamente grande de grãos – milhões ou mais – com cada um representando uma entidade natural do aplicativo, como uma conta de usuário ou uma ordem de compra.

Com grãos sendo endereçáveis individualmente e sua localização física abstraída pelo tempo de execução, tem enorme flexibilidade para equilibrar a carga e lidar com pontos quentes de forma transparente e genérica, Orleans sem qualquer pensamento do desenvolvedor do aplicativo.

Gestão adaptativa de recursos

Os grãos não assumem a localidade de outros grãos à medida que interagem com eles. Devido a essa transparência de local, o tempo de execução pode gerenciar e ajustar a alocação de recursos de hardware disponíveis dinamicamente. O tempo de execução faz isso tomando decisões refinadas sobre o posicionamento e a 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 a taxa de transferência do grão sem fazer alterações no código do aplicativo.

Comunicação multiplexada

Os grãos têm Orleans pontos de extremidade lógicos, e as mensagens entre eles são multiplexadas em um conjunto fixo de conexões físicas tudo-para-todos (soquetes TCP). Isso permite que o tempo de execução hospede milhões de entidades endereçáveis com baixa sobrecarga do sistema operacional por grão. Além disso, a ativação e desativação de 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 até mesmo fechar uma conexão TCP.

Agendamento eficiente

O tempo de execução agenda a execução de um grande número de grãos de thread único usando o .NET Thread Pool, que é altamente otimizado para desempenho. Com código grain escrito no estilo sem bloqueio, baseado em continuação (um requisito do modelo de programação), o Orleans código do aplicativo é executado de uma maneira "cooperativa" multi-threaded muito eficiente, 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 no sistema e um aumento na carga não leva a threads adicionais ou outras primitivas do sistema operacional ajuda 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 um aplicativo distribuído e orienta os programadores 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 o uso explícito de multithreading.