今天继续 LuckyDraw 的升级之路,之前在1500以上用户同时使用的时候,特别是在短时间内大家一起点击参与抽奖参的时候,服务会出现大量的错误,分析后发现,出现错误的原因基本都是 Azure Storage Table 返回的。当时使用 Azure Storage Table 的最最主要原因是它便宜,太便宜,真心便宜!缺点就是:
- 要花大量的时间去设计数据表,从而在查询的时候能得到较好的效率
- 不能跨表查询,不能join,这也就又回到第一点,需要花大量的时间去设计数据表的结构
- 不支持很长的字段,需要分几列存储
- 没有很好的测试库,不像EF Core,可以使用 in-memory db 来测试
- 并发请求有上限,当短时间内有大量请求时,会报错。
最初设计的时候只是考虑了几百人一起抽奖的情况,也没有特别考虑到上千人的抽奖。
所以,这次决定改成 Azure SQL,原因是 Azure SQL 有最低最便宜的配置,也有超高配置,配置的scale up,scale down 非常方便,而且 Azure SQL 也有自动的备份机制,当出现问题的时候,可以很方便的回退版本。
说干就干,我分了 3 步来完成 DB 的 infra 升级。
第一步 增加 SQL Server 和 Database 资源
我先在 arm template 里增加 sql server 和 database 资源,下面是简化后的 arm 配置。
{
"type": "Micr