聊聊我在微軟外服大數據分析部門的工作經歷以及關於微軟大數據平台開發及演化的一些個人見解
前言:筆者從事於傳統軟體行業十五年以上,曾就職於中國大、中、小型軟體公司及傳統企業的IT部門,也曾去過外企(日企等),自己覺得對.net各方面的開發、架構及運用,以及各類通用的軟體及行業軟體諸如OA、財務、CRM、人事及ERP、WMS、MES,GIS、BIM、教育、電商、網站、APP等都有了相當程度的了解,已經有了個人特色的編程思想。在一次偶然的機會,我去了某微軟外服公司,參與了微軟某大數據平台的開發工作,頓時感覺眼界大開、以前積累的知識經驗等完全派不上用場,彷彿進入了一片從所未知的知識海洋。微軟在大數據、雲計算、人工智慧、邊緣計算、數字孿生方面等遠遠走在了中國的前面,已經完全有了自己可演進的生態體系。在此我把在微軟外服的一些工作經歷和內容在不涉密的情況下分享出來,希望對大家有所幫助。我主要講和中國企業以及普通外企不一樣的地方,初來乍到,說的不對的地方希望各位多多指導。(注意:文章比較長,可以先收藏再查看)
目錄
- 入職、微軟帳號、工作協調和環境等
- 大數據平台:Cosmos、Object Store、Azure Data Factory、Scope語言等
- Azure和我們國家工業互聯網
- 工作氛圍和總結等
入職
我入職的是微軟某業務部門的大數據外服團隊,入職的經歷如下:
填寫大量的表格,數量僅次於二手房過戶交易和辦理過銀行按揭貸款;
體檢:公司替你預約好了體檢名額,自己預約體檢時間即可;
背調:背景調查由國外知名的背調公司進行,需要上網註冊賬戶,填寫表格、上傳證件等,這家公司應該也是微軟在全球的背調合作夥伴;
公司入職培訓:有些是線下的、有些線上的,培訓結束都需要在線進行測試,通過的標準各不相同;
微軟入職培訓:有Supplier Code of Conduct Training, Microsoft Security 101,Privacy 101等,如果申請別的許可權組,還要進行Privacy 201、Security Foundations、Windows Data Handling等的在線培訓。總結這些培訓,感到微軟在客戶的合約和服務、以及新產品的研發上市資訊等比較關注,要求所有人嚴格保密;
值得一提的是,微軟的在線培訓網站做的非常漂亮,我算是在介面和美工方面很挑剔的了,也禁不住對他們的網站感到讚歎!這裡我截兩張圖
|
|
雖然是內部網站,他們也是在頁面框架設計、照片方面精益求精、花了不少心思的。
微軟帳號、工作交互
入職兩周左右,終於收到了微軟開通的帳號,帳號的格式是[email protected],這是微軟專門為Vendor開通的帳號,據說以前還有@msn.com結尾的,現在申請不到了。有了這個帳號,我們可以給電腦加域(中國區基本是fareast域,訪問到的多數是fareast、Redmond和NorthAmerica域的資源)、登錄VPN,不受限制地訪問網路、自動激活電腦上的Windows、Office、Visual Studio等軟體,還可以申請微軟的資源許可權組和安全許可權組。部門的一些老鳥有六、七十個組,我申請了二十來個,有了許可權,你可以訪問微軟全球的資料庫、程式碼庫和內部網站。微軟公司通過VPN、AD域、Portal以及和Windows、Office套件等的全面集成,把整個公司遍布全球的海量內部資源整合起來,實現跨地域、跨時區、跨部門、跨民族和人種的工作協作;比如我們的大數據業務部門,就能經常收到Cosmos組的求助郵件;有的時候我們在處理報表的時候還能直接和微軟相關的報表研發部門進行會議溝通,而對方的工程師很可能是來自印度或越南的程式設計師小哥。他們在幫你解決問題的時候,不會管你是公司直屬部門還是Vendor,不管你是黑人、白人還是黃色人種、來自哪個派系,一視同仁地提供技術服務(這也正是比爾蓋茨推薦的《世界是平的——21世紀簡史》一書中描繪的景象);當中國的公司各部門之間還在搶奪資源和功勞、相互拆台、各自為政搞山頭主義的時候,不能為微軟的開放和平等感到羞愧嗎?
工作環境
微軟的工作區域稱之為Offsite Facility,門口有保安,進出都需要刷卡,進去後就等於進入了微軟內部的工作區域,不允許攜帶除手機外的任何電子產品;裡面各個區域都相對獨立,進入機房和會議室還要刷不同級別的卡;內部網路獨立,連重裝系統都得用微軟自己的裝機軟體,保證裝出來的系統乾淨、無毒,受到微軟的管控。然後電腦上只允許裝微軟授權的軟體(大概三四十個左右),安裝未經授權的軟體可是要受到處罰的。理論上微軟可以監控到你在電腦上的一舉一動,前些日子有人安裝了adobe的軟體,微軟立馬就給所有的Vendor發警告郵件,要求卸載。所以我們國家一些重要的政府機關都有封閉的內部網路,從外部需要通過堡壘機訪問;國家還在晶片、作業系統研發上投入巨資(也被PPT和打磨的晶片騙走不少錢),就是出於安全上的考慮;都用老美的晶片和系統,對FBI、CIA等就沒有秘密可言了。
每個工位配備兩台顯示器(也有的工位使用三台,看見一位女孩在那邊熟練地操縱)、一副耳麥(因為經常要和國外sync up),電腦都是最新11代i7晶片。工作環境從作業系統到應用軟體是全英文的,使用在線的office文檔編輯(前身可能是OWA)、通訊使用Team軟體(類似於騰訊QQ+騰訊會議),可以錄屏(微軟官方很大部分培訓影片都是用Team錄的),收發郵件也是全英文的,需要一定的英文基礎,建議培訓班出來同學不要來這裡工作,英文這關過不了。
微軟班車
微軟班車稱之為MS Connector,在全市有近40條線路(節假日也有),站點遍布全市各個角落,數量可以裝備一個小型城市的公交線路;班車有手機APP(據說鵝廠也有APP),APP里可以查每一條線路、每個站點、每一輛車的實時位置。上車需刷卡,刷卡機也是聯網的,理論上只要刷卡上車,不管幾點到公司,就算是考勤成功了。
|
|
|
工作
微軟該部門總部在美國西雅圖,有十幾個人,和我們對接的是該部門的主管和高程都是華人,由此可見華人在微軟公司內部擔任了相當重要的崗位,也是微軟的中堅力量,不過我看了下他們的書面英語都不怎麼樣(笑,其實英語的文法是很美的,一點不亞於中文的唐詩宋詞)。通過Outlook的部門層級示意,大家可以清晰地看到自己在微軟公司內部處於怎麼樣的一個層級位置:

大數據平台
我們使用的大數據平台包括微軟的Cosmos、Object Store、Azure Data Lake等。其實微軟也是很早就進行大數據平台研發並投入產品使用的公司之一,只不過他們的Cosmos、Object Store以及周邊的開發平台等一直只在內部使用。不像Hadoop等很早就開源並為人熟知。據說微軟會把Cosmos一部分功能開放出來,不知道目前情況怎樣(Azure上的Cosmos DB和Cosmos不一樣);微軟也在Azure上提供了稱之為HD Insight群集的功能,包括Hadoop、Spark、Storm等多種開源大數據技術,可以使用多種語言的SDK、以及在Visual Studio上使用Hive、Pig等進行開發。
Cosmos
Cosmos應該是微軟最早的大數據平台,一直用到現在。既然是大數據,那麼它有多大呢?我這裡截了張圖,是某個VC(Virtual Cluster)某天的數據量。
可以看到,這個虛擬卷上的總數據量達到了4.3EB。我們知道,1EB=1024PB、1PB=1024TB、1TB=1024GB,我計算了一下,如果用1TB的台式機硬碟裝這些數據,約需要450萬塊,這些硬碟首尾相連可以從南京排到上海,再從上海排回南京。這還可能只是微軟某一個數據中心的數據量。各個業務部門使用的數據量也十分驚人,都在幾百PB級別,有的上了EB。進入目錄,目錄和單個文件的大小也是驚人的:
![]() |
![]() |
這些文件里存放著各種結構化、非結構化的數據資訊。在一定的時間內對這些文件處理,並且提煉出相應的有用的資訊,這就是大數據處理和分析平台的作用。
Cosmos應該是Windows Server + Java開發的,這可以從一些出錯資訊看到。
Scope語言
在Cosmos上處理數據、編程開發的語言叫Scope,在我看來,Scope是種DSL(Domain Specific Language,詳見Martin Flow 的《領域特定語言》一書);我覺得它是一種由模板語言、腳本語言、T-SQL、LINQ、Lambda和C#組成的混合體。Scope腳本上傳到Cosmos後,由內置的C++解釋器轉譯成C#,再由編譯器編譯成IL,執行。大家可以看到,這段程式碼的目標框架是.Net Framework4.7.2,不知道如果改成.net5或者.net6,性能上是否有所提高,我想Cosmos執行的job應該是IO密集型而不是CPU密集型,不管使用什麼樣的靜態語言編寫,最終效果差別不會太大。下面是原始的Scope腳本和轉譯後的Scope腳本:
![]() |
![]() |
大家可以看到,轉譯後的程式碼里那些標記、佔位符、Linq等都轉換成了可處理的Row類和Process等類的子類,方便Cosmos調度執行。
從上面看出來我感覺Scope的編譯器並沒有優化功能,只是老老實實的把原始流程分解成一步步調度執行,這樣一旦開發人員能力水平不高,會使得編寫的job佔用大量的CPU和IO,經常超時等。所以Cosmos上的job會產生各種狀況,相同的數據和程式碼執行時間會相差很多,執行失敗的腳本默認有三次重試。
在Cosmos上執行的任務及調度器,微軟的開發團隊都提供了相應的Visual Studio插件來管理,可以很方便的在VS中編寫腳本、發布任務、實時查看作業的完成情況,每一步的資源消耗等,一些資訊也可以在Azure上查看:
![]() |
![]() |
![]() |
大家可以看到,單表的數據量有400多億條,幾TB的數據量;拆解出來的每個處理步驟一般能夠在分鐘級別進行篩選、置換、聚合等操作。
Cosmos平台提供了數據存放,執行Scope腳本的功能,那麼面對每天產生的大量的增量數據,需要有一定作業調度功能,才能夠按每小時、每日、每周乃至每月定時執行一些分析任務。
對大數據平台上的數據進行調度處理的平台,我們用過了Sangam、Xflow和Azure Data Factory。
Sangam
Sangam應該是針對Cosmos較早的作業調度平台,在14年前後使用的團隊比較多,目前處於棄用的階段。

Xflow
Xflow平台功能和Sangam的差不多,多了一些可選功能和其他作業的調度功能,在通常情況下也能正常使用,不過最近也有傳言也進入了廢棄期,以下是xflow的任務執行時序圖。

ADF(Azure Data Factory)
我感覺ADF是微軟大數據調度處理集大成的產品,目前已經發展到了第二代,開放給外部使用,它基於Azure雲提供服務,整合了自家和市面上各種關係型、非關係型數據平台,只有你想不到的,沒有它做不到的,支援的部分數據源如下圖。如果數據源在內網,可以使用免費的Azure代理和雲端進行數據交換。ADF能夠調用Azure Function、WebApplication、HD Insight等種種複雜的功能,執行python、java包,執行機器學習,有著完整的流程處理介面,並且編程環境和自家的Azure DevOps無縫整合,使用git或者tfs進行源碼管理,內部整合了全套CI/CD的功能,支援敏捷、CMMI等開發模式。從內部到外部、橫向縱向都整合了起來。微軟自從研發SSIS(Sql Server Integration Service,見《Professional Microsoft SQL Server 2012 Integration Services》)的年代開始,就在為統一各種數據平台、進行的數據的傳輸、過濾、轉換、計算而努力,而據我看來Azure Data Factory應該是秉承這方面的思想而開發的,到目前為止,市面上應該還沒有的類似的能與之競爭的產品,最多也只可能在某一點上對其進行模仿。
ADF底層我猜想還是用微軟自家的WF(Windows Workflow)中的順序工作流、狀態機工作流進行作業管理和調度。
|
|
|
ADF介面 |
||
Object Store
除了Cosmos資料庫外,我們還使用了Object Store。Object Store是微軟適應當下的大數據分析發展趨勢,基於新一代AI+ R生態而開發的Key-Value哈希型資料庫,提供了非常恐怖的訪問性能和基於GPU加速,能夠進行圖遍歷、機器學習、神經網路計算等。根據官方的文檔,key的大小限制在4k,value限制在16兆以內,而單表的大小是沒有限制的,很多表超過了20PB;如此大的數量,使用不同的存儲介質(Memory,SSD,HDD)都能夠提供毫秒級的數據訪問時間。針對每個表,有著稱之為CoProcessor(協程)來處理和業務所需要的數據,還有一些常駐的機器學習程式碼,下面放一張整體的架構圖:

大數據平台的不穩定性和微軟的Bug以及我們的應對方法
前面提到過,微軟的大數據平台並不是一個完全堅固和穩定的系統(微軟很多產品都是Bug多多,我同事說微軟的某個Sharepoint版本的js腳本像是實習生寫的),基於集群伺服器數量大小、數據量大小和同時進行的作業數量、網路延遲等,數據的調度和分析結果充滿了各種不確定性。在我們平台運行著一千多個作業,每天都要收到數十封作業失敗、延遲的郵件;有的作業連續兩天執行失敗,第三天又好了,有的作業執行失敗,經查看是內部某台伺服器上某個文件缺失的原因;有些由其他團隊維護的依賴文件今天沒有按時生成,導致我們的作業一直沒有按時執行;連續失敗若干次的作業會被隔離,今天不再繼續執行。
面對數據源的不穩定和處理系統的相對脆弱,為了交給客戶一個穩定、滿意的產品,我們中國的程式設計師在這方面進行了艱苦卓絕的努力,凝聚著團隊的智慧和汗水。舉某一方面例子,大家知道對於每天生成的數據,需要查看結果最好的方法是每天定時執行某個數據處理的腳本,但是,如果到了這個時間點,原始數據還沒有生成怎麼辦?今天就不再執行了嗎?缺了一天的數據隔天需要補嗎?如果數據又在後面某個時間點出現了,該不該、該如何通知程式以及後續的任務順序執行?每個作業的優先順序、並行度該如何設置比較合適?某些任務不容易在伺服器上提交成功,應該有怎樣的補救措施?這些都需要我們進行編碼解決。在ADF流程中,處處充滿了防禦式的編程,我們合理調用微軟Azure上的各種Function、Web hook等,實現了諸如依賴文件檢測、失敗任務優化提交等功能,保證了數據正常處理和使用,也一直得到國外同行和主管的高度評價。
|
|
一些出錯資訊,文件沒找到(可見最底層程式碼是java)、自己把任務取消了、執行下去沒有得到響應等 |
|
聊聊微軟Azure雲和我們國家工業互聯網之間的關係
由中國華為、電信、航天科工、三一集團等組成工業物聯網產業聯盟(AII)近期發布的《工業互聯網體系架構(版本2.0)》中,從能力、應用、商業、產業四個層面對中國工業互聯網產業進行了業務界定。其中用到的關鍵技術如5G、邊緣計算、區塊鏈、工業人工智慧、數字孿生等,微軟Azure早就都提供了相應的、開箱即用的低程式碼、零程式碼解決方案。具體如下:
設備層和數據彙集、感知層:
微軟Azure提供了諸如IOT HUB、IOT Center這樣的產品,方面用戶採集數據,進行設備通訊和管控;通常情況下,對一個中型企業做數據採集,其採集點往往有數十萬個,自己編寫程式去對接,耗時耗力,程式的穩定性、可靠性還不容易掌控,這些交由雲端的IOT HUB處理,按照節點數量和時長付費,省去很多精力、也不用自己去做運維,實際上是很節約成本的。
邊緣計算:
微軟提供了IOT Edge的託管服務,在 IoT Edge 設備上本地部署的智慧,將特定工作負荷遷移到網路邊緣,並在GitHub上提供了免費的SDK開發包;甚至可以提供了搭載Intel或者nVidia的晶片的智慧硬體設備(可能中國購買和租借不到)在現場進行分析和計算。
區塊鏈:
微軟早在2015年就在Azure里提供了區塊鏈服務,不過近期關閉,用戶可以從應用市場中使用由ConsenSys公司提供的Quorum服務或者使用VM鏡像,使用體驗等同於微軟其他Azure產品。
人工智慧:
這方面Azure提供的產品更加多了,有視覺識別、人臉識別、表單識別、語義分析、機器學習、認知服務、語音服務等,而且都是低程式碼和零程式碼實現,很容易和需求進行對接,有興趣的朋友可以自己去微軟Azure上面去看。
數字孿生:
配合Azure和微軟的Helolens2等產品,結合Unity3d、虛幻引擎等,可以非常方便的搭建出數字孿生平台。微軟幫助中心有一些教材,比如使用風力發電站進行數字孿生模擬的教程,非常簡單,並且還有影片指導。(使用 Azure 數字孿生和 Unity 生成混合現實數字孿生體 ; 使用 Azure 數字孿生和 Unity 將 IoT 數據連接到 HoloLens 2)
5G技術:
我覺得中國對他的宣傳是有些過頭了,技術封鎖、晶片斷供使得華為這樣的龍頭老大都沒法在新出的旗艦手機上使用5G功能。
微軟的產品給人以簡單易用的印象,通過編程和抽象來隱藏內部的複雜性,表面上給用戶一個簡單易用的產品;當中國的小微企業、初創公司還在進行新的技術探索、理論上的研究和論證以及重複造輪子的時候,微軟早就提供了低成本、簡單易用的全家桶產品了。
當然,我們國家這方面的建設不太可能去使用微軟現成的技術(使用的話也會採用由世紀互聯運營的Azure,符合中國政策法規),否則政府的補貼、投入會落入何處?我們國家對新技術的運用和推廣採取自上而下的行政手段,結合每年的財政預算,使得社會財富進行再次分配,這也是具有中國特色的遊戲規則;當然缺點也很明顯,宏觀大於微觀,沒有執行層面上的戰術和細節,也沒有進行市場化的論證,這樣的效率也是顯而易見的;中國製造業大而不強,在沿海一些較為發達的城市,很多企業的管理人員連Excel都沒有用起來,還在一家客戶每年用一本本賬冊手工記賬。中國企業的資訊化、數字化、智慧化發展路線何時能夠實現呢?
工作氛圍等
公司規定按照國家的規定上下班。到了上班的點,放眼望去,上百人的工位才稀稀拉拉來了幾個人,一刻鐘後,大家才陸陸續續過來,也不知道幾點鐘前人會到齊;到了下午兩三點鐘,扭頭一看,已經有人關機走人了;如果覺得不舒服或者有事,和領導說一聲就能走;一些人連續幾天都不見蹤影;到了國慶春節等,大家都按照最強攻略在節假日間請滿假期,在家十幾二十天,也沒有人說什麼;上班的時候有人打盹睡覺、玩模擬器遊戲的,別人看到了也當作沒看到,HR和公司領導也不會來管;進公司前,已經明確告知公司不提倡加班,實在有事需要工作加班的,必須提前申請和逐級批複,手續還特別麻煩;一次我下班稍微晚走了十幾分鐘,碰到保安已經在問裡面剩幾個準備趕人回家了。
就是這樣的公司,我上網查了下今年上半年居然還盈利了好幾個億。在中國的很多公司,在進公司前,老闆先一遍遍給你洗腦:馬雲、十八羅漢、阿里巴巴、納斯達克敲鐘、全員持股等;上班後每天工作前又唱又跳喊口號,講奮鬥和勵志故事,給你畫大餅、打雞血;然後就是996、7117,好一點的大小周;員工每個人每天都工作到很晚,假裝在認真工作,其實啥活都沒幹、都在騙公司晚飯、夜宵和打車費用。這樣的公司,到最後不是拿不出產品,就是被內耗拖垮,不到半年、一年就關門大吉。
我們和這樣的公司相比,簡直是是一個天一個地。其中的差別就在於企業工作內容附加值的巨大差異。我們的團隊,支撐起了微軟某一方面全球業務的大數據分析工作,為微軟公司帶來了很高的利潤。中國的企業,老闆們還在絞盡腦汁地想怎麼拓展業務、打擊同行對手,怎麼圈錢、套路別人、開個皮包公司倒買倒賣騙錢騙補貼;相比這樣的公司我們實在是太高大上了。我們的企業該有的福利一樣不少,還有著優秀的人才、傑出的團隊、做著先進的、一流的工作,這還不是每個碼農所嚮往的好公司嗎?
我希望中國有更多的像這樣高附加值的軟體企業誕生,靠著良好的業務和工作氛圍,通過我們每一個新生代IT農民工的自覺、自律和每個人的自我價值實現,進而帶動整個軟體行業生態向著良性的、健康的、可持續化的的方面去發展,最終實現整個中華民族的繁榮和復興!








