今天我们来聊一下,一个Teams app的infrastructure,我在考虑LuckyDraw的主要出于这么几个出发点:
-
可管理性。因为这是一个个人产品,以后维护工作也只有我一个人,所以我希望整个infrastructure简单、易管理,不要太花我时间
-
高可用。Teams的用户遍布全世界,所以LuckyDraw的用户来自不同时区,这个基础架构要能很好的支持7x24小时高可用
-
高可扩展。Office365的用户有1B,所以LuckyDraw的用户可能会在某个时间点爆发(只是可能)。这个架构需要能快速的扩展成支持上百万的用户
-
低成本。一个字:穷。我穷啊
下面这张图展示了LuckyDraw整体的基础架构(构建在Azure上)
中间是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&#x