Este é um post convidado da equipe de Orleans. Orleans é uma estrutura de plataforma cruzada para a criação de aplicativos distribuídos usando o .NET. Veja https://github.com/dotnet/orleans para mais informações.Temos o prazer de anunciar o lançamento do Orleans 3.0. Comparado ao Orleans 2.0, ele possui muitas melhorias e correções, além de vários novos recursos. Essas mudanças são ditadas pela experiência de muitas pessoas que usam aplicativos baseados em Orleans na produção em uma ampla variedade de cenários e ambientes, além do entusiasmo da comunidade global de Orleans, que ajuda a estrutura a se tornar melhor, mais rápida e mais flexível. Muito obrigado a todos que contribuíram para este lançamento de várias maneiras!

Principais mudanças em comparação com o Orleans 2.0
O Orleans 2.0 foi lançado há pouco mais de 18 meses e o framework fez um progresso significativo desde então. Algumas alterações em relação ao 2.0:
- Transações ACID distribuídas
- Um novo planejador que, em alguns casos, aumentou a produtividade em mais de 30%
- Novo gerador de código baseado em Roslyn
- Reescreveu a associação do cluster para melhorar a velocidade de recuperação
- Suporte de co-hospedagem
Bem como muitas outras melhorias e correções.
Substituindo a camada de rede pelo ASP.NET Bedrock
Manter comunicações seguras usando
TLS tem sido uma grande preocupação há algum tempo. Além disso, tanto da
comunidade como de parceiros internos. Na versão 3.0, adicionamos suporte ao TLS, disponível no pacote
Microsoft.Orleans.Connections.Security . Consulte o
exemplo TransportLayerSecurity para obter mais informações.
A implementação do suporte ao TLS foi uma grande preocupação, devido à maneira como a camada de rede foi implementada nas versões anteriores do Orleans: ela não podia ser facilmente adaptada para usar o
SslStream
, que é o método mais comum para implementar o TLS. Usando o TLS como força motriz, reescrevemos a camada de rede de Orleans.
No Orleans 3.0, a camada de rede inteira é substituída por uma camada criada com base no
Project Bedrock , um recurso de grupo do ASP.NET. O objetivo da Bedrock é ajudar os desenvolvedores a criar clientes e servidores de rede rápidos e confiáveis.
A equipe do ASP.NET e a equipe de Orleans trabalharam juntas para criar abstrações que suportam clientes e servidores de rede, são independentes de transporte e podem ser configuradas usando middleware. Essas abstrações nos permitem alterar o "transporte" da rede através da configuração sem alterar o código de rede interno específico da Orleans. O suporte ao Orleans TLS é implementado como middleware Bedrock, e pretendemos torná-lo universal para que possa ser compartilhado com outras pessoas no ecossistema .NET.
Embora o incentivo para essa inovação tenha sido a adição do suporte ao TLS, em nossos testes de carga noturnos, o rendimento médio aumenta em cerca de 30%.
Reescrever a camada de rede também envolveu a substituição de nosso pool de buffers personalizado pelo
MemoryPool<byte>
e, com essa alteração, a serialização agora aproveita mais o
Span<T>
. Alguns caminhos de código que anteriormente dependiam do bloqueio por meio de threads dedicados que chamam
BlockingCollection<T>
agora usam o
Channel<T>
para passagem assíncrona de mensagens. Isso resulta em threads menos dedicados, movendo o trabalho para o pool de threads .NET.
Co-hospedagem através do host genérico
A co-hospedagem do Orleans com outras plataformas, como o ASP.NET Core no mesmo processo, agora é mais fácil do que antes, graças ao
.NET Generic Host .
Aqui está um exemplo de adição de Orleans, juntamente com o ASP.NET Core, a um host usando
UseOrleans
:
var host = new HostBuilder() .ConfigureWebHostDefaults(webBuilder => {
Essa funcionalidade pode ser usada para simplificar a topologia de implantação ou adicionar recursos adicionais a um aplicativo existente. Algumas equipes usam hospedagem compartilhada internamente para adicionar
testes do Kubernetes aos seus projetos de Orleans usando
as verificações de integridade do ASP.NET Core .
Melhorias na confiabilidade
Agora, os clusters são mais rápidos na recuperação de falhas, graças às fofocas avançadas. Além disso, os erros de mensagens agora são tratados de forma mais consistente, resultando em erros sendo passados de volta ao chamador. Isso ajuda os desenvolvedores a encontrar erros mais rapidamente. Por exemplo, quando uma mensagem não pode ser completamente serializada ou desserializada, uma exceção detalhada será passada de volta ao chamador original.
Extensibilidade aprimorada
Agora, os fluxos podem ter seus próprios adaptadores de dados, o que lhes permite receber dados em qualquer formato. Isso dá aos desenvolvedores mais controle sobre como os itens de fluxo são representados no repositório. Ele também fornece ao provedor de controle o controle sobre como os dados são gravados, permitindo que os fluxos se integrem aos sistemas existentes e / ou serviços que não são de Orleans.
O estado personalizado da transação agora pode declarar quais funções ele pode desempenhar na transação. Por exemplo, uma implementação de um estado de transação que grava eventos do ciclo de vida da transação na fila do barramento de serviço não pode cumprir as funções de um gerenciador de transações porque é somente para gravação.
Inscreva-se agora!
Agora que o Orleans 3.0 foi lançado, estamos voltando nossa atenção para lançamentos futuros - e temos alguns planos interessantes! Participe da nossa comunidade calorosa e acolhedora no
GitHub .
Veja também: 7 cursos gratuitos para desenvolvedores