作为AWS众多云服务的核心成员之一,DynamoDB得到了非常广泛的应用。在DynamoDB的使用过程中,需要不断监测其性能,并进行调整(比如调整RCU,WCU,Autoscaling等)。

AWS DynamoDB系列教程:
- AWS DynamoDB系列之一:简介
- AWS DynamoDB教程之二:主键的设计及GSI
- AWS DynamoDB系列之三:Streams
- AWS DynamoDB系列之四:在Node.js中访问DynamoDB
- AWS DynamoDB系列之五:在本地安装DynamoDB
- AWS DynamoDB教程之六:如何使用APIGateway Service Proxy访问DynamoDB数据
- AWS DynamoDB教程之七:DynamoDB的访问控制
- AWS DynamoDB教程之八:数据备份/恢复及导出
- AWS DynamoDB教程之九:性能监测和调优,Audit Table及TTL
CloudWatch Contributor Insights
首先需要在选定的表上激活:选择表名->Monitor->CloudWatch Contributor Insights for DynamoDB

然后就可以观察到Read usage, Read throttled requests, 以及Read throttled events等指标。直在监测DynamoDB运行时非常有用。如果throttling发生了,通常意味着预先分配的资源可能不够,需要增加RCU/WCU或者改为autoscaling/ondemand等。
如果切换到ClouWatch->Insights->Contributor Insights中,还可以看到具体到每个PK的统计信息:

DynamoDB Accelerator (DAX)
DAX是专为DynamoDB设计的缓存层,它可以进行毫秒级响应。DAX是由EC2集群组成的,因此根据节点数量付费。因此在需要的时候,可以在两个维度对DAX进行扩容:
- 增加EC2数量
- 增加每个EC2的配置,比如内存,CPU等
DAX支持的DynamoDB操作包括:Get/Query/Scan/Update/Delete/Put,以及GSI/LSI操作。
在应用层,非常容易从DynamoDB切换到DAX:只需要切换endpoint就可以。
需要使用DAX的场景包括:
- 要求毫秒级响应时间
- 针对某些特定的Key,有固定的流量模式,比如,在每天12PM,针对某个Key的查询都会激增
- 需要DAX中的数据可能不会和DynamoDB即时同步,因此应用中对此不能有特殊的要求
- 应用中对读取性能要求高,而不是写入性能
在配置DAX Cluster的时候可以使用:
- Load Balancer
- Master Node
- Read Replica Node 1
- Read Replica Node 2
- Read Replica Node x
DAX Cluster中有两种Cache:
- Item Cache: 顾名思义,这里保存的是从PK+SK到真正对象值的映射
- Query Cache: 这里保存的是PK+SK及查询关键字到对象集合的映射。但由于从DynamoDB到Cache之间的同步延迟,有可能从Query Cache获得的数据是旧数据。因此一般情况下不建议使用Query Cache
因此,在使用DAX的时候,一定要预估到可能遇到的数据不一致问题,并在这种情况是直接访问DynamoDB作为数据源(Source of truth)。
Audit Table
Audit Table的作用就是记录系统操作步骤,这样就便于在出现问题是溯源。
在实施的时候可以使用DynamoDB的Stream,将数据记录在S3并通过AWS Athena进行查询。
TTL
TTL就是time to live的缩写,这是一项免费服务,能够在指定的时间自动删除某条记录。其特性包括:
- 完全自动
- TTL操作需要的时间一般为几分钟到48小时,但不能保证
由于计算时间时需要一个时间戳,可以在这个网站进行时间转换:https://www.epochconverter.com/
进入DynamoDB选择表之后,选择Additional settings > Tile to Live (TTL) > Enable
然后输入字段名字,比如:TTL:

然后单击“Enable TTL”。
在DynamoDB中插入一条数据,包含TTL字段:

几分钟后这条记录就被删除了。
在表对应的Monitor中就能看到TTL的统计信息。