Teams App抽奖机器人 - 基础架构

今天我们来聊一下,一个Teams app的infrastructure,我在考虑LuckyDraw的主要出于这么几个出发点:

  • 可管理性。因为这是一个个人产品,以后维护工作也只有我一个人,所以我希望整个infrastructure简单、易管理,不要太花我时间

  • 高可用。Teams的用户遍布全世界,所以LuckyDraw的用户来自不同时区,这个基础架构要能很好的支持7x24小时高可用

  • 高可扩展。Office365的用户有1B,所以LuckyDraw的用户可能会在某个时间点爆发(只是可能)。这个架构需要能快速的扩展成支持上百万的用户

  • 低成本。一个字:穷。我穷啊

下面这张图展示了LuckyDraw整体的基础架构(构建在Azure上)

highlevel

中间是Azure App Service,运行着Bot,由Bot Service打通我的Bot和Teams之间的通道。数据库使用的是Table Storage。Key Vault里保存着连接字符串,bot密钥等等。Log Apps用来出发抽奖(每个抽奖都在某个指定的时间点被触发),Application Insights用来存储日志,Availability Test(它实际上属于Application Insights)用来确保我的LuckyDraw Bot的高可用。

接下来我就一个个具体说一下我为什么要这么设计:

App Service:

选用App Service主要是因为它可以非常方便的向上扩展和水平扩展,而且还支持auto scale,当他检测到cpu占用与高于某个阈值时,自动水平扩展,这样我就很容易管理了,不需要担心机器是否够用。而且App Service和Azure里的其他资源非常容易整合。最最关键的是它有Free版本,虽然free版本有一些限制,但是也足够用于DEV和UAT环境了。

实际上下个版本,我准备把App Service Plan从Windows换成Linux,这样我的生产环境可以更加便宜,而且可以看到B1系列的linux还有优惠,便宜到爆

Linux vs. Windows

Table Storage

选用Table Storage主要是因为:便宜!太便宜了,我计算过一次抽奖算他平均5KB的数据,也就是一百万次抽奖一个月才0.225美金,人民币按照6.8来算,才1.53元。而且我还可以吧已经结束的抽奖移到Archive Storage,才6分人民币每个月每一百万次抽奖。是不是觉得便宜到不可相信的地步?

TableStorage Cost

当然,使用Table Storage也不是没有缺点的,不然那些SQL老大哥们怎么活啊。使用Table Storage有几点需要注意:

  • 目前没有成熟的自带的备份方案,但可以自己写脚本实现
  • 每row数据,每个column的数据有大小限制
  • 开发是不能使用EF,Dapper等成熟的ORM库

Logic Apps

当时为了找一个timer的方案,很是头痛,我并不希望把我的bot的服务做成stateful,这样会影响它的scalability。然后我又研究了Azure Durable Function,Azure Scheduler等方案,最后在好友Ares的建议下,研究了Logic Apps,发现这个用来做Timer是一个很好的方案。

Logic App

而且它还有自动的retry机制,而且一旦出错,也非常容易查找当时出错的原因。

Logic App Debug

Availability Test

这个是Application Insights里的一个功能,可以从选定的机房往你指定的Service上发送请求,并且监控是否请求成功和网络延迟。下图就是从我选定的5个region给我的bot服务发送请求。延迟最大的是美国东部,因为我的bot服务部署在香港,所以美国东部距离最远。

Availability Test

Key Vault

Azure的Key Vault可以很好的帮助我们保存密码,密钥,连接字符串之类的。而且MSI很好用,我可以只给我的Bot服务有访问Key Vault的权限,我连我自己的azure账号都不给访问权限,真正的安全啊。

KeyVault

KeyVault AccessPolicies

环境

上面的全套基础架构只是一个环境,我在整个开发流水线中,一共有三个环境,分别是DEV,UAT和PROD,使用Azure DevOps来完成CI/CD。都是微软自家产品,所以AzureDevOps和Azure完美结合。我后面会另外再写一篇关于我如何使用AzureDevOps来自动部署整个infrastructure的文章。

Environments

下图就是运行了9天的生产环境的成本,一共是12澳币,大约60元不到的人民币,主要是花在了App Service Plan,因为我需要开启Always On功能。以后改成Linux的App Service Plan后会便宜不少。

PROD Cost

这个是UAT环境运行18天左右,才花了3澳分,相当于人民币1角5分不到。所以如果你对Azure的服务十分了解,并且你的服务是Cloud Native的,真心便宜啊。而且整个架构是高度可扩展的。

UAT Cost

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278039.shtml

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

相关文章

Teams Bot的ServiceLevel测试

每一个Teams bot实际上就是一个web api服务,这个服务通过Bot Framework和Teams进行通讯,所以对于Teams app的测试就是对于一个api service的测试。 软件行业发展到如今,测试技术已经趋于成熟。单元测试,冒烟测试,整合…

BZOJ1016:[JSOI2008]最小生成树计数——题解

https://www.lydsy.com/JudgeOnline/problem.php?id1016 现在给出了一个简单无向加权图。你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树。(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不…

如何做Teams Bot的测试覆盖

在我昨天的文章中介绍了如果对Teams bot做service level的测试,那到底要写多少的测试代码才算够?如何才算测试到位了?这个时候我们就需要用”测试覆盖率”来衡量,虽然覆盖率高并不一定代表着就可以高枕无忧的以为我们软件质量高了…

Spring Boot开发MongoDB应用实践

本文继续上一篇定时任务中提到的邮件服务,简单讲解Spring Boot中如何使用MongoDB进行应用开发。 上文中提到的这个简易邮件系统大致设计思路如下: 1、发送邮件支持同步和异步发送两种 2、邮件使用MongDB进行持久化保存 3、异步发送,直接将邮件…

Teams Bot如何做全球化

Office365在全球有大量的用户,可以说是拥有最多用户的商业SaaS平台。Teams最近在发展迅猛,有1300万日活用户,已经超越了Slack。? Microsoft Teams overtakes Slack with 13 million daily users 我在设计Teams LuckyDraw bot的时候就希望我…

QuickBI助你成为分析师-邮件定时推送

创建报表过程中经常需要将报表情况定时推送给其他用户,及时了解数据情况。高级版本邮件推送功能支持仪表板周期性推送到订阅人,默认以当前登录者视角查看,同时支持结合 行级权限进行权限控制 和 结合全局参数功能确定邮件推送内容参数&#x…

2019年5月 Teams Community Call (China)

这个月有四个话题: Tony Xia:这个月的Teams的产品更新,Teams开发能力的更新,开源项目更新,库更新王远:升级/迁移到Microsoft Teams刘钰:Teams账号注册探索指南Paul Zhang/Cheung:Bu…

修改oracle 管理员密码 cmd

1.sqlplus/nolog 2.conn / as sysdba 3.alter user 用户名 identified by 新密码;转载于:https://www.cnblogs.com/taoqidexiaomao/p/9006927.html

在2019年6月Teams Community Call上分享的Teams app基础架构视频

我在2019年6月Teams Community Call(China)上分享的如何在azure上搭建典型的teams bot的基础架构 会议视频: 15:00 - 33:00 Download Video

解决 spring-cloud-starter-zipkin 启动错误

应用场景&#xff1a;Spring Boot 服务添加 Zipkin 依赖&#xff0c;进行服务调用的数据采集&#xff0c;然后进行 Zipkin-Server 服务调用追踪显示。 示例pom.xml配置&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>s…

什么是Microsoft Teams的App Studio

Teams的app studio很多用户可能不知道&#xff0c;但是对于一个teams平台的开发人员来说&#xff0c;这个是开发利器&#xff0c;利用这个工具你可以轻松的配置manifest文件&#xff0c;可以轻松的一站式创建teams app所需要的所有东西。而且你可以很方便的可视化配置adaptive …

Spring Cloud-鸿鹄Cloud分布式微服务云系统—架构图

这边结合了当前大部分企业的通用需求&#xff0c;包括技术的选型比较严格、苛刻&#xff0c;不仅要用业界最流行的技术&#xff0c;还要和国际接轨&#xff0c;在未来的5~10年内不能out。作为公司的架构师&#xff0c;也要有一种放眼世界的眼光&#xff0c;不仅要给公司做好的技…

Teams bot的调用限制

上个月Teams团队发布了对Teams app/bot调用api的频率的限制。这也从侧面说明Teams app越来越多&#xff0c;Teams团队需要优先保证Teams本身的计算资源&#xff0c;来提供流畅的用户体验。 具体的每个限制指标在这里&#xff1a; https://docs.microsoft.com/en-us/microsoftt…

Array的sort方法

作为一个刚开始学习的前端&#xff0c;小结一下&#xff1a;sort方法&#xff1a; 如果调用该方法时没有使用参数&#xff0c;将按字母顺序对数组中的元素进行排序&#xff0c;说得更精确点&#xff0c;是按照字符编码的顺序进行排序。要实现这一点&#xff0c;首先应把数组的元…

如何使用ARM创建Teams Bot所需要的Azure资源

相信很多devops已经全面开始使用ARM来创建azure资源了&#xff0c;ARM有很多方便的地方&#xff0c;比如简单易学&#xff0c;Infrastructure as Code&#xff0c;但是深入使用ARM开始会发现一些有待改进的方面。这篇文章主要是分享一下我在做Teams app的时候使用ARM来创建资源…

Bot Service自带的数据分析统计功能

每个产品上线后都希望自己能实时看到多少用户在使用我的产品&#xff0c;我的服务&#xff0c;有多少使用量&#xff0c;有没有遇到问题。市面上做用户数据、行为分析的公司也不少&#xff0c;但是大多数都需要我们修改一些代码来集成第三方的sdk库。 我的teams app上线后也急…

LuckyDraw bot有幸被提名为微软2019的People's Choice app

上个月微软进行了一个全世界提名活动&#xff0c;目标是选出微软2019年度People’s Choice app。 很幸运&#xff0c;我的LuckyDraw bot得到了来自世界各地使用者的投票&#xff0c;其中也包含Teams中国社区和很多朋友的支持。 https://developer.microsoft.com/en-us/microso…

图灵社区 和 大家网

http://www.ituring.com.cn/ http://club.topsage.com/ 大家论坛 http://www.topsage.com/ http://www.dxbbba.com/ 大学生必备吧 转载于:https://www.cnblogs.com/onelikeone/p/9023267.html

Teams内嵌的卡片image的限制

我的LuckyDraw上线后收到了不少有价值的反馈&#xff0c;其中有一部分是针对图片的&#xff0c;有一些用户说他们填写了image的url&#xff0c;但是图片显示不出来。 实际上这个问题在我提交这个应用到微软审核团队的时候&#xff0c;审核团队也提出了类似问题。但这个是Teams本…

Python 面向对象编程(进阶部分)

静态方法&#xff1a; 通过 staticmethod 装饰器即可把其装饰的方法变为一个静态方法。普通的方法&#xff0c;可以在实例化后直接调用&#xff0c;并且在方法里可以通过self.调用实例变量或类变量&#xff0c;但静态方法是不可以访问实例变量或类变量的&#xff0c;一个不能访…