C# 在騰訊的發展

.NET 主要的開發語言是 C# ,.NET 平臺泛指遵循ECMA 334 C#和 ECMA 335 CLI 標準的開發平臺,包括微軟自行開發的.NET 平臺和開源實現的Mono 以及微軟最新開發的.NET Core。從2007年加入公司自今一直在使用C#, 對這門語言在騰訊的使用情況有大概的瞭解,最近有空整理了一下相關的情況,破除江湖傳言”國內互聯網公司都不用C# ”。

1、2003 ~ 2007 年

微軟在2002年發佈.NET 1.0,2003年發佈 .NET 1.1。由於.NET的開發效率高,2003年開始騰訊的OA系統也開始採用.NET進行開發,早期的OA系統是使用cgi來開發的,2007年我接手OA的單點登錄系統時裏面還有cgi的兼容性代碼,那個cgi的兼容性代碼還存在着內存泄漏問題,一直到2013年 OA登錄的重構才把它移除。2003年OA開發團隊開始迅速的從幾個人發展到2006年的30多人規模,公司的快速發展也要找更多的開發人員,在toby的介紹下2007年加入了騰訊,我從加入公司開始就一直負責騰訊OA基礎服務,簡稱TOF的開發運營工作。

2003到2007 這幾年是.NET在騰訊快速發展的幾年, 最早的OA工作流-品高工作流產品也是用.NET開發的,2004年引入並做了二次定製性開發, 我到公司後也接手維護過這一個工作流引擎,品高公司不再維護這一個版本, 2008年引入K2 工作流引擎替代它。公司的門戶OA - The Industry Standard for Industrial Automation & Control 曾經是使用微軟的SharePoint 2003系統二次開發而成,他是由toby 負責的,他是微軟2005~2007年的MVP,也是在微軟的社區活動上認識了toby,後來也在他的引薦下加入騰訊,工作到現在。當年不僅僅OA是用.NET開發的,公司內很多的業務運營系統也是用.NET開發的,開發的第一版的TAPD 也是用.NET開發的,在我到公司之前他們組建了現在的研發管理部用PHP重寫了TAPD,這也就開始了PHP替代asp.net的進程,還有很多系統,財經/HR/SCM/公司論壇BBS/ITIL/BOSS等等的系統,可以說這是.NET在騰訊的頂峯時期。從2007年開始往後的時間裏asp.net開發的系統逐步使用Python/PHP等替換,幸運的是,騰訊支付業務(前身財付通)的清算,風控等業務從創立至今還在使用C#,最近我有幸轉崗到了支付清算業務,繼續發揮光大C# 。

2、2007 ~ 2014 年

2007 ~ 2014年這個時間段的劃分,正是按照微軟的鮑爾默時期,微軟丟掉互聯網和移動互聯網時期。2007年初加入騰訊時,和toby一起前往微軟總部參加微軟MVP 全球峯會,比爾蓋茨告別CEO,CEO交給了鮑爾默,一個幹銷售的CEO一心想着賺更多錢的,死抱着Windows不放,導致互聯網公司都排斥使用Windows,.NET 有着天生的跨平臺理想,卻始終沒有實現,導致了很多人認爲.NET只能跑在Windows上,觀念一旦形成就很難改變,在此期間開源的.NET 實現Mono項目卻在移動互聯網領域找到了落腳點,基於Mono的商業項目Xamarin和Unity 分別在移動開發和遊戲開發領域佔據重要地位。

2007年初我加入騰訊,接手民哥維護騰訊OA基礎服務TOF,這一干就是9年,在這期間有很多同事出去創業了,民哥帶領了一班兄弟去開創了公司的內網安全領域,其間開發的安全運營平臺也是用.NET 開發,2013年開始也逐步用C++替代.NET開發了。公司的業務剩下使用.NET開發的項目已經不是很多,掰着指頭就可以數得過來,目前還有財經/行政/HR/財付通/互娛一些運營系統還是使用.NET開發。如果只能部署在Windows平臺上,這些系統遲早要被替換掉。因此,我在做騰訊OA基礎服務TOF的維護的同時,業餘時間在研究Mono跨平臺開發,通過博客,微搏宣傳Mono項目,並在實踐中進行實踐。

這個跨度的時間有7年,我也一直在進行騰訊OA基礎服務TOF的升級改造工作,在2014年完成了最完整的一次重構,支撐起公司內網API調用千萬級別的蛻變,具體可看我的文章介紹《先定個小目標, 使用C# 開發的千萬級應用》。公司其他使用.NET開發的系統也在不斷的演化,得以繼續生存下去,當然也有很多的同學不再使用C#,轉而使用其他語言來重寫系統。2013年公司code平臺第一次推出了騰訊年度代碼報告:code.oa.com/v2/report/2,開發語言前10 中不見C#的身影,我還沒有運營公衆號,這個只有內部數據,需要看具體內容請加入鵝廠。

2014年的騰訊年度報告code.oa.com/v2/report/2 〈2014騰訊代碼報告出爐 C#代碼量增長一倍〉奇蹟般的c# 排到了第七,增長了1700W行,這是什麼魔力讓他增長如此迅速,開發者也增長到了1563人。


在.NET應用被其他語言不斷替代的情況下,2014年c# 的代碼卻發出了洪荒之力,主角就是基於Mono平臺的Unity 遊戲開發,是手遊讓C# 爆發了,Unity5.1版本後全力支持VR開發,今後的VR/AR領域C# 還會繼續發揚光大。

3、2014 ~ 未來

2014 年更換了CEO,薩特亞·納德拉接任CEO,正式開始推行開放策略,開始擁抱Linux,開源,.NET Core持續2年的開發在2016年6月27日發佈RTM,在這兩年時間內微軟轉型也很成功,微軟股價走出了一個完美的大底,現在剛剛開始上漲。

微軟在這兩年時間內也完成了對Mono的開發商Xamarin 的收購,通過成立.NET基金會,效仿Apache基金會的運作來推動.NET平臺的發展,目前已經吸收Unity,RedHat,samsung等業內企業加入。微軟也完成了對.NET 的平臺演進規劃,下面這張圖是它的未來全貌:

2014年C# 在騰訊的發展藉助於手遊的發展使出洪荒之力,2014年的發展也很好,成爲最有潛力的開發語言,我們來看下2015年騰訊年度代碼報告code.oa.com/v2/report/2


使用c# 的人數從1563 上升到2068,代碼增長也是千萬級,據我所知這些增長都是Unity所帶來的,在新的VR 領域還會看到C#的增長,在傳統的服務端應用開發方面還在繼續下降,形勢不樂觀。隨着微軟發佈.NET Core 1.0, 在Windows、OS X和Linux系統上可用了。.NET Core是一個跨平臺,開源代碼,模塊化的.NET平臺,可以用來創建現代網絡應用,微服務,庫和控制檯應用程序。.NET Core現在在Red Hat Enterprise Linux和OpenShift上是可用的。另外,.NETCore完全被Red Hat支持並通過微軟和Red Hat之間的集成混合支持合作關係進行擴展。

這是自.NET創始以來最大的轉變並且會在下一個十年引領.NET的發展。我們已經以滿足當今世界的需要爲目標重建了.NET基礎: 高度分佈式的雲應用,微服務和容器。.NET框架和.NET核心以及Xamarin 都是微軟重要的產品,將繼續分別在Windows、Linux跨平臺雲計算和跨平臺移動領域發展。這個.NET框架和傳統的ASP.NET將繼續與你現有的工作負載相關。你可以共享代碼並且在整個.NET體系中重用你的技能,所以你可以決定用什麼並且什麼時候用,包括運用了Xamarin的移動應用程序。

微軟在.Net Core 1.0 公告 列出了.NET Core使用情況,遊戲《崛起時代(Age of Ascent)》的開發商 Illyriad Games,報道稱在Azure Service Fabric上使用了ASP.NET Core之後,性能提升了10倍。網易,一家中國領先的IT公司,爲內容、遊戲、社交媒體、通信和商業提供在線服務,需要在不斷變化的遊戲空間保持領先優勢也選擇了.NET Core爲後臺服務。相比以前的java後臺架構:“.NET Core縮短了我們發佈週期的20%並節約了30%的工程資源成本”。當談到吞吐量改進和成本節約時說到:“另外,它使在生產方面的虛擬機數量成半減少成爲可能”。

總結

C#語言經歷10幾年的發展,已經從1.0發展到7.0,但是.NET平臺重新迴歸跨平臺的設計初衷,版本號重新迴歸到1.0,重新出發。C#語言在騰訊的使用情況也經歷了高峯到低谷,我們也要重新出發,我也轉崗到支付業務,通過和同事們一道努力進軍tlinux,docker。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章