最重要的网站,山东最新消息今天,好的手表网站,wordpress 过滤get值原文#xff1a;https://devblogs.microsoft.com/dotnet/orleans-3-0/作者#xff1a;Reuben Bond#xff0c;Orleans首席软件开发工程师翻译#xff1a;艾心这是一篇来自Orleans团队的客座文章#xff0c;Orleans是一个使用.NET创建分布式应用的跨平台框架。获取更多信息… 原文https://devblogs.microsoft.com/dotnet/orleans-3-0/作者Reuben BondOrleans首席软件开发工程师翻译艾心这是一篇来自Orleans团队的客座文章Orleans是一个使用.NET创建分布式应用的跨平台框架。获取更多信息请查看https://github.com/dotnet/orleans。我们激动的宣布Orleans3.0的发布。自Orleans2.0以来加入了大量的改进与修复以及一些新特性。这些变化是由许多人在生产环境的大量场景中运行基于Orleans应用程序的经验以及全球Orleans社区的智慧和热情推动的他们致力于使代码库更好、更快、更灵活。非常感谢所有以各种方式为这个版本做出贡献的人。自Orleans 2.0以来的关键变化Orleans 2.0发布于18个多月前从那时起Orleans便取得了巨大的进步。以下是自Orleans 2.0以来的重大变化· 分布式ACID事务-多个Grains加入到一个事务中不管他们的状态存储在哪里· 一个新的调度器在某些情况下仅它就可以将性能提升30%以上· 一种基于Roslyn代码分析的新的代码生成器· 重写集群成员以提升恢复速度· 联合Co-hosting支持还有很多其他的提升以及修复。自从致力于开发Orleans2.0以来团队就建立了一套实现或者继承某些功能的良性循环包括通用主机、命名选项在准备将这些功能好成为.NETCore的一部分之前与.NET团队密切合作、提供反馈和改进“upstream”在以后的版本中会切换到.NET版本附带的最终实现。在开发Orleans 3.0期间这个循环继续着在最终发布为.NET Core 3.0的一部分之前Orleans 3.0.0-beta1使用了Bedrock代码。类似的TCP套接字连接对TLS的支持是作为Orleans 3.0的一部分实现的并计划成为.NET Core未来版本的一部分。我们把这种持续的合作视为是我们对更大的.NET生态系统的贡献这是真正的开源精神。使用ASP.NET Bedrock替换网络层一段时间以来社区和内部合作伙伴一直要求支持与TLS的安全通信。在3.0版本中我们引入了TLS支持可以通过Microsoft.Orleans.Connections.Security包获取。有关更多信息请查看TransportLayerSecurity范例。实现TLS支持之所以是一个重大任务要归因于上一个版本中Orleans网络层的实现方式它并不容易适应使用SslStream的方式而SslStream又是实现TLS最常用的方法。在TLS的推动下我们着手重写Orleans的网络层。Orleans 3.0使用了一个来自ASP.NET团队倡议的基于Bedrock项目构建的网络层替换了自己的整个网络层Bedrock旨在帮助开发者构建快速的、健壮的网络客户端和服务器。ASP.NET团队和Orleans团队一同合作设计了同时支持网络客户端和服务端的抽象这些抽象与传输无关并且可以通过中间件实现定制化。这些抽象允许我们通过配置修改网络而不用修改内部的、特定于Orleans的网络代码。Orleans的TLS支持是作为Bedrock中间件实现的我们的目的是使之通用以便与.NET生态圈的其他人共享。尽管这项工作是的动力是启用TLS支持但是在夜间负载测试中我们看到了平均吞吐量提升了大约30%。网络层重写还包括借助使用MemoryPoolbyte替换我们的自定义缓存池在进行这项修改时序列化更多的使用到了SpanT。有一些代码路径之前是依靠调用BlockingCollectionT的专有线程进行阻塞现在使用ChannelT来异步传输消息。这将导致更少的专有线程占用同时将工作移动到了.NET线程池。Orleans的核心连接协议自发布以来一直都是固定的。在Orleans3.0中我们已经增加了通过协议协商negotiation逐步更新网络层的支持。Orleans 3.0中添加的协议协商支持未来的功能增强如定制核心序列化器同时向后保持兼容性。新的网络协议的一个优点是支持全双工Silo到Silo的连接而不是以前在Silo之间建立的单工连接对。协议版本可以通过ConnectionOptions.ProtocolVersion进行配置。通过通用主机进行联合托管Orleans与其他框架共同进行联合托管如ASP.NETCore得益于.NET通用主机相同的进程中使用联合托管现在要比以前容易多了。下面是一个使用UseOrleans将Orleans和ASP.NETCore一起添加到主机的例子var host new HostBuilder() .ConfigureWebHostDefaults(webBuilder { // Configure ASP.NET Core webBuilder.UseStartupStartup(); }) .UseOrleans(siloBuilder { // Configure Orleans siloBuilder.UseLocalHostClustering(); }) .ConfigureLogging(logging { /* Configure cross-cutting concerns such as logging */ }) .ConfigureServices(services { /* Configure shared services */ }) .UseConsoleLifetime() .Build();// Start the host and wait for it to stop.await host.RunAsync();使用通过主机构建器Orleans将与其他托管程序共享同一个服务提供者。这使得这些服务可以访问Orleans。例如一个开发者可以注入IClusterClient或者IGrainFactory到ASP.NETCore MVC Controller中然后从MVC应用中直接调用Grains。这个功能可以简化你的部署拓扑或者向现有程序中额外添加功能。一些团队内部使用联合托管通过ASP.NET Core健康检查将Kubernetes活跃性和就绪性探针添加到其Orleans Silo中。可靠性提高得益于扩展了Gossip集群现在可以更快的从失败中恢复。在以前的Orleans版本中Silo会向其他Silo发送成员Gossip信息指示他们更新成员信息。现在Gossip消息包括集群成员的版本化、不可变快照。这样可以缩短Silo加入或者离开集群的收敛时间例如在更新、扩展或者失败后并减轻共享成员存储上的争用从而加快集群转换的速度。故障检测也得到了改进利用更多的诊断信息和改进功能以确保更快、更准确的检测。故障检测涉及集群中的Silo他们相互监控每个Silo会定期向其他Silo的子集发送健康探测。Silo和客户端现在还主动与已声明为已失效的Silo的连接断开它们将拒绝与此类Silo的连接。现在消息错误得到了更一致的处理从而将错误提示信息传播回调用者。这有助于开发者更快地发现错误。例如当消息无法被完全序列化或者反序列化时详细的异常信息将会被返回到原始调用方。可扩展性增强现在Streams可以有自定义的数据适配器从而允许他们以任何格式提取数据。这使得开发人员更好的控制Streamitems在存储中的表示方式。他还使Stream提供者可以控制如何写入数据从而允许Streams与老的系统和Orleans服务集成。Grain扩展允许通过自己的通信接口附件新的组件从而在运行时向Grain添加其他行为。例如Orleans事务使用Grain扩展对用户透明的向Grain中添加事务生命周期方法如“准备”、“提交”和“中止”。Grain扩展现在也可用于Grain服务和系统目标。现在自定义事务状态可以声明其在事务中能够扮演的角色。例如将事务生命周期事件写入服务总线队列的事务状态实现不能满足事务管理器的职责因为它该事务状态的职责是只写的。由于预定义的放置策略现在可以公开访问因此在配置期间可以替换任何放置控制器。共同努力既然Orleans 3.0已经发布我们也就会将注意力转向未来的版本-我们有一些令人兴奋的计划快来加入我们在GitHub和Gitter上的社区帮助我们实现这些计划。