免费A级毛片无码专区网站-成人国产精品视频一区二区-啊 日出水了 用力乖乖在线-国产黑色丝袜在线观看下-天天操美女夜夜操美女-日韩网站在线观看中文字幕-AV高清hd片XXX国产-亚洲av中文字字幕乱码综合-搬开女人下面使劲插视频

Bing 廣告平臺(tái)遷移到 .net6

廣告組件平臺(tái)對(duì)于微軟搜索平臺(tái)能給用戶提供好的用戶體驗(yàn)至關(guān)重要,這個(gè)平臺(tái)支持超過450000個(gè)廣告商允許他們創(chuàng)建廣告 。
在一秒鐘內(nèi),該平臺(tái)處理數(shù)千個(gè)web請(qǐng)求,而且時(shí)延不超過100毫秒 。

Bing 廣告平臺(tái)遷移到 .net6

文章插圖
支撐這個(gè)平臺(tái)的是幾十個(gè)分布式服務(wù),現(xiàn)在這些服務(wù)都要構(gòu)建在.net 6 之上,運(yùn)行在微軟自己的AKS云服務(wù)的Linux容器中 。
要實(shí)現(xiàn)這一目的其實(shí)并不容易,博文后面部分就介紹多年來我們將代碼升級(jí)到.net 6所面臨的挑戰(zhàn)以及如何解決的 。(注意:.net core 現(xiàn)在已經(jīng)統(tǒng)一到.net 平臺(tái),這里提到.net 都指.net core,如果是.net framework 會(huì)明確指出)
代碼倉庫概述我們有超級(jí)多的代碼,光c#項(xiàng)目就超過600個(gè),一下就是分解以后的代碼占比圖
Bing 廣告平臺(tái)遷移到 .net6

文章插圖
我們有超過800萬行代碼,其中c#超過了700萬行,統(tǒng)計(jì)代碼行數(shù)雖然不能說明代碼倉庫的全部,但是可以給出一個(gè)粗略的印象我們有多大的工作量要搞 。在這超過600多個(gè)的項(xiàng)目中,我們引用了500多個(gè)不同的nuget包,而且很多依賴項(xiàng)會(huì)對(duì)遷移產(chǎn)生影響 。
我們的出發(fā)點(diǎn)多年來我們的服務(wù)發(fā)生了很大的變化,而且托管他們的基礎(chǔ)設(shè)施也發(fā)生了巨變,從物理機(jī)到云服務(wù) 。以前我們是在windows服務(wù)托管在iis上,此外我們還有大量服務(wù)構(gòu)建使用wcf,這是問題的復(fù)雜所在 。所以最開始我們的遷移只是從物理機(jī)的windows服務(wù)遷移到了云上的windows 虛擬機(jī),仍然是windows-only 。
為什么遷移到.net(.netcore)為什么我們要花費(fèi)兩年多時(shí)間從.netframework -.net 我們的技術(shù)團(tuán)隊(duì)給出了以下理由:
跨平臺(tái)好處很明顯,不用跟windows綁定了 。
.Net  代表未來.net framework 4.8 是計(jì)劃更新的 最后一個(gè)版本,很多新的特性,以及性能優(yōu)化的創(chuàng)新都只能在.net 上可用,堅(jiān)持.net framework 死路一條 。
開源更好用的工具dotnet cli 工具無需IDE借助命令行終端就可以完成很多工作,其他的感覺不是工具,就不列舉了 。
我們的遷移過程對(duì)于類庫:
.NET Framework 4.6 -> .NET Framework 4.7 -> .NET Standard 2.0
對(duì)于應(yīng)用:
.NET Framework 4.6 -> .NET Framework 4.7 -> .NET Core 3.1 -> .NET 5 -> .NET 6
.NET Standard簡(jiǎn)單理解這是一個(gè)提供了一部分公共api抽象的定義,在.net framework 跟.net 會(huì)有相應(yīng)的實(shí)現(xiàn) 。
挑戰(zhàn)主要是我們依賴的那500多個(gè)包如果更新了會(huì)有很多break changes,比如Unity這個(gè)IOC庫,支持 .NET Standard 的可用版本已經(jīng)完全重寫了其 API,我們必須更新數(shù)萬行代碼才能與這些更改兼容 。
綁定重定向地獄WCF我們重度依賴 WCF,超過45 個(gè)服務(wù)構(gòu)建在wcf之上,但是現(xiàn)在普遍看法是基于REST的服務(wù)是未來,但是我們不能這樣,因?yàn)槲覀冇袩o數(shù)個(gè)現(xiàn)有客戶大量構(gòu)建在這些 WCF 服務(wù)之上,并使用我們的 SDK 直接調(diào)用它們,告訴我們的付費(fèi)客戶,嘿,你得用GRPC這類新東西沖洗你的客戶端,這顯然不現(xiàn)實(shí),所以這是一個(gè)大問題 。
解決問題不兼容的Nuget 包這個(gè)最需要花費(fèi)時(shí)間了,對(duì)于開源的不支持.net standard 的我們?cè)趦?nèi)部自己打一個(gè)補(bǔ)丁包使得支持,對(duì)于不開源的我們也會(huì)選擇反編譯使得與.net standard 兼容 。
綁定重定向問題WCF最終,微軟決定針對(duì).Net d的wcf有限子集開源Core wcf捐獻(xiàn)給開源社區(qū) 。CoreWCF 對(duì)來自傳統(tǒng) WCF 的 System.ServiceModel 命名空間的許多現(xiàn)有類型使用全新的命名空間,因此轉(zhuǎn)換現(xiàn)有服務(wù)并非易事 。此外,我們的代碼庫中使用了如此廣泛的通用代碼,以至于我們需要在轉(zhuǎn)換過程中支持在 CoreWCF 服務(wù)和 .NET Framework 服務(wù)中運(yùn)行該代碼 。我們最終使用multi-targeting (在代碼中可以使用條件編譯指定不同平臺(tái)實(shí)現(xiàn)不同代碼,在工程文件中指定目標(biāo)平臺(tái)使用TargetFrameworks,這樣可以指定多個(gè))來實(shí)現(xiàn)這一目標(biāo) 。過程很艱辛,單總算遷移完了,所以如果您需要托管 SOAP 服務(wù)并且想要在 .NET 6 上運(yùn)行所帶來的高性能,那么 CoreWCF 是一個(gè)很好的答案 。

經(jīng)驗(yàn)總結(jié)擴(kuò)展閱讀