我在以前的博客里说过我的LuckyDraw app在数据存储方面使用的是 Azure Table Storage,当时选择这个的原因是成本考虑,因为它实在是便宜,对于我这种个人开发维护的免费的teams app来说,成本是一个很重要的考量点。

当然,我也为这个运营成本的节省,付出了很多开发成本。因为针对Table Storage,在代码开发,业务逻辑处理,开源库的支持度等方面,比传统的数据库复杂很多。最简单的一个例子是,当需要保存一个大的json的时候,在SQL,我们可以简单的使用nvarchar(max),在table storage里,需要把列拆分成很多小的列进行保存,读取时也需要读取多个列的数据然后进行拼接处理。十分复杂。而且自动化测试的时候,也没有类似 EntityFramework Core的in-memory db。

当时在设计时,我也考虑过CosmosDB,这个是更加符合未来发展趋势的数据库,它的优点我就不再在这里重复了。我最后没有采用它的唯一的原因就是当时太贵了,最最起步的配置是400RU/s,也就是说我的测试环境和开发环境,即使平时不怎么使用,这400RU/s的钱还是要付的。

随着cosmos db的普及和发现,最近有一些新的收费方式出来,我就在第一时间去研究了一下。

下图是传统的方式Provisioned throughput,灰色的上下浮动变化的线是假设的使用量,为了保证这个使用量,一般就需要配置一个略高于使用量的RU值,这里就用 5000 RU/s 作为例子。所以系统收费的时候就按照 5000 RU/s 来收费。

但是我们通常的系统不会上上图那样负载一直保持在一个相对稳定的高位,真实的情况更像下图,使用量随着时间有高有低,比如晚上或者周末可能低一些,这个时候为了满足最高的使用峰值,如果使用传统方式,我们还是需要配置成 5000 RU/s,但是大家可能已经发现了,在使用低谷时,5000 RU/s 是一种很大的浪费。

针对上面这种情况,Cosmos DB推出了 Autoscale 收费模式,我们可以设置一个最大值,比如 5000 RU/s,Cosmos DB平台会自动根据你的使用量的高低来变化 RU/s,当你的使用量不大的时候,RU/s就降低,但是最低不会低于最高值的10%,这里是 500 RU/s,当使用量增加时,Cosmos DB自动增加 RU/s,最高可以达到你设置的上限。这样在收费时,就是根据实际分配的 RU 来计算。可以看到这种模式下,我们可以省下很多费用。

但是如果对于一个使用率很低的系统来说,比如下图,如果是一个测试环境,那可能用户在测试时才用一会儿,大多数时间都是空置状态。

如果还是使用Autoscale模式,可以看到如下图。因为有一个最低的10%的保留量,和auto scale的时间问题,cosmos db收取的费用还是有一部分浪费了。 

好在Cosmos DB最近推出了 serverless 模式,虽然在我写这篇文章的时候还是在 preview 状态。可以看到如下图,serverless收费是真正按照调用量来的,有一次算一次,用多少算多少。

看到这里,我相信大家和我有一样的想法,还在等什么呢?是时候开始使用CosmosDB了!

LuckyDraw app使用CosmosDB的成本分析相关推荐

  1. LuckyDraw app被评为Microsoft365 App Award

    今天查了一下LuckyDraw app,突然发现我上半年开发的Teams app: LuckyDraw,竟然多了一个勋章图标,点进去一看是微软给我的app评了一个"Microsoft 365 ...

  2. 将Teams app升级到net6

    net6 发布已经有一个多月了,因为我的LuckyDraw app是使用Azure app service,当时我查了一下app service还没有ready,昨天我又查看了一下,发现app ser ...

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

    上个月微软进行了一个全世界提名活动,目标是选出微软2019年度People's Choice app. 很幸运,我的LuckyDraw bot得到了来自世界各地使用者的投票,其中也包含Teams中国社 ...

  4. 微信公众号成本分析服务器,分析:为什么微信公众号用户获取成本比App还高?...

    根据当前的市场价格,微信公众号的单用户获取成本一般要3-5元,有些垂直类型的号,或通过地推方式甚至能到十几块.而安卓App单用户获取成本是1-5块钱,iOS的单用户获取成本高一些,一般也才3-10元. ...

  5. 使用环境变量来配置 Teams App 的 manifest

    上篇文章我们介绍了 Teams 的 Developer Portal,今天我想分享一个dev portal里一个比较实用的功能.这个功能在之前的 App Studio 里没有.这个功能叫 Enviro ...

  6. 在Teams app代码中enable nullable

    昨天讲了一下如何把代码升级到 net6,今天我优化了好几个小时更新代码,enable了nullable. c#的nullable我一直非常喜欢,它可以帮助开发人员,让开发人员去思考,哪些地方需要可以为 ...

  7. 使用Azure Serverless来开发Teams App

    Azure Function可以说比较早期的一个serverless服务,随着这些年云服务的大行其道,Serverless在概念越来越火,什么叫serverless? Serverless compu ...

  8. 在Teams Hackathon上介绍LuckyDraw

    很荣幸有机会在今天的Teams Hackathon上介绍LuckyDraw这个teams app. 因为到场的都是各路开发高手,所以当时在准备这个ppt的时候特别增加了难度等级,哈哈. 从如何构建云原 ...

  9. 使用Adaptive cards来构建Teams app的界面

    Teams app的task module十分好用,当用户点击了一个卡片上的按钮是可以在Teams里弹出一个对话框,对话框的内容可以是开发人员自己的一个网页页面,或者是adaptive card. 在 ...

最新文章

  1. python集合用法详解(创建、添加(add()、update())、删除(remove()、discard()、pop())、查找(in、not in))
  2. 最轻快的人脸检测yoloface
  3. 玩转mini2440开发板之【如何使用JLink下载烧录boot程序到NorFlash】
  4. 链接学习之obj文件探索
  5. javascript 西瓜一期 13 十六进制的数数方式与进位
  6. sharepoint搜索pdf文档
  7. [转] Python的import初探
  8. 《程序是怎样跑起来的》第六章有感
  9. 写刀路的一些经验[分享] 铜公加工方法及注意事项
  10. springbus类是做什么用的_SpringCloud-Bus组件的使用
  11. LDUOJ spj 修改
  12. 智能的未来关键在于发现新的逻辑体系
  13. warning incompatible implicit declaration of built-in function 'printf'
  14. ixigua解析_西瓜视频地址解析
  15. flutter CustomPainter 简单绘制 三角形 多边形
  16. Drupal框架使用中...
  17. hc05与单片机连接图_蓝牙模块与单片机如何连接?
  18. 如何用原生jS做购物车
  19. android apk 反编译
  20. 杂项-VOD:VOD(视频点播)

热门文章

  1. 数据结构基础:栈和队列学习笔记
  2. MYSQL处理数据重复值
  3. java math round小数_Java——Math的round方法
  4. 注入双括号报错注入_SQL手动注入:sqlilabs(less110)
  5. mininet在哪编写python脚本_1 mininet 简介及同时支持python2和python3
  6. Node.js 可以和 Web 实现 HTTP 请求的跨平台兼容了!
  7. 没想到你是这样的npm install
  8. 前端 Offer 提速:如何写出有亮点的简历
  9. 若川的2017年度总结,一如既往
  10. VS2010 VC Project的default Include设置