Orleans是一种新的编程模式,用来提升微软通用语言运行库(CLR)的抽象水平,Orleans的宗旨就是为了创建一种既适用于客户端又适用于服务器的编程模式,简化代码调试,提高代码的可移植性。3.0版本带来大量的改进和修复,以及一些新的特性。
自2.0以来的一些主要变化是:
分布式ACID事务——多个grains可以加入一个事务(不管它们的状态存储在哪里)
新的调度器,它在某些情况下提高了30%以上的性能
新的基于Roslyn代码分析的代码生成器
重写集群成员以提高恢复速度
共同托管支持
Networking layer replacement with ASP.NET Bedrock
在3.0版本中,引入TLS支持,可通过Microsoft.Orleans.Connections.Security包获得。Orleans 3.0将其整个网络层替换为构建在Project Bedrock之上的整个网络层,这是ASP.NET团队的一个创举。Bedrock的目标是帮助开发人员构建快速、健壮的网络客户端和服务器。
网络层重写还包括用对MemoryPool的依赖替换自定义缓冲区池,在进行这种更改时,序列化现在更多地利用了Span。在Orleans 3.0中,增加了对通过协议协商逐步升级网络协议的支持。Orleans 3.0中添加的协议协商,例如定制核心序列化程序,同时保持向后兼容性。新网络协议的一个好处是支持全双工silo-to-silo连接,而不是以前在silo之间建立的单纯连接对。协议版本可以通过ConnectionOptions.ProtocolVersion配置。
Co-hosting via the Generic Host
现在,与其他框架(如ASP .NET Core)在同一个进程中共同托管Orleans比以前更容易。下面是一个使用UseOrleans将Orleans与ASP.NET Core一起添加到主机的示例:
- varhost=newHostBuilder()
- .ConfigureWebHostDefaults(webBuilder=>
- {
- //ConfigureASP.NETCore
- webBuilder.UseStartup();
- })
- .UseOrleans(siloBuilder=>
- {
- //ConfigureOrleans
- siloBuilder.UseLocalHostClustering();
- })
- .ConfigureLogging(logging=>
- {
- })
- .ConfigureServices(services=>
- {
- })
- .UseConsoleLifetime()
- .Build();
- //Startthehostandwaitforittostop.
- awaithost.RunAsync();
使用通用主机构建器,Orleans将与其他托管服务共享服务提供商。这使得这些服务可以进入Orleans。例如,开发人员可以将IClusterClient或IGrainFactory注入ASP.NET Core MVC控制器,并直接从它们的MVC应用程序调用grains。此功能可用于简化部署拓扑或向现有应用程序添加其他功能。
Improved extensibility
streams现在可以有自定义数据适配器,允许它们以任何格式接收数据。这使开发人员能够更好地控制stream项在存储中的表示方式。它还使streams提供程序能够控制数据的编写方式,从而使steams能够与遗留系统和/或non-Orleans服务集成。自定义事务状态现在可以声明它在事务中能够履行的角色。现在可以公开访问预定义的布局策略,以便在配置期间可以替换任何位置指示符。
Reliability improvements
此版本中,集群从故障中恢复得更快。消息传递错误现在得到更一致的处理,从而导致提示错误被传送回调用方。这有助于开发人员更快地发现错误。例如,当消息不能完全序列化或反序列化时,详细的异常将被传回原始调用方。
发布说明:
https://devblogs.microsoft.com/dotnet/orleans-3-0/