Teams架構剖析(2019年版本)

在上個月剛剛結束的Ignite大會上,Teams產品的架構師Bill Bliss給大家奉上了最新的Teams的架構設計,之前2017年和2018年微軟的技術大會上都Teams架構的分享,但是今年大神把Teams架構講得很深入,覆蓋面很廣。我這里就挑一些,根據我的理解和各位分享一下。

先來看一下Teams客戶端的架構。?TeamsArch

  • 三大桌面端:Web,Windows,Mac。技術棧基本統一
  • 使用TypeScript,大牛Anders Hejlsberg的力作啊,此語言也是我的最愛,在web開發上快要一統江湖了
  • 目前正在從Angular慢慢的轉成React,原因也很簡單,一旦全部轉成React,就可以和手機客戶端的React Native重用大量代碼,進一步降低研發成本。
  • Windows和Mac桌面端使用Electron作為外殼,提供原生系統的調用能力。并且使用C++和ObjectiveC來處理音頻視頻編碼和桌面共享等功能。
  • 手機平臺使用原生語言Swift和Java開發的,期待明年可以看到Kotlin的身影

再來看一下云端的架構設計:?TeamsArch

  • 首先客戶端是和服務器端的不同service直接打交道。這點Bill Bliss也在視頻里特別提到了,這點和一般大家想象中的不太一樣,一般的架構是有一個api gateway來聚集后臺的api。我覺得teams這么做可能希望負責不同feature的每個研發團隊可以盡量獨立,完成端到端的開發。
  • 云端的服務拆分的比較合理,以Teams Services作為核心
  • Publish/Subscribe是和底層服務和第三方服務松耦合的一種做法,對于一個大型平臺來說,pub/sub設計用的非常多

下面兩張圖很好的介紹了消息系統,對于想做消息平臺的同學來說,非常值得學習。特別是后面一張,非常精煉的說明了消息同步的高層設計。可以看到前面說的pub/sub架構在這里的運用?TeamsArch?TeamsArch

  • 這里使用了long poll這種方式,是我沒有想到的,雖然我覺得long poll能適用各種復雜的網絡情況,但是不太高效,我覺得以后應該會引入類似SignalR等機制作為補充。

下面這頁說明了Teams中的附件,消息等數據是如何存儲在Office365和Azure上的。左邊一列storage是第一層存儲,后邊是第二層長期的存儲。?TeamsArch

  • 可以看到對于數據的合規性,很多是交由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開發的同學來說,絕對值得觀看!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277989.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277989.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277989.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pycharm工具下代碼下面顯示波浪線的去處方法

近期安裝了python后,發現使用pycharm工具打開代碼后發現代碼下邊會有波浪線的顯示;但是該代碼語句確實沒有錯誤,通過查詢發現了兩種方法去掉該波紋的顯示,下面就具體說明一下: 方法一: 打開pycharm在右下方…

js面向對象與PHP面向對象總結

js面向對象: 1.什么是對象? 對象:任何實體都是對象,擁有屬性和方法兩大特征 屬性:描述事物的特點; 方法:實物擁有的行為; 2.在JS里 Person.name"zhang" Person.fnfunction…

面向全球用戶的Teams app之Culture數字篇

我前幾周在微軟Ignite the Tour北京大會上,分享了如何開發一款面向全世界用戶的Teams App,里面介紹了在開發Global Ready的app時會遇到的各種挑戰,反響很好。所以我準備寫幾篇文章,將這些內容分享給沒有時間參加大會的同學。 這篇…

Dubbo原理與框架設計

Dubbo是常用的開源服務治理型RPC框架,在之前osgi框架下不同bundle之間的方法調用時用到過。其工作原理和框架設計值得開源技術愛好者學習和研究。 一、Dubbo的工作原理 調用關系說明 服務容器負責啟動,加載,運行服務提供者。服務提供者在啟動…

面向全球用戶的Teams app之Culture計量單位和禁忌篇

我在前一篇文章里分享了Global Ready的app時會遇到的不同文化對于數字方面的挑戰。這篇我繼續分享不同文化對于計量單位和禁忌方面的挑戰。 我們先來看一個例子,假如有一個teams bot,它告訴你一些動物的速度,比如它告訴你: 獵豹能…

【我的Android進階之旅】Android自定義Lint實踐

背景 2017年8月份的時候,我在公司開始推廣Lint、FindBugs等靜態代碼檢測工具。然后發現系統自帶的Lint檢測的Issue不滿足我們團隊內部的特定需求,因此去自定義了部分Lint規則。這個檢測運行了大半年,運行良好,團隊的代碼規范也有了…

存儲結構與索引

一、SQL數據存儲的基本介紹 數據庫中的數據存儲涉及頁(Page)和區(Extent)這兩個概念了。SQL server中數據存儲的基本單位是頁。為數據庫中的數據文件(.mdf或.ndf)分配的磁盤空間可以從邏輯上劃分成頁(從0到…

面向全球用戶的Teams app之時區篇

我在前兩篇文章里分享了Global Ready的app時會遇到的不同文化的挑戰。這篇我繼續分享在時區方面的挑戰。 時間是最復雜的,最容易出錯的部分。時間復雜的最根本原因是時區問題。 首先,大家都知道,我們地球是圓的,這個意味著如果大…

Linux: Nginx proxy_pass域名解析引發的故障

背景 業務架構: 部署細節:  兩容器均部署在同一機器上,通過 docker-compose 編排,并且通過link方式鏈接。 故障描述 在有次更新代碼時,發現前端能夠打開,但是所有接口請求全是502(Bad GateWay) 故障排查 …

Oracle建立全文索引詳解

Oracle建立全文索引詳解1.全文檢索和普通檢索的區別 不使用Oracle text功能,當然也有很多方法可以在Oracle數據庫中搜索文本,比如INSTR函數和LIKE操作: SELECT *FROM mytext WHERE INSTR (thetext, Oracle) > 0; SELECT * FROM mytext WHE…

面向全球用戶的Teams app之夏令時篇

我在前兩篇文章里分享了Global Ready的teams app時會遇到的不同挑戰。這篇我繼續分享在夏令時方面的挑戰。 夏令時,主要是為了節約能源,英文里通常縮寫成DST(Daylight Saving Time)。一般在天亮早的夏季人為將時間調快一小時,可以使人早起早…

爬取全部的校園新聞

1.從新聞url獲取新聞詳情: 字典,anews 2.從列表頁的url獲取新聞url:列表append(字典) alist 3.生成所頁列表頁的url并獲取全部新聞 :列表extend(列表) allnews *每個同學爬學號尾數開始的10個列表頁 4.設置合理的爬取間隔 import time import…

面向全球用戶的Teams app之合規性篇

我在前兩篇文章里分享了Global Ready的app時會遇到的不同挑戰。這篇我繼續分享在合規性方面的挑戰。 說到合規性compliance,不得不說GDPR標準,當我們發布了一個teams app后,微軟會要求開發人員做一個security self assessment,這…

C進階 - 內存四驅模型

一.內存四驅模型 不知我們是否有讀過 《深入理解 java 虛擬機》這本書,強烈推薦讀一下。在 java 中我們將運行時數據,分為五個區域分別是:程序計數器,java 虛擬機棧,本地方法棧,java 堆,方法區。…

行內元素中去掉文字的上下間距,使得文字所在元素的高度同字體高度一致的方法...

之前在p這類塊元素中的文字,給line-hight1;就可以去掉文字自帶的上下間距, 像這樣: 最近突然發現這個方法在行內塊和塊元素上好使,可當用在span或者a這類內聯元素上都不好使,除了轉為塊元素的方法來去掉上下間距&#…

VSCode的Teams插件

隨著今年在線的Build大會的結束,又是一大波的 Teams 新功能,新工具,新SDK。我接下來幾篇博客就會詳細和大家一一介紹。我今天先從VSCode的插件開始。 打開VS Code,搜索Teams,就可以找到Microsoft Teams Toolkit插件&a…

ADB原理,Wi-Fi連接,常用命令及拓展

Android 開發筆記 onGithub 文章多處鏈接需要科學上網 本文按順序主要講解了ADB的原理,使用Wi-Fi連接設備,ADB常用命令,在Java代碼中執行shell命令,使用ddmlib進行擴展。 ADB的原理 參考 官方文檔 ADB(Android Debug B…

使用Flow快速開發Teams小應用

繼續我的上一篇博客,這篇繼續介紹BUILD大會里的內容:Flow。 Flow是微軟power平臺的一個服務,通過簡單的拖拽就可以完成一個業務邏輯的處理,現在Flow和Teams的結合十分緊密。我們來試一下。 先點擊Teams左邊的Flow菜單。 如果你的…

python正則中如何匹配漢字以及encode(‘utf-8’)和decode(‘utf-8’)的互轉

正則表達式&#xff1a;  [\u2E80-\u9FFF]$ 匹配所有東亞區的語言   [\u4E00-\u9FFF]$ 匹配簡體和繁體   [\u4E00-\u9FA5]$ 匹配簡體   <input type"text" name"username" οnkeyup"valuevalue.replace([\u4E00-\u9FA5]$)"> 正則表…

【區塊鏈】認識區塊鏈的基本概念

2018年區塊鏈技術風卷全球&#xff0c;似乎大家都在談論區塊鏈&#xff0c;那到底什么區塊鏈&#xff0c;區塊鏈到底能干什么&#xff0c;對普通人會有什么影響&#xff0c;很多人還是稀里糊涂&#xff0c;那么就談談我的一些理解吧&#xff0c;拋磚引玉歡迎探討。 我是如何接觸…