奥尔良3.0发布

这是奥尔良团队的来宾帖子。 Orleans是用于使用.NET创建分布式应用程序的跨平台框架。 有关更多信息,请参见https://github.com/dotnet/orleans

我们很高兴地宣布奥尔良3.0的发布。 与Orleans 2.0相比,它具有许多改进和修复,以及一些新功能。 这些变化取决于许多人在各种场景和环境中使用基于Orleans的应用程序进行生产的经验,以及全球Orleans社区的热情,这有助于使框架变得更好,更快和更灵活。 非常感谢以各种方式为该发行版做出贡献的每个人!



与奥尔良2.0相比的主要变化


奥尔良2.0于18个月前发布,该框架自那时以来取得了重大进展。 与2.0相比有一些变化:

  • 分布式ACID交易
  • 一个新的调度程序,在某些情况下,生产率提高了30%以上
  • 新的基于Roslyn的代码生成器
  • 重写集群成员资格以提高恢复速度
  • 共同托管支持

以及许多其他改进和修复。

用ASP.NET Bedrock替换网络层


一段时间以来,使用TLS维护安全通信一直是一个主要问题。 而且,来自社区和内部合作伙伴。 在3.0版中,我们添加了TLS支持,可通过Microsoft.Orleans.Connections.Security包获得该支持。 有关更多信息,请参见TransportLayerSecurity示例

由于在Orleans的早期版本中是如何实现网络层的,因此实现TLS支持是一个主要问题:无法轻松地将其适配为使用SslStream ,这是实现TLS的最常见方法。 使用TLS作为驱动力,我们重写了Orleans网络层。

在Orleans 3.0中,整个网络层将替换为基于Project Bedrock (ASP.NET组功能)创建的层。 Bedrock的目标是帮助开发人员创建快速而可靠的网络客户端和服务器。

ASP.NET团队和Orleans团队共同创建支持网络客户端和服务器,与传输无关的抽象并且可以使用中间件进行配置的抽象。 这些抽象使我们能够通过配置更改网络“传输”,而无需更改内部特定于奥尔良的网络代码。 Orleans TLS支持作为基岩中间件实现,我们打算使其通用,以便可以与.NET生态系统中的其他人共享。

尽管此创新的诱因是增加了TLS支持,但在我们夜间的负载测试中,平均吞吐量提高了约30%。

重写网络层还涉及用MemoryPool<byte>替换我们的自定义缓冲池,并且通过此更改,序列化现在可以利用Span<T> 。 某些以前依赖通过调用BlockingCollection<T>专用线程进行锁定的代码路径现在使用Channel<T>进行异步消息传递。 这导致专用线程较少,而是将工作移至.NET线程池。

通过通用主机共同托管


现在,通过.NET Generic Host可以比以前更轻松地在同一过程中与其他平台(如ASP.NET Core)共同托管Orleans。

这是使用UseOrleans将Orleans和ASP.NET Core一起添加到主机的UseOrleans
 var host = new HostBuilder() .ConfigureWebHostDefaults(webBuilder => { //  ASP.NET Core webBuilder.UseStartup<Startup>(); }) .UseOrleans(siloBuilder => { //  Orleans siloBuilder.UseLocalHostClustering(); }) .ConfigureLogging(logging => { /*   ,    */ }) .ConfigureServices(services => { /*    */ }) .UseConsoleLifetime() .Build(); //      . await host.RunAsync(); 

此功能可用于简化部署拓扑或向现有应用程序添加其他功能。 一些团队内部使用共享托管,使用ASP.NET Core Health ChecksKubernetes测试添加到其Orleans项目中。

可靠性改进


借助先进的闲聊功能,群集现在可以更快地从故障中恢复。 此外,现在可以更一致地处理消息传递错误,从而将错误传递回调用方。 这有助于开发人员更快地发现错误。 例如,当消息无法完全序列化或反序列化时,详细的异常将传递回原始调用方。

增强的可扩展性


流现在可以具有自己的数据适配器,从而使它们可以接收任何格式的数据。 这使开发人员可以更好地控制存储库中流项目的表示方式。 它还使流提供者可以控制如何写入数据,从而允许流与现有系统和/或非奥尔良服务集成。

事务的自定义状态现在可以声明它可以在事务中扮演什么角色。 例如,将事务生命周期事件写入服务总线队列的事务状态的实现不能满足事务管理器的职责,因为它是只写的。

立即加入!


现在Orleans 3.0已发布,我们将注意力转向将来的版本-我们有一些令人兴奋的计划! 加入我们在GitHub上热情友好的社区。



另请参阅: 7个针对开发人员的免费课程

Source: https://habr.com/ru/post/zh-CN474240/


All Articles