Bing.com在.NET Core 2.1上运行!

简介: Bing.com在.NET Core 2.1上运行! 相关知识请参考.netCore开发团队博客(https://blogs.msdn.microsoft.com/dotnet/) Bing.com是一种云服务,运行在遍布全球许多数据中心的数千台服务器上。
Bing.com在.NET Core 2.1上运行!

 

相关知识请参考.netCore开发团队博客(https://blogs.msdn.microsoft.com/dotnet/) 


Bing.com是一种云服务,运行在遍布全球许多数据中心的数千台服务器上。Bing服务器每秒处理来自全球消费者的数千个用户查询,通过他们的浏览器,使用 Microsoft认知服务API的 合作伙伴以及个人数字助理Cortana进行搜索。我们的用户要求这些结果具有相关性和速度,因此性能和可靠性是运行Bing等成功云服务的关键组件。
Bing的前端堆栈主要是以MVC模式分层的托管代码编写的。大多数业务逻辑代码都是用C#编写的数据模型,视图逻辑是用 Razor 编写的。该层负责将搜索结果数据(编码为 Microsoft Bond )转换为HTML,然后将其压缩并发送到浏览器。作为Bing的前端平台的守门人,我们将开发人员的工作效率和功能敏捷性视为我们成功定义中的附加关键组件。数以百计的开发人员依靠这个平台将他们的功能投入生产,他们希望它能像钟表一样运行。
从一开始,Bing.com就在.NET Framework上运行,但它最近已转换为在.NET Core上运行。推动Bing.com采用.NET Core的主要原因是性能(即服务延迟),支持并行和应用程序本地安装,与机器范围的安装(或缺少安装)和 ReadyToRun映像无关 。为了实现这些改进,我们开始努力使代码在.NET实现中可移植,而不是依赖于仅在Windows上可用且仅与.NET Framework一起使用的库。团队开始使用.NET Standard 1.x,但是减少的API表面为我们的代码迁移带来了非常重要的复杂性。使用 .NET Standard 2.0 返回的20,000多个API,一切都改变了,我们能够迅速从代码修改转移到测试。在压缩了一些bug后,我们准备将.NET Core部署到生产环境中。
ReadyToRun图像
托管应用程序通常可能具有较差的启动性能,因为首先必须将JIT编译为机器代码。.NET Framework具有预编译技术 NGEN 。但是, NGEN 需要在将执行代码的计算机上执行预编译步骤。对于Bing来说,这意味着 NGENing 成千上万的机器。随着应用程序在Web服务机器上进行预编译,这与积极的部署周期相结合将导致显着的服务容量减少。此外,运行 NGEN 需要管理权限,这些权限在数据中心设置中通常不可用或经过严格审查。在.NET Core上, crossgen 工具允许将代码预编译为预部署步骤,例如在构建实验室中,并且部署到生产的映像已准备好运行!
性能
.NET Core 2.1几乎在运行时和库的所有领域都进行了重大的性能改进; 博客 上一篇文章中提供了一篇很好的论文。
我们的生产数据与.NET Core 2.1中的显着性能改进(与.NET Core 2.0和.NET Framework 4.7.2相比)产生了共鸣。下图跟踪了过去几个月内部服务器的延迟情况。Y轴是延迟(省略实际值),最后的急剧下降(6月2日)是.NET Core 2.1的部署!这一切都 提高 34% ,这要归功于.NET社区的辛勤工作!
.NET Core 2.1中的以下更改是我们工作负载的显着改进的亮点。它们以降低的影响顺序呈现。
  1. 矢量化string.Equals(@jkotas)和string.IndexOf/LastIndexOf(@eerhardt)
无论您采用哪种方式切片,HTML渲染和操作都是字符串繁重的工作负载。字符串比较和索引操作是其中的主要组成部分。这些操作的矢量化是我们测量的性能改进的最大贡献者。
  1. EqualityComparer<T>.Default(@AndyAyersMS)的虚拟化支持
我们的主要软件组件之一是重度用户 Dictionary<int/long, V> ,间接受益于JIT中为了 Dictionary<K, V>优化 而进行的内在识别工作(@benaadams)
  1. 软件写入监视并发GC(@ Maoni0和@kouvel)
这导致我们的应用程序中CPU使用率降低。在.NET Core 2.1之前,Windows x64(以及.NET Framework)上的写入监视是使用具有不同性能权衡的Windows API实现的。这个新实现依赖于JIT写屏障,它直观地增加了参考商店的成本,但是这个成本是摊销的,而且在我们的工作量中没有注意到。此改进现在也可以通过 2018年5月的安全性和质量汇总 在.NET Framework上获得
  1. 使用calli的方法现在可以内联(@AndyAyersMS和@mjsabby)
我们在代码的性能关键部分中使用 ldftn + calli 代替委托(这会产生对象分配),其中需要间接调用托管方法。此更改允许具有 calli 指令的方法体具有内联条件。我们的依赖注入框架生成这样的方法
  1. 提高string.IndexOfAny的2&3 char搜索性能(@bbowyersmyth)
前端堆栈中的常见操作是在字符串中搜索“:”,“/”,“/”以分隔URL的各个部分。这种特殊的外壳改进在整个代码库中都是有益的。
除了运行时更改之外,.NET Core 2.1还为.NET库生态系统带来了 Brotli 支持。Bing.com使用此功能动态压缩内容并将其提供给支持的浏览器。
运行时敏捷
最后,在我们的应用程序中拥有运行时的xcopy版本的能力意味着我们能够以更快的速度采用更新版本的运行时。事实上,如果您查看上面的图表,我们将在6月2日(即发布后的 两天) 的常规应用程序部署中全球范围内进行.NET Core 2.1更新!
这是可能的,因为我们在.NET Core的每日CI构建测试功能和性能的整个版本中运行我们的持续集成(CI)管道。
我们对未来感到兴奋,并与.NET团队密切合作,帮助他们确定未来的更新资格!.NET Core团队很兴奋,因为我们提供了大量的功能测试和额外的大型代码库来衡量实际的性能改进,以及我们致力于为Bing.com用户提供快速结果以及我们自己的开发人员使用最新的软件和工具。

本篇文章原址:Bing.com runs on .NET Core 2.1!

作者:从此启程/范存威

出处:http://www.cnblogs.com/fancunwei/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。如文章对您有用,烦请点个推荐再走,感谢! 本博客新开通打赏,鼠标移到右侧打赏浮动处,即可赏博主点零花钱,感谢您的支持!

相关文章
|
5天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
3月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
63 0
|
3月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
37 0
|
3月前
|
开发框架 JavaScript .NET
ASP.NET Core的超级大BUG
ASP.NET Core的超级大BUG
39 0
|
29天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
59 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
31 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
3月前
|
算法 C#
C# .Net Core bytes转换为GB/MB/KB 算法
C# .Net Core bytes转换为GB/MB/KB 算法
28 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
121 0