服务
关于
CloudProse博客
资料库

DynamoDB自动扩展-无服务器方式

安迪·沃宗(Andy Warzon)Trek10
安迪·沃宗(Andy Warzon) | 2016年5月2日

2016年5月2日星期一

我们已公开实施: 一探究竟

因此,您正在构建自己的 无服务器 AWS上的应用程序,可实现无限的可扩展性和真正的按次计费。您的Web服务器是Amazon API Gateway-零扩展工作量的无限扩展。您的应用服务器是AWS Lambda-同上,零扩展工作量,无限扩展。您的数据库是Amazon DynamoDB-无限扩展……但扩展工作量几乎为零。

使用DynamoDB,您必须为每个表和全局二级索引设置预配置的读写容量。设置得太低,您的应用将崩溃,就像任何基于服务器的旧应用一样。设置太高,然后将其保留为24/7,这样您的帐单可能会很大。因此,我们如何使DynamoDB免维护,完美可扩展且具有跟踪使用情况的成本,就像我们系统的其他组件一样?

无服务器方式自动扩展DynamoDB

原理很简单……自从提供以来已读&可以通过AWS API设置写入吞吐量,只需少量代码就可以自动执行有关根据您消耗的读取内容来上下扩展容量的决策&写吞吐量。这个想法实际上已经存在 一阵子。但是那个较旧的解决方案使用了服务器-哇!显然,我们这里需要一种无服务器的解决方案,以保持较低的整体维护空间和较高的可用性。

还有另外两个小问题需要解决:

  • 虽然您可以随时增加容量,但每天每桌只能减少4次容量。这意味着我们应该针对高使用率立即扩大规模,但我们每天仅应检查缩减规模四次。这是合理的,因为与所有AWS Auto Scaling一样,您永远都不想过分缩减。口头禅是快速放大,缓慢缩小。
  • 最终,您要根据百分比来放大和缩小: {消耗的读取或写入容量} / {提供的读取或写入容量} …但是此指标在CloudWatch中不可用。因此,我们需要通过表和索引将百分比阈值存储在其他地方(自然是Dynamo表!)。这也是存储我们其他缩放参数的好地方:最小值&最大吞吐量和缩放时要增加或减少的吞吐量单位。然后,Lambda函数将:1)读取这些配置并为读取或写入容量设置实际的CloudWatch警报值,以及2)在更改预配置吞吐量时动态更新这些值: {吞吐量放大警报值} = {提供的吞吐量} * {放大阈值百分比} , 等等。

因此,请记住以下是无服务器DynamoDB Auto Scaling解决方案的基本布局:

如您所见,向上扩展活动由CloudWatch警报触发-> SNS Topic ->Lambda函数,可更新DynamoDB的预配置吞吐量。每6个小时检查一次按比例缩小的比例(因为每天四次限制),但是更新过程相同。

这些图中缺少的一个部分是用于管理此问题的系统:前面提到的配置表和一个“配置程序” Lambda函数,该功能将检查配置表中的设置并适当地更新CloudWatch警报。

因此,这里有很多东西,但是一旦构建完成,就可以封装到一个CloudFormation模板和一个配置表中。从运营商的角度来看,归根结底,这是相当简单且难以置信的强大功能,几乎无需日常工作即可拥有真正无限的规模。

您对如何自动缩放DynamoDB有任何想法吗?我们很乐意在 推特, 领英, 要么 给我们发电子邮件 直。

作者
安迪·沃宗(Andy Warzon)Trek10
安迪·沃宗(Andy Warzon)

创办人& CTO

创办人&CTO Andy一直在AWS上进行开发已有十多年,并且是AWS认证解决方案架构师-专业人士。