我们这篇文章继续上篇文章的优化,来看看如何优化 #6。
经过上一篇文章的分析和优化,我们目前的参与抽奖的步骤是:
增加当前用户到抽奖人列表。一次简单的写操作,只增加当前一个用户
如果第三步报错,说明当前这个用户是否已经参与了本次抽奖,结束这个请求
从 SQL DB 读取抽奖的基本信息,不包含参与有人。一次简单的数据库读操作
判断抽奖是否已经结束,如果已经开奖了,那就结束这个请求
根据当前的抽奖信息,生成 Teams 前端展示的 adaptive card
调用 Teams 的 bot api,更新本次抽奖的 adaptive card
在正常情况下一次抽奖为:一次数据库写操作 (#1),一次数据库读操作 (#3),一次 http 请求 (#6)。
如果是用户反复点击参与抽奖按钮,那就是一次数据库写操作 (#1)。
所以,当我们假设的 3000 用户在 15 秒内参与了同一个抽奖,那每秒要发送 200 个 http 请求给 teams。Teams 实际上对于发给给它的请求有一些调用频次的限制,详细信息可以参考这个官方文档。