微软在今天在Redmond 线下举办媒体一场活动,发布了新版的微软必应,在桌面上推出了测试版,移动版也即将推出。微软首席执行官纳德拉称Al-powered搜索为公司自云15年以来最大的事情。

2023年1月初,微软已经在讨论将OpenAI的技术纳入Word、PowerPoint、Outlook和其他应用程序,这样用户就可以用简单的提示自动生成文本,2023年1月下旬,微软宣布即将会把ChatGPT加入Azure云服务。新版微软必应+Chatgpt的测试版会推出,在面对谷歌刚刚宣布发布Bard聊天机器人的时刻,这场发布会就更容易引人注目。

微软的大量云服务,包括必应搜索,他们的技术栈都是.NET , 都是用2014宣布开源的跨平台的 .NET ,必应早在2018年就从.NET Framework升级到.NET Core 2.1, 具体参见 https://devblogs.microsoft.com/dotnet/bing-com-runs-on-net-core-2-1/。.NET Core为Bing 带来了的显著性能改进。

下面将汇总一下微软的开发博客——这些博客均涉及微软将产品和服务迁移到.NET 6的成果。 博客按时间由近及远排序。

《Microsoft Teams’ Infrastructure and Azure Communication Services’ Journey to .NET 6》: https://devblogs.microsoft.com/dotnet/microsoft-teams-infrastructure-and-azure-communication-services-journey-to-dotnet-6/

迁移到 .NET Core 是由多种因素驱动的:

  1. 成本降低:Azure 计算成本平均节省 29%。

  2. 性能提升:性能提升30-50%,包括P99 CPU利用率和P99服务时延。

  3. 服务和网络现代化:访问框架中的最新功能,例如轻量级应用程序内存占用,支持Linux上的容器,更好的异常处理,从而在恶劣的条件下获得更好的可靠性以及最新的安全修复。

  4. 提高工程满意度和生产力

《Microsoft Commerce’s .NET 6 Migration Journey》:https://devblogs.microsoft.com/dotnet/microsoft-commerce-dotnet-6-migration-journey/

一个特别重要的例子是,一个服务从 .NET Framework 迁移到 .NET Core 3.1,同时尽可能多地保留其他相同内容(尽管此更改也包括对 .NET Core 的依赖项更新,以及在迁移其代码时所做的小改进)。下图显示了服务延迟提高了约 78%,并且在最初部署后(使用相同的负载、环境和硬件运行)显著提高了稳定性!

随着我们更复杂的服务迁移到 Kubernetes 中,我们的迁移需要的不仅仅是 .NET:

  • 从Windows 到Linux

  • .NET 框架到 .NET Core(3.1,在某些情况下为 5.0,现在是 6.0)

  • 平台转向容器和Kubernetes(远离虚拟机)

  • 更换构建和发布系统,以利用最新的安全性和合规性改进并支持容器化应用程序。

  • 随着我们在迁移时利用平台和 .NET 中的增强和改进,以及我们的合作伙伴对依赖项执行了相同的操作,还有更多功能。虽然这些好处并不完全归功于我们的 .NET Core 迁移,但它们是通过迁移实现的,我们非常感谢 .NET 团队在迁移过程中提供的所有帮助和支持!

《Microsoft Teams Assignments Service’s Journey to .NET 6》:https://devblogs.microsoft.com/dotnet/microsoft-teams-assignments-service-dotnet-6-journey/

在迁移后,我们确实看到了一些 CPU 和延迟的改进,但最一致的改进是内存消耗(进程\专用字节)的减少。随着我们继续调整我们的代码库,我们对此迁移解锁的更有针对性的优化感到非常兴奋!例如,我们可以利用它来减少更多代码路径中的分配,因为大多数 BCL API 现在都支持它作为 的替代方法。此外,我们现在可以访问 .NET 6 (https://docs.microsoft.com/en-us/dotnet/core/runtime-config/) 中的大量新配置选项,并期待调整和调整运行时以更好地适应我们的所有工作负载。

《OneService Journey to .NET 6》:https://devblogs.microsoft.com/dotnet/one-service-journey-to-dotnet-6/

在两年多的时间里,我们将大量 .NET Framework 4.7.2 应用、库和测试项目转换为 .NET 6,验证了功能和性能等效性(或更好),现在几乎完全在生产中的 .NET 6 上运行。该项目取得了重大成功,有助于降低运营成本并改善开发人员体验。

突出:

  • 基础设施成本降低 29%。

  • 迁移服务的 CPU 平均提高 30%。

  • 主 API 的 P95 延迟提高了 8-27%。

  • 减少了技术债务,现在可以轻松地升级到年度 .NET 版本。

  • 更快乐、更高效的团队。

《Exchange Online Journey to .NET Core》:https://devblogs.microsoft.com/dotnet/exchange-online-journey-to-net-core/

出于三个原因,我们之所以有动力迁移到 .NET Core。首先,我们非常需要提高性能和成本效益。任何基于云的供应商都知道,每一次低效率都会花费真金白银。第二,知道 .NET Framework 不再积极开发,我们希望迁移到一个为未来开辟道路的现代框架。第三,可能更重要的是它很酷,有光泽和新鲜。

《The Azure Cosmos DB Journey to .NET 6》:https://devblogs.microsoft.com/dotnet/the-azure-cosmos-db-journey-to-net-6/

Azure Cosmos DB's API网关是一种低延迟的 Azure 服务。它以多种方式利用 .NET 来实现其性能和延迟要求。多年来,每次 .NET 升级都产生了许多好处,既包括新的 API,这些 API 提供了更好的方法来管理性能,并改进了框架中的现有 API 和运行时行为。我们正在积极与 .NET 团队合作,采用 .NET 7,并期待在即将发布的 .NET 版本中推出更多影响深远的性能功能。

《Microsoft Graph’s Journey to .NET 6》:https://devblogs.microsoft.com/dotnet/microsoft-graph-dotnet-6-journey/

四年前,该服务在 IIS 上运行,在 .NET Framework 4.6.2 上 ASP.NET。目前,该服务在 HTTP 上运行.sys.NET 6 上 ASP.NET 核心,在 .NET Core 3.1 和 .NET 5 上暂时停止。每次升级时,我们都观察到 CPU 利用率有所提高,尤其是在 .NET Core 3.1 和最近的 .NET 6 中。

  1. 从 .NET 框架到 .NET Core 3.1,我们观察到在相同的流量下 CPU 减少了 30%。

  2. 从 .NET Core 3.1 到 .NET 5,我们没有观察到要报告的有意义的差异。

  3. 从 .NET 5 到 .NET 6,我们观察到在相同的流量下,CPU 又减少了 10%。

CPU 利用率的大幅降低转化为更好的延迟、吞吐量和有意义的计算容量成本节约,从而有效地帮助我们实现目标。

《Azure Active Directory’s gateway is on .NET 6.0!》:https://devblogs.microsoft.com/dotnet/azure-active-directorys-gateway-is-on-net-6-0/

Azure 活动目录的网关服务是一个反向代理,用于处理构成 Azure 活动目录 (Azure AD) 的数百个服务。如果使用了 office.com、outlook.com、portal.azure.com 或 xbox.live.com 等服务,则表示你已使用 Azure AD 的网关。网关提供 TLS 终止、自动故障转移/重试、异地邻近路由、限制和向 Azure AD 中的服务分段等功能。该网关存在于全球 54 个 Azure 数据中心,每天为大约 1850 亿个请求提供服务。直到最近,Azure AD 的网关还在 .NET 5.0 上运行。截至 2021 年 9 月,它已在 .NET 6.0 上运行。

这些博客都在强烈凸显着.NET的进步:

  • 更低的CPU消耗

  • 更低的内存占用

  • 更低的响应延迟

  • 更高的吞吐量

  • 更完善的脚手架

  • 更强大的测试和监控工具

  • ……

之后类似的博客还会发布在:Developer Stories - .NET Blog (microsoft.com) :https://dmicrosoft.com/dotnet/category/developer-stories/evblogs.,有兴趣的读者可以加入收藏夹持续关注。

新版Bing 搜索后台的.NET 技术栈的更多相关文章

  1. SpringBoot技术栈搭建个人博客【后台开发】

    前言:在之前,我们已经完成了项目的基本准备,那么就可以开始后台开发了,突然又想到一个问题,就是准备的时候只是设计了前台的RESTful APIs,但是后台管理我们同样也是需要API的,那么就在这一篇里 ...

  2. Web前端开发大系概览 (前端开发技术栈)

    前言 互联网建立50多年了,网站开发技术日新月异,但web前端始终离不开浏览器,最终还是HTML+JavaScript+CSS这3个核心,围绕这3个核心而开发出来大量技术框架/解决方案. 我从2000 ...

  3. 聊聊真实的 Android TV 开发技术栈

    智能电视越来越普及了,华为说四月发布智能电视跳票了,一加也说今后要布局智能电视,在智能电视方向,小米已经算是先驱了.但是还有不少开发把智能电视简单的理解成手机屏幕的放大,其实这两者并不一样. 一.序 ...

  4. SpringBoot技术栈搭建个人博客【前台开发/项目总结】

    前言:写前台真的是我不擅长的东西...所以学习和写了很久很久...前台页面大概开发了两天半就开发好了,采用的静态的html和bootstrap来写,写后台的时候纠结住了...怎么说呢,写页面真的是头疼 ...

  5. 重谈react优势——react技术栈回顾

    react刚刚推出的时候,讲react优势搜索结果是几十页. 现在,react已经慢慢退火,该用用react技术栈的已经使用上,填过多少坑,加过多少班,血泪控诉也不下千文. 今天,再谈一遍react优 ...

  6. 通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? .Net Web开发技术栈

    通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core?   什么是.NET?什么是.NET Framework?本文将从上往下,循序渐进的介绍一系列相关.NET的概念 ...

  7. 一个基于React整套技术栈+Node.js的前端页面制作工具

    pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...

  8. "Oracle要对Java收费了,SAP基于Java技术栈的那些产品的客户怎么办"

    今年年初的时候,所谓"Oracle要对Java收费"的新闻,在网上传得沸沸扬扬.这个新闻被专业人士视为标题党,而国内众多技术论坛,比如知乎社区上,有很多大神对"Java收 ...

  9. iOS 开发技术栈与进阶

    最近有一些开发朋友问我应该怎样提升自己的能力,回想起来做了这么久 iOS 开发,我也有过那种“让我做一个功能实现个需求我会做,但接下来怎样提高我不知道.”的时期,这里尝试列一下 iOS 开发的相关技术 ...

  10. .Net 微服务架构技术栈的那些事

    一.前言 大家一直都在谈论微服务架构,园子里面也有很多关于微服务的文章,前几天也有一些园子的朋友问我微服务架构的一些技术,我这里就整理了微服务架构的技术栈路线图,这里就分享出来和大家一起探讨学习,同时 ...

随机推荐

  1. ES6 学习笔记(九)Set的基本用法

    1 基本用法 set类似于数组,它的成员是唯一的,当有多个相同的值,只会保留一份. 1.1 创建方法 Set本身是一个构造函数,用来生成Set实例,如: const s = new Set() let ...

  2. git ignore忽略规则

    目录 Git 忽略文件提交的方法 Git 忽略规则 Git 忽略规则优先级 Git 忽略规则匹配语法 常用匹配示例 多级目录忽略规则设置 .gitignore规则不生效 参考文章 Git 忽略文件提交 ...

  3. SpringBoot 03: 常用web组件 - - - 拦截器 + Servlet + 过滤器

    常用web组件 拦截器 Servlet 过滤器 使用思想 创建自定义类 实现或者继承框架里的接口或类 将自定义类注册到框架中 使用自定义类 拦截器 说明 拦截器是SpringMVC中的一种对象,能拦截 ...

  4. 【Virt.Contest】CF1321(div.2)

    第一次打虚拟赛. CF 传送门 T1:Contest for Robots 统计 \(r[i]=1\) 且 \(b[i]=0\) 的位数 \(t1\) 和 \(r[i]=0\) 且 \(b[i]=1\ ...

  5. linux如何删除多余网卡

    ifconfig tunl0 down ip link delete tunl0

  6. 编码工具使用(go语言)

    1.课程介绍 Git基础课程和实操 Goland介绍以及常用快捷键使用 Go delve 调试 你想要的linux 这里都有 2.版本控制工具介绍 原始的版本控制 修改文件,保存文件副本 版本控制的起 ...

  7. Conda 环境移植 (两种方式)

    ------------------------方法一------------------------ 优点: 在原机器上需要进行的操作较少,且除了conda不需要其余的库来支撑:需要传输的文件小,操 ...

  8. Spring校验器实例

    @size (min=3, max=20,message="用户名长度只能在3-20之间") @size (min=6, max=20,message="密码长度只能在6 ...

  9. orcl between and 时间

    在网上查阅,大家都说between and两边都会包含,但是对于时期来讲,他会包含前者,不会包含后者. 也就是说求一个时间介于上周六到本周五的区间,用between and 需要计算出上周六的时间和本 ...

  10. node学习01

    1.前言 Node.js 是一个开源和跨平台的 JavaScript 运行时环境 Node.js 在浏览器之外运行 V8 JavaScript 引擎(Google Chrome 的内核). 这使得 N ...