在上個月剛剛結束的Ignite大會上,Teams產品的架構師Bill Bliss給大家奉上了最新的Teams的架構設計,之前2017年和2018年微軟的技術大會上都Teams架構的分享,但是今年大神把Teams架構講得很深入,覆蓋面很廣。我這里就挑一些,根據我的理解和各位分享一下。
先來看一下Teams客戶端的架構。?
- 三大桌面端:Web,Windows,Mac。技術棧基本統一
- 使用TypeScript,大牛Anders Hejlsberg的力作啊,此語言也是我的最愛,在web開發上快要一統江湖了
- 目前正在從Angular慢慢的轉成React,原因也很簡單,一旦全部轉成React,就可以和手機客戶端的React Native重用大量代碼,進一步降低研發成本。
- Windows和Mac桌面端使用Electron作為外殼,提供原生系統的調用能力。并且使用C++和ObjectiveC來處理音頻視頻編碼和桌面共享等功能。
- 手機平臺使用原生語言Swift和Java開發的,期待明年可以看到Kotlin的身影
再來看一下云端的架構設計:?
- 首先客戶端是和服務器端的不同service直接打交道。這點Bill Bliss也在視頻里特別提到了,這點和一般大家想象中的不太一樣,一般的架構是有一個api gateway來聚集后臺的api。我覺得teams這么做可能希望負責不同feature的每個研發團隊可以盡量獨立,完成端到端的開發。
- 云端的服務拆分的比較合理,以Teams Services作為核心
- Publish/Subscribe是和底層服務和第三方服務松耦合的一種做法,對于一個大型平臺來說,pub/sub設計用的非常多
下面兩張圖很好的介紹了消息系統,對于想做消息平臺的同學來說,非常值得學習。特別是后面一張,非常精煉的說明了消息同步的高層設計。可以看到前面說的pub/sub架構在這里的運用??
- 這里使用了long poll這種方式,是我沒有想到的,雖然我覺得long poll能適用各種復雜的網絡情況,但是不太高效,我覺得以后應該會引入類似SignalR等機制作為補充。
下面這頁說明了Teams中的附件,消息等數據是如何存儲在Office365和Azure上的。左邊一列storage是第一層存儲,后邊是第二層長期的存儲。?
- 可以看到對于數據的合規性,很多是交由Exchange來處理的,畢竟Exchange老大哥混了這么多年,已經積累的大量的compliance規則。
- Teams真的是Office365服務的集大成者,Teams底層實際上還是大量的依賴于其他服務,比如:SharePoint, Exchange, OneDrive for Business, Stream等等
Bill Bliss的整個分享視頻,可以在這里觀看:?https://myignite.techcommunity.microsoft.com/sessions/83471?source=sessions。PPT下載在這里
另外,中國微軟的牛人Ares陳老師最近出了一套的Teams開發系列視頻講座:Microsoft Teams開發入門和實踐 https://aka.ms/teamsdev163study?,從入門到精通Teams開發,對于準備從事或者正在從事Teams app開發的同學來說,絕對值得觀看!