LuckyDraw app使用CosmosDB的成本分析

我在以前的博客里说过我的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 来收费。

LuckyDrawAppCosmosDB

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

LuckyDrawAppCosmosDB

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

LuckyDrawAppCosmosDB

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

LuckyDrawAppCosmosDB

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

LuckyDrawAppCosmosDB

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

LuckyDrawAppCosmosDB

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

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

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

相关文章

React 重温之 组件生命周期

生命周期 任何事物都不会凭空产生,也不会无故消亡。一个事物从产生到消亡经理的各个阶段,我们称之为 生命周期。 具体到我们的前端组件上来,一个组件的生命周期可以大体分为创建、更新、销毁这个三个阶段。 本文主要介绍React 的组件生命周期…

迁移聊天记录到Teams

有一些朋友问我teams是否支持将其他平台/系统里的聊天记录迁移某个channel里,答案是肯定的,teams团队在去年年中的时候就提供了这个功能。这个功能是通过graph api来完成的,我们今天就来看看如何迁移聊天记录到teams里。 首先,我…

leetcode-191-Number of 1 Bits

题目描述: Write a function that takes an unsigned integer and returns the number of 1 bits it has (also known as the Hamming weight). Example 1: Input: 11 Output: 3 Explanation: Integer 11 has binary representation 000000000000000000000000000010…

androidsdk里的android.bat和uiautomatorview.bat启动就闪退问题

进入D:\androidsdk\tools文件夹: 使用编辑文件工具: rem Check we have a valid Java.exe in the path.set java_execall lib\find_java.bat 替换成下列代码: rem Check we have a valid Java.exe in the path.set java_exeC:\Program Files\…

10 个优质的 Laravel 扩展推荐

这里有 10 个用来搭建 Laravel 应用的包 为何会创建这个包的列表?因为我是一个「比较懒」的开发者,在脸书上是多个 Laravel 小组的成员。平日遇到最多的问题就是开发是需要用那些包。我很懒所以我不想每次都从头开始搞这些东东。 为何此文没有包括管理包…

Teams AppId, InstallationId 和 ExternalId 的区别

大家如果看teams的 graph api 开发文档,可能会把 app id, installation id 和 external id 搞混,我自己一开始的时候就有点被搞晕了,再加上app manifest里面的 id 和 bot id,基本就彻底晕掉了。 那我们今天这篇文章就来讲讲这几种…

osi参考模型(开放系统互连参考模型)

自互联网诞生以来,随着网络飞速发展,用户迫切要求能在不同体系结构的网络空间交换信息,使得不同的网络能够互联起来。 国际化标准组织(International Organization for Standardization,即ISO)从1977年开始…

Java:反射+泛型:获取类型参数的实例

2019独角兽企业重金招聘Python工程师标准>>> 场景描述&#xff1a; 我需要开发四个页面&#xff0c;每个页面都是只涉及增删改查的基本逻辑。 最简单的写法&#xff1a; 创建四个接口A,B,C,D&#xff0c;每个接口中都声明了增删改查四个方法,完全一致 public Map<…

servlet(1)

servlet类分级&#xff1a; 1.ServletConfig接口类&#xff1a;理解为读取servlet配置的类&#xff0c;里面有四个抽象方法如下&#xff1a; ①getServletName:获取servlet在web.xml中的名字 ②getServletContext&#xff1a;获取Servlet上下文&#xff0c;相当于web项目管理所…

如何在 Apple Silicon (M1) 上开发 Teams App

apple 在几个月前发布了自家的芯片 M1&#xff0c;由于将多核cpu&#xff0c;多核gpu&#xff0c;神经网络运算&#xff0c;内存和其他一切处理部件高度整合在一起&#xff0c;大大提高数据传输速度。发布后好评如潮&#xff0c;我也没有忍住&#xff0c;入手了一台最低配的mac…

BZOJ5289 洛谷4437:[HNOI/AHOI2018]排列——题解

https://www.lydsy.com/JudgeOnline/problem.php?id5289 https://www.luogu.org/problemnew/show/P4437 考虑对于a[i]m,a[m]n&#xff0c;我们令p[j]i,p[k]m&#xff08;一定会有一对(j,k)满足这个条件的&#xff09;&#xff0c;则我们会有p[k]a[p[j]]&#xff0c;此时我们要…

集成学习-Adaboost

Adaboost 中文名叫自适应提升算法&#xff0c;是一种boosting算法。 boosting算法的基本思想 对于一个复杂任务来说&#xff0c;单个专家的决策过于片面&#xff0c;需要集合多个专家的决策得到最终的决策&#xff0c;通俗讲就是三个臭皮匠顶个诸葛亮。 对于给定的数据集&#…

主动给团队或用户安装Teams App

在写这篇文章的时候&#xff0c;这个新功能还处在 Public Review&#xff0c;这意味着可能&#xff08;很小的可能性&#xff09;这里写的方法在正式发布前还会有一些改动。 之前有一些做teams app开发的朋友问过我&#xff0c;能不能主动给一个team或者一个用户安装一个指定的…

thinkphp5多级控制器是什么?怎么使用?

thinkphp5多级控制器是什么&#xff1f;怎么使用&#xff1f; 一、总结 1、多级控制器是让控制器的级数变成多级&#xff0c;也就是controller目录下可以新建其它目录。 2、使用的话注意目录下的控制的的命名空间&#xff08;加上目录名&#xff09;&#xff08;namespace app\…

给Teams消息附加图片的三种方式

Teams消息支持三种不同的方式来添加图片&#xff0c;这篇文章我们来一起看一下这三种方式。 Inline图片 var imagePath Path.Combine(Environment.CurrentDirectory, "abc.png"); var imageData Convert.ToBase64String(File.ReadAllBytes(imagePath)); var image…

4月18日 MySQL学习

正式开始了数据库的学习 昨天下好的MySQL 今天正式开始学习的&#xff0c;介绍了多种数据库软件&#xff0c;当然 学习的这个是开源的 免费的。 DBMS(数据库管理系统)这就是我们学习的数据库的软件 数据库分为关系型数据库管理系统和非关系型数据库管理系统(没有深入的了解) 今…

企业数据湖构建之旅

摘要&#xff1a;随着互联网的发展&#xff0c;数据的规模和类型都呈现一个爆炸性的增长&#xff0c;对于这么多类型的数据&#xff0c;如何进行有效的管理和存储&#xff0c;包括数据的分析&#xff0c;这是大家要面临的一个问题。在武汉云栖大会上&#xff0c;阿里云高级产品…

用AzureFunction开发最简单的Teams Bot

之前我有一篇文章讲了如何在azure function上开发最简单的outgoing webhook&#xff0c;收到一些反馈&#xff0c;建议我介绍一下如果在azure function上开发teams bot&#xff0c;那这篇文章就来讲一下如何用function来快速开发bot。 我们先创建一个azure function资源&#…

20189215 2018-2019-2 《密码与安全新技术专题》第7周作业

课程&#xff1a;《密码与安全新技术专题》 班级&#xff1a; 1892班 姓名&#xff1a; 李炀 学号&#xff1a;20189215 上课教师&#xff1a;谢四江 上课日期&#xff1a;2019年4月9日 必修/选修&#xff1a; 选修 1.本次讲座的学习总结 讲座主题&#xff1a;信息隐藏 信息隐藏…

BZOJ1565[NOI2009]植物大战僵尸——最大权闭合子图+拓扑排序

题目描述 Plants vs. Zombies&#xff08;PVZ&#xff09;是最近十分风靡的一款小游戏。Plants&#xff08;植物&#xff09;和Zombies&#xff08;僵尸&#xff09;是游戏的主角&#xff0c;其中Plants防守&#xff0c;而Zombies进攻。该款游戏包含多种不同的挑战系列&#xf…