一直以来,Microsoft 都在运营互联网服务,但就在几年前情况发生了根本的转变,而这也引出了 Steve Ballmer 的著名言论“云对于公司是一次赌注,我们必须全力投入”我们应该同舟共济,互相学习来交付最佳的云产品。我们不断的把过往运行云服务过程中吸取的经验,融入到现有产品,从而不断改进服务。在Windows Server 2012规划期间,我们在云服务上花费了大量的时间,来了解其中的亮点和软肋所在。当您以我们的规模运行服务时,任何一个小问题都将被无限放大,因此每一次改进都有着极大的助益。这些经验教训将转变为许许多多的功能,包括性能,自动化、数据中心拓扑支持、持续可用性和最小化平均故障检测时间 (MTTD)/平均故障恢复时间 (MTTR)。在今天的博文中,来自Bing 团队的软件开发人员 Mukul Sabharwal 将讨论 Windows Server 2012 的一些功能及其对 Bing 服务的影响,以及为何 Bing 正在以最快地速度应用和部署 Windows Server 2012。正如您所看到的,Windows Server 2012 是真正为云优化操作系统。

我们为此喝彩,


Jeffrey


伴随着 Windows Server 2012 候选发布版本 (RC) 的发布,Bing.com 团队也考虑了如何从该操作系统的新功能中受益。Bing.com 是运行于成千上万的计算机上的云服务,其涉及全球范围内许多的数据中心。性能是运行诸如 Bing 等云服务的关键所在。每秒钟为数千个用户查询提供服务的同时要求快速返回相关的查询结果。

我们部署的 Windows Server 2012, 主要利用了四种关键的新功能:

  • 内置Microsoft .NET Framework 4.5(包含于 Windows Server 2012 中),包括后台垃圾回收和改进了相关的延迟
  • .NET 4.5 具备的多核实施编译(JIT)功能,提高了启动速度
  • 收集由 .NET 实时编译(JIT)的 64 位应用程序的调用堆栈
  • 提供Hyper-V 3 的评估版本(Window Server 2012 中的 Hyper-V 版本)

预安装 .NET Framework 4.5
我们的展现层完全通过托管代码运行,其依赖于 .NET Framework 和相应的 Web 框架 ASP.NET 和 ASP.NET MVC。我们编写托管代码的主要原因之一在于 公共语言运行时 可以提高开发人员的工作效率并保证运行时的安全性。同时,这些功能也会产生性能成本,例如垃圾收集 (GC)。

服务器后台垃圾回收
.NET 4.5 引入了服务器后台垃圾回收应用程序。在 .NET 4 发布时,就在客户端引入了针对服务应用程序的后台垃圾收集,该功能广受欢迎,也正因如此,我们对 Windows Server 2012 能将其引入到服务器而感到兴奋不已。并且,最终的运行结果也让我们十分满意!

以下是内部请求延迟图表,显示了我们的应用程序执行非 I/O 任务时所花费的时间。(如您所知,我们设定了使第 99 个百分位变得更快的目标。)


在下面的图表中,请注意大部分收益都来源于创建请求时花费更少的时间来处理我们创建的托管内存(请注意日期与本博文中的所有图表进行了协调处理。)



下图所示是ASP.NET管道中排队的等待请求,是另一种理想的性能计量方法,同时也是ASP.NET 应用程序服务器健康状况的指标。请注意 5 月 25 日的急速下滑!



升级至 Windows Server 2012 将为您的托管应用程序带来同样的积极影响。缩短垃圾的收集时间意味着将有更多的时间为用户请求提供服务。最终结果是缩短延迟时间并改善服务的处理能力。


多核即时编译
在 Windows Server 2012 中可通过 .NET 4.5 带来的另一重要功能是利用多核进行即使编译。该功能是一种按配置的优化;后台线程编译正执行线程可能请求的方法,在理想情况下,应用程序方法在需要运行时已完成 JIT 编译。

ASP.NET 应用程序已启用该功能,从而使升级变得微不足道,无需做任何事情,就能让您的 ASP.NET 应用程序自动获得多核即使编译。

您可能会想:为何启动时间对于服务器端应用程序来说至关重要?用户希望的是,仅在需要时重新启动服务,并可以选择操作的时间段来完成,从而可以避开高峰期。但是,如果您的应用程序发生崩溃,情况会怎样?

启动时间的对于服务可用性来说十分关键。当服务在中断后可以快速恢复时,情况如同完全系统中断和降级(但依然有效)的体验之间的差异。
您可能会问,启动时间是否得到了改进?


缩短 50% 的启动时间将使操作人员深感宽慰,而在服务中断时重新恢复的速度将提高一倍!


在您的生产服务器获得调用堆栈


在生产环境中基于采样的配置描述
Windows Server 2012 中的另一新增功能是收集经过 JIT 即使编译的 64 位 .NET 应用程序的调用堆栈。

我们将性能计数器用作我们的主要监控机制,同时其也是发给操作人员的通知中的第一行内容。它们不仅涉及我们在本文中讨论的问题(垃圾收集时间和排队的 ASP.NET 请求),而且还会涉及其他重要问题,例如 CPU 占用时间百分比和抛出的异常数量。

性能计数器对于检测性能下降而言极为重要,因为它将深入探究操作的健康状况。但是,它们通常不足以作为诊断性能问题的“根本原因”。因此,让我们假定性能计数器被阻止。例如,我们的 CPU 占用时间百分比增加了一倍,从而对延迟产生影响。我们接下来该怎么做?就 Windows Server 2012 而言,我们的下一步是启用低开销的基于采样的配置描述。

Windows Server 2012 通过Windows事件跟踪(ETW)系统实现了对 64 位的 JIT 编译的 .NET 应用程序进行采样。如果您熟悉windows的事件跟踪机制ETW,则会了解其是一种系统范围内的服务,好处是不要求重启进程;不具入侵性(不会附加到某一过程),并且可以有选择的订阅事件,同时开销很低:在配置被激活时时仅增加约 10% 的 CPU负载。



CPU 占用时间百分比的上升趋势仅由 80% 上升至 90%。这将转变为几乎同等百分比的延迟性能降低,如下图所示。


当诊断性能问题的“根本原因”变得至关重要时,10% 的性能降低尚可以接受。

我们已在本文中讨论了基于样本的配置描述,但该功能可扩展至其他类型的 ETW 事件,包括上下文切换事件和线程就绪事件。例如,您不仅可以分析占用大量 CPU 的问题,而且可以尝试解决由 I/O 或线程调度产生的问题。(请注意启用上下文切换分析的成本将高于采样,其在我们的应用程序中将对 CPU 产生约 30% 的影响。)

有时,有的问题仅在生产环境中重现,而这些问题可在大范围内产生影响。Windows Server 2012所具备的可配置并且低开销的日志功能就会是是一种巨大的优势,它是的托管应用程序现在可以得到与本机应用程序相同的全面支持。

(请注意当 Windows Server 2008 引入可在采样配置文件 ETW 事件中获得调用堆栈的功能时,其对已由 JIT 编译器编译过的 64 位应用程序无效。)


Hyper-V 3 和来宾 NUMA 支持
在 Windows Server 2012 推出之前,虚拟化意味着巨大的开销,即使考虑到其所带来的全部收益,情况依然如此。具体来说,虚拟化所产生的间接软件成本让人无法接受。此外,在我们的综合实验室测试中虚拟内核的数量限制(4 个)成为了处理能力的瓶颈。

但是,Windows Server 2012 中包含了 Hyper-V 3 功能,具有大量的“扩展”功能。我们对来宾 NUMA 支持感到格外兴奋。检测 NUMA 拓扑的功能对于内存分配智能决策来说至关重要,最小化跨节点的内存访问往往是加速应用程序的关键环节。

借助全新的 Windows Server 2012 实施和来宾操作系统中的 NUMA 效率,我们正在对使用 Hyper-V 3 进行重新评估。我们预期 Hyper-V 将使我们能够实现我们的性能目标,同时节省大量的成本。


云业务和云优化的操作系统
通过使用公开的候选版本切换到 Windows Server 2012,Bing.com 得到了显著的改进。我们基本上可以将 CPU 占用时间百分比降低一半,以为托管应用程序(包括垃圾收集)和减少重启服务时的启动时间提供关键服务。通过简化过程监控并将其内置于操作系统,我们已在性能方面得到了显著的提升。我们还将探索如何将 NUMA 效率与 Hyper-V 3 相结合来使用虚拟化增强我们的服务。Bing.com 是一种获得公认成功的大规模企业云服务,充分说明了我们如何将 Windows Server 2012 构建成一种真正的云优化操作系统。

Bing.com 是一种云服务。该云服务十分快捷,可运行于成千上万的计算机上,涉及全球范围内大量的数据中心。目前,该云服务已通过 Windows Server 2012 得到优化。

总结
全新 Windows Server 2012 功能的承诺使 Bing.com 团队在考虑迁移到最新操作系统时,对 Windows Server 2012 操作系统兴趣十足。从最初对快速迁移影响的探索性评估到全面部署,这一发展过程为 .NET 4.5 功能、多核 JIT 功能提供了巨大的收益,而性能有所改进的 Hyper-V 3 功能同样有可能获得极大的助益。

现在您已了解这些 Bing.com 优化的内部工作机制,最后请不要忘记以下内容:全球范围内所有 Bing.com 搜索结果都在由 Windows Server 2012 提供服务!

  • 内置的 .NET 4.5(包含于 Windows Server 2012 中),包括后台垃圾回收和相关延迟改进功能
  • 由 .NET 4.5 支持的多核实施编译带来的启动时间的改进
  • 收集由 .NET 实时编译的 64 位应用程序的调用堆栈
  • Hyper-V 3 应用的前途一片光明。