Compartilhar via


Orleans Benefícios

Os principais benefícios de Orleans são:

  • Produtividade do desenvolvedor: mesmo para programadores não especialistas.
  • Escalabilidade transparente por padrão: não requer nenhum esforço especial do desenvolvedor.

Produtividade do desenvolvedor

O Orleans modelo de programação gera produtividade, independentemente do nível de experiência, fornecendo as seguintes principais abstrações, garantias e serviços do sistema.

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

Os grãos são classes .NET que implementam interfaces de grãos .NET declaradas 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 corretos, invocando os métodos do grão alvo e tratando de forma transparente falhas e casos extremos.

Execução de tarefas de thread único

O runtime garante que um grão nunca seja executado em mais de um thread de cada vez. Combinados com o isolamento de outros grãos, os desenvolvedores nunca enfrentam simultaneidade no nível de grãos e nunca precisam de bloqueios ou outros mecanismos de sincronização para controlar o acesso aos dados compartilhados. Esse recurso sozinho torna o desenvolvimento de aplicativos distribuídos acessível, mesmo para programadores não especialistas.

Ativação transparente

O runtime ativa um grão somente quando há uma mensagem para que ele seja processado. Isso separa de forma clara a criação de uma referência granular (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 em que o sistema operacional decide quando colocar páginas na memória e quando remover páginas da memória. Da mesma forma, em Orleans, o runtime decide quando ativar um grão (trazendo-o para a memória) e quando desativar um grão (removendo-o da memória). O aplicativo tem acesso ininterrupto ao "espaço de memória" completo de grãos criados logicamente, independentemente de estarem na memória física a 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 no pool de recursos de hardware. Esse recurso melhora significativamente o modelo de ator tradicional, em que o tempo de vida do ator é gerenciado pelo aplicativo.

Transparência de localização

Uma referência de grão (objeto proxy) 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 runtime manipula de forma transparente a tradução da identidade lógica do grão para sua localização física e roteamento de mensagens adequadamente.

O código do aplicativo se comunica com grãos sem saber sua localização física. Essa localização pode ser alterada ao longo do tempo devido a falhas técnicas ou operacionais, gestão de recursos ou porque um grão é desativado quando solicitado.

Integração transparente com um repositório persistente

Orleans permite mapear declarativamente o estado na memória de um grão para um repositório persistente. Ele sincroniza atualizações, garantindo de forma transparente que os chamadores recebam resultados somente depois que o estado persistente for atualizado com êxito. Estender e/ou personalizar o conjunto de provedores de armazenamento persistente existentes é simples.

Propagação automática de erros

O runtime propaga automaticamente erros sem tratamento 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 colocar a lógica de tratamento de erros em locais apropriados sem o trabalho entediante de propagar erros manualmente em cada nível.

Escalabilidade transparente por padrão

O Orleans modelo de programação orienta os desenvolvedores para dimensionar aplicativos ou serviços com êxito 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 dos principais fatores que permitem escalabilidade e desempenho:

Particionamento refinado implícito do estado do aplicativo

O uso de grãos como entidades endereçáveis diretamente divide implicitamente o estado geral do aplicativo. Embora o Orleans modelo de programação não prescreva o tamanho da granulaçã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 aplicativo natural, como uma conta de usuário ou ordem de compra.

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

Gerenciamento de recursos adaptáveis

Os grãos não assumem a localidade de outros grãos ao interagir. Devido a essa transparência de local, o runtime pode gerenciar e ajustar dinamicamente a alocação de recursos de hardware disponíveis. O runtime consegue isso tomando decisões refinadas sobre a colocação e a migração de grãos pelo cluster de computação em reação aos padrões de carga e comunicação, sem falha nas solicitações de entrada. Ao criar várias réplicas de um determinado grão, o runtime pode aumentar sua taxa de transferência sem alterar o código do aplicativo.

Comunicação multiplexada

Grãos em Orleans possuem pontos de extremidade lógicos, e as mensagens entre eles são multiplexadas por um conjunto fixo de conexões físicas (soquetes TCP) estabelecidas entre todos os pontos. Isso permite que o runtime hospede milhões de entidades endereçáveis com baixa sobrecarga do sistema operacional por grão. 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 até mesmo fechar uma conexão TCP.

Agendamento eficiente

O runtime agenda a execução de várias tarefas ou processos de thread único usando o Pool de Threads do .NET, que é altamente otimizado para desempenho. Quando o código granulado é escrito no estilo não bloqueado e baseado em continuação (um requisito do modelo de Orleans programação), o código do aplicativo é executado de forma muito eficiente de maneira multicamada "cooperativa" sem contenção. Isso permite que o sistema obtenha alta taxa de transferência e execute com uma utilização muito alta da CPU (até 90%+) com grande estabilidade.

O fato de que o aumento no número de "grãos" e na carga não resulta em threads adicionais ou em outros primitivos de sistema operacional contribui para a escalabilidade de nós individuais e de todo o sistema.

Assincronicidade explícita

O Orleans modelo de programação torna a natureza assíncrona de aplicativos distribuídos explícita 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 total sem requerer multithreading explícito.