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.mzph.cn/news/277989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm工具下代码下面显示波浪线的去处方法

近期安装了python后,发现使用pycharm工具打开代码后发现代码下边会有波浪线的显示;但是该代码语句确实没有错误,通过查询发现了两种方法去掉该波纹的显示,下面就具体说明一下: 方法一: 打开pycharm在右下方…

js面向对象与PHP面向对象总结

js面向对象: 1.什么是对象? 对象:任何实体都是对象,拥有属性和方法两大特征 属性:描述事物的特点; 方法:实物拥有的行为; 2.在JS里 Person.name"zhang" Person.fnfunction…

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)。一般在天亮早的夏季人为将时间调快一小时,可以使人早起早…

面向全球用户的Teams app之合规性篇

我在前两篇文章里分享了Global Ready的app时会遇到的不同挑战。这篇我继续分享在合规性方面的挑战。 说到合规性compliance,不得不说GDPR标准,当我们发布了一个teams app后,微软会要求开发人员做一个security self assessment,这…

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

之前在p这类块元素中的文字,给line-hight1;就可以去掉文字自带的上下间距, 像这样: 最近突然发现这个方法在行内块和块元素上好使,可当用在span或者a这类内联元素上都不好使,除了转为块元素的方法来去掉上下间距&#…

VSCode的Teams插件

随着今年在线的Build大会的结束,又是一大波的 Teams 新功能,新工具,新SDK。我接下来几篇博客就会详细和大家一一介绍。我今天先从VSCode的插件开始。 打开VS Code,搜索Teams,就可以找到Microsoft Teams Toolkit插件&a…

使用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;抛砖引玉欢迎探讨。 我是如何接触…

将Teams Template升级到dotnet core 3.1

为了方便开发者开发Teams应用&#xff0c;我在2018年做了dotnet c#的一套模板&#xff0c;这套模块一共有三种类型&#xff0c;一个是Teams OutgoingWebhook&#xff0c;一个是MessagingExtension&#xff0c;还有一个就是Tab。 今天特地去nuget上看了一下&#xff0c;下载量还…

【动态规划】cf1034C. Region Separation

质因数分解套路的复杂度分析的动态规划 题目大意 有一颗$n$个节点有点权的树&#xff0c;初始整棵树为$1$号区域&#xff0c;要求满足下列规则&#xff1a; 除非$i$是最后一个等级&#xff0c;否则每一个$i$级区域都要被分成至少两个$i1$级区域对于每种等级&#xff0c;每个点必…

【数据结构】线性表(一):顺序列表

线性表(linear_list)是最常用且最简单的一种数据结构&#xff0c;简言之&#xff0c;一个线性表是n个数据元素的有序序列。 例如&#xff1a;&#xff08;a1 , ... , ai-1 , ai , ai1 , ... , an)&#xff1a;ai-1 是 ai 的直接前驱&#xff0c;ai1 是 ai 的直接后驱。 并且&am…

校招需要看的书 巩固的知识

前言 感谢教练&#xff0c;学长们&#xff0c;队友&#xff0c;lollipop&#xff0c;猫哥&#xff0c;李哥&#xff0c;表哥&#xff0c;鸡哥&#xff0c;样样&#xff0c;咸糖&#xff0c;茗记&#xff0c;明沙&#xff0c;嘻&#xff0c;树佬(排名不分先后)等等太多太多的人的…