C# 在騰訊的發(fā)展
本文首發(fā)我的微信公眾號"dotnet跨平臺", 內(nèi)容得到大家熱烈的歡迎,全文重新發(fā)布在博客,歡迎轉(zhuǎn)載,請注明出處.
.NET 主要的開發(fā)語言是 C# , .NET 平臺泛指遵循ECMA 334 C#和 ECMA 335 CLI 標(biāo)準(zhǔn)的開發(fā)平臺 ,包括微軟自行開發(fā)的.NET 平臺和 開源實現(xiàn)的Mono 以及 微軟最新開發(fā)的.NET Core。 從2007年加入公司自今一直在使用C#, 對這門語言在 騰訊的使用情況有大概的了解,最近有空整理了一下相關(guān)的情況,破除江湖傳言 ”國內(nèi)互聯(lián)網(wǎng)公司都不用C# ”。
1、2003 ~ 2007 年
微軟在2002年發(fā)布.NET 1.0,2003年發(fā)布 .NET 1.1。由于.NET的開發(fā)效率高,2003年開始騰訊的OA系統(tǒng)也開始采用.NET進行開發(fā),早期的OA系統(tǒng)是使用cgi來開發(fā)的,2007年我接手OA的單點登錄系統(tǒng)時里面還有cgi 的兼容性代碼,那個cgi的兼容性代碼還存在著內(nèi)存泄漏問題,一直到2013年 OA登錄的重構(gòu) 才把它移除。2003年OA開發(fā)團隊開始迅速的從幾個人發(fā)展到2006年的30多人規(guī)模,公司的快速發(fā)展也要找更多的開發(fā)人員,在toby的介紹下2007年加入了騰訊,我從加入公司開始就一直負(fù)責(zé)騰訊OA基礎(chǔ)服務(wù),簡稱TOF的開發(fā)運營工作。
2003到2007 這幾年是.NET在騰訊快速發(fā)展的幾年, 最早的OA工作流-品高工作流產(chǎn)品也是用.NET開發(fā)的,2004年引入并做了二次定制性開發(fā), 我到公司后也接手維護過這一個工作流引擎,品高公司不再維護這一個版本, 2008年引入K2 工作流引擎替代它。 公司的門戶www.oa.com 曾經(jīng)是使用微軟的SharePoint 2003系統(tǒng)二次開發(fā)而成,他是由toby 負(fù)責(zé)的,他是微軟2005~2007年的MVP,也是在微軟的社區(qū)活動上認(rèn)識了toby,后來也在他的引薦下加入騰訊,工作到現(xiàn)在。當(dāng)年不僅僅OA是用.NET開發(fā)的,公司內(nèi)很多的業(yè)務(wù)運營系統(tǒng)也是用.NET開發(fā)的,開發(fā)的第一版的TAPD 也是用.NET開發(fā)的,在我到公司之前他們組建了現(xiàn)在的研發(fā)管理部用PHP重寫了TAPD,這也就開始了PHP替代asp.net的進程 ,還有很多系統(tǒng),財經(jīng)/HR/SCM/公司論壇BBS/ITIL/BOSS等等的系統(tǒng),可以說這是.NET在騰訊的頂峰時期。從2007年開始往后的時間里asp.net開發(fā)的系統(tǒng)逐步使用Python/PHP等替換,幸運的是,騰訊支付業(yè)務(wù)(前身財付通)的清算,風(fēng)控等業(yè)務(wù)從創(chuàng)立至今還在使用C#,最近我有幸轉(zhuǎn)崗到了支付清算業(yè)務(wù),繼續(xù)發(fā)揮光大C# 。
2、2007 ~ 2014 年
2007 ~ 2014年這個時間段的劃分,正是按照微軟的鮑爾默時期,微軟丟掉互聯(lián)網(wǎng)和移動互聯(lián)網(wǎng)時期。 2007年初加入騰訊時,和toby一起前往微軟總部參加微軟MVP 全球峰會,比爾蓋茨告別CEO,CEO交給了鮑爾默,一個干銷售的CEO一心想著賺更多錢的,死抱著Windows不放,導(dǎo)致互聯(lián)網(wǎng)公司都排斥使用Windows,.NET 有著天生的跨平臺理想,卻始終沒有實現(xiàn),導(dǎo)致了很多人認(rèn)為.NET只能跑在Windows上,觀念一旦形成就很難改變,在此期間開源的.NET 實現(xiàn)Mono項目卻在移動互聯(lián)網(wǎng)領(lǐng)域找到了落腳點, 基于Mono的商業(yè)項目Xamarin和Unity 分別在移動開發(fā)和游戲開發(fā)領(lǐng)域占據(jù)重要地位。
2007年初我加入騰訊,接手民哥維護騰訊OA基礎(chǔ)服務(wù)TOF,這一干就是9年,在這期間有很多同事出去創(chuàng)業(yè)了,民哥帶領(lǐng)了一班兄弟去開創(chuàng)了公司的內(nèi)網(wǎng)安全領(lǐng)域,其間開發(fā)的安全運營平臺也是用.NET 開發(fā),2013年開始也逐步用C++替代.NET開發(fā)了。公司的業(yè)務(wù)剩下使用.NET開發(fā)的項目已經(jīng)不是很多,掰著指頭就可以數(shù)得過來,目前還有財經(jīng)/行政/HR/財付通/互娛一些運營系統(tǒng)還是使用.NET開發(fā)。如果只能部署在Windows平臺上,這些系統(tǒng)遲早要被替換掉。因此,我在做騰訊OA基礎(chǔ)服務(wù)TOF的維護的同時,業(yè)余時間在研究Mono跨平臺開發(fā),通過博客,微搏宣傳Mono項目,并在實踐中進行實踐。
這個跨度的時間有7年,我也一直在進行騰訊OA基礎(chǔ)服務(wù)TOF的升級改造工作,在2014年完成了最完整的一次重構(gòu),支撐起公司內(nèi)網(wǎng)API調(diào)用千萬級別的蛻變,具體可看我的文章介紹《先定個小目標(biāo), 使用C# 開發(fā)的千萬級應(yīng)用》。公司其他使用.NET開發(fā)的系統(tǒng)也在不斷的演化,得以繼續(xù)生存下去,當(dāng)然也有很多的同學(xué)不再使用C#,轉(zhuǎn)而使用其他語言來重寫系統(tǒng)。2013年公司code平臺第一次推出了騰訊年度代碼報告:http://code.oa.com/v2/report/2013 ,開發(fā)語言前10 中不見C#的身影,我還沒有運營公眾號,這個只有內(nèi)部數(shù)據(jù),需要看具體內(nèi)容請加入鵝廠。
2014年的騰訊年度報告http://code.oa.com/v2/report/2014 〈2014騰訊代碼報告出爐 C#代碼量增長一倍〉奇跡般的c# 排到了第七,增長了1700W行,這是什么魔力讓他增長如此迅速,開發(fā)者也增長到了1563人。
在.NET應(yīng)用被其他語言不斷替代的情況下,2014年c# 的代碼卻發(fā)出了洪荒之力,主角就是基于Mono平臺的Unity 游戲開發(fā),是手游讓C# 爆發(fā)了,Unity5.1版本后全力支持VR開發(fā),今后的VR/AR領(lǐng)域C# 還會繼續(xù)發(fā)揚光大。
3、2014 ~ 未來
2014 年更換了CEO,薩特亞·納德拉接任CEO,正式開始推行開放策略,開始擁抱Linux,開源,.NET Core持續(xù)2年的開發(fā)在2016年6月27日發(fā)布RTM,在這兩年時間內(nèi)微軟轉(zhuǎn)型也很成功,微軟股價走出了一個完美的大底,現(xiàn)在剛剛開始上漲。
微軟在這兩年時間內(nèi)也完成了對Mono的開發(fā)商Xamarin 的收購,通過成立.NET基金會,效仿Apache基金會的運作來推動.NET平臺的發(fā)展,目前已經(jīng)吸收Unity,RedHat,samsung等業(yè)內(nèi)企業(yè)加入。微軟也完成了對.NET 的平臺演進規(guī)劃,下面這張圖是它的未來全貌:
2014年C# 在騰訊的發(fā)展借助于手游的發(fā)展使出洪荒之力,2014年的發(fā)展也很好,成為最有潛力的開發(fā)語言,我們來看下2015年騰訊年度代碼報告http://code.oa.com/v2/report/2015:
使用c# 的人數(shù)從1563 上升到2068,代碼增長也是千萬級,據(jù)我所知這些增長都是Unity所帶來的,在新的VR 領(lǐng)域還會看到C#的增長,在傳統(tǒng)的服務(wù)端應(yīng)用開發(fā)方面還在繼續(xù)下降,形勢不樂觀。隨著微軟發(fā)布.NET Core 1.0, 在Windows、OS X和Linux系統(tǒng)上可用了。.NET Core是一個跨平臺,開源代碼,模塊化的.NET平臺,可以用來創(chuàng)建現(xiàn)代網(wǎng)絡(luò)應(yīng)用,微服務(wù),庫和控制臺應(yīng)用程序。.NET Core現(xiàn)在在Red Hat Enterprise Linux和OpenShift上是可用的。另外,.NET Core完全被Red Hat支持并通過微軟和Red Hat之間的集成混合支持合作關(guān)系進行擴展。
這是自.NET創(chuàng)始以來最大的轉(zhuǎn)變并且會在下一個十年引領(lǐng).NET的發(fā)展。我們已經(jīng)以滿足當(dāng)今世界的需要為目標(biāo)重建了.NET基礎(chǔ): 高度分布式的云應(yīng)用,微服務(wù)和容器。.NET框架和.NET核心以及Xamarin 都是微軟重要的產(chǎn)品,將繼續(xù)分別在Windows、Linux跨平臺云計算和跨平臺移動領(lǐng)域發(fā)展。這個.NET框架和傳統(tǒng)的ASP.NET將繼續(xù)與你現(xiàn)有的工作負(fù)載相關(guān)。你可以共享代碼并且在整個.NET體系中重用你的技能,所以你可以決定用什么并且什么時候用,包括運用了Xamarin的移動應(yīng)用程序。
微軟在.Net Core 1.0 公告 列出了.NET Core 使用情況,游戲《崛起時代(Age of Ascent)》的開發(fā)商 Illyriad Games,報道稱在Azure Service Fabric上使用了ASP.NET Core之后,性能提升了10倍。網(wǎng)易,一家中國領(lǐng)先的IT公司,為內(nèi)容、游戲、社交媒體、通信和商業(yè)提供在線服務(wù),需要在不斷變化的游戲空間保持領(lǐng)先優(yōu)勢也選擇了.NET Core為后臺服務(wù)。相比以前的java后臺架構(gòu):“.NET Core縮短了我們發(fā)布周期的20%并節(jié)約了30%的工程資源成本”。當(dāng)談到吞吐量改進和成本節(jié)約時說到:“另外,它使在生產(chǎn)方面的虛擬機數(shù)量成半減少成為可能”。
總結(jié)
C#語言經(jīng)歷10幾年的發(fā)展,已經(jīng)從1.0發(fā)展到7.0,但是.NET平臺重新回歸跨平臺的設(shè)計初衷,版本號重新回歸到1.0,重新出發(fā)。C#語言在騰訊的使用情況也經(jīng)歷了高峰到低谷,我們也要重新出發(fā),我也轉(zhuǎn)崗到支付業(yè)務(wù),通過和同事們一道努力進軍tlinux,docker。
歡迎大家掃描下面二維碼成為我的客戶,扶你上云






浙公網(wǎng)安備 33010602011771號