发布于: Jul 22, 2022

从应用配置和使用的角度来看,采用 DAX 做数据库缓存方案非常简单方便,无需应用做修改,只要在应用执行时加上 DAX 的终端节点,就可以立刻获得极大的性能提升

 

DAX 提供了针对 DynamoDB 表中最终一致性数据的访问权限(延迟以微秒为单位)。一个多可用区 DAX 集群每秒可处理数百万个请求。

DAX 非常适合以下类型的应用程序:

  • 需要尽可能短的读取响应时间的应用程序。某些示例包含实时出价、社交游戏和交易应用程序。DAX 为这些使用案例提供了快速的内存内读取性能。
  • 比其他应用程序更频繁地读取少量项目的应用程序。例如,考虑一个电子商务系统,该系统对某个热门产品进行了一日促销。在销售期间,与所有其他产品相比,对该产品(及其在 DynamoDB 中的数据)的需求将急剧增加。为了消除某个“热”键和不均匀流量分配的影响,您可以将读取活动分载到一个 DAX 缓存,直到一日促销结束。
  • 不但需要进行大量读取,而且对成本很敏感的应用程序。利用 DynamoDB,您可以预置您的应用程序需要的每秒读取次数。如果读取活动增加,您可以增加您的表的预置读取吞吐量 (需额外付费)。或者,您也可以将活动从您的应用程序分载到某个 DAX 集群,并减少您需要另行购买的读取容量单元的数量。
  • 需要针对一组大型数据进行重复读取的应用程序。此类应用程序可能会从其他应用程序转移数据库资源。例如,一个长时间运行的区域气候数据分析可能会临时消耗掉 DynamoDB 表中的所有读取容量。这种情况对需要访问相同数据的其他应用程序会产生负面影响。利用 DAX,可以改为针对缓存数据进行天气分析。

DAX 不适合 以下类型的应用程序:

  • 需要强一致性读取 (或无法容忍最终一致性读取) 的应用程序。
  • 不需要读取的微秒响应时间的应用程序,或不需要分载基础表中的重复读取活动的应用程序。
  • 需要进行大量写入或不执行太多读取活动的应用程序。
  • 已在将其他缓存解决方案用于 DynamoDB 并将其自己的客户端逻辑用于使用该缓存解决方案的应用程序。
 

为了让大家能够直观的感受 DAX 所带来的性能提升,下面做一个快速的测试示例:创建一个 DAX 集群,分别测试应用程序对 DynamoDB 直接访问和通过 DAX 的缓存访问。

首先,进入 Amazon Web Services 管理控制台,选择“宁夏区域”,

然后选中 DynamoDB 服务,单击 DAX 的控制面板。

  • 创建集群

选中“创建集群”,进入配置界面。输入集群名称 dax1,选择节点类型和集群初始大小,并且创建 IAM 角色和 policy 用于允许 DAX 访问 DynamoDB 的表。

在目标 DynamoDB 表这里,可以选择“所有表”,也可以根据需要选择相应的一张表。接下来,创建一个子网组用于放置所有的 DAX 节点,命名这个子网组并且选择需要的子网。

选中“使用默认设置”,并点击“启动集群”。

可以看到,在几分钟后,DAX 集群已经开始正常运行了(注意:需要对 DAX 集群所附加的安全组,添加 8111 端口的允许访问策略)。

  • 应用测试

接下来,可以使用 Amazon Web Services 官方网站 DynamoDB 文档中的示例应用来进行测试操作。本次测试选择使用 Java 示例应用程序,您也可以选择熟悉的 Python、.Net 或 Node.js 示例来测试。

为了查看 DAX 如何工作,接下来安装 Java 应用程序 TryDax,并且执行两次。第一次执行,用 Java 程序直接对 DynamoDB 进行查询、scan 等操作,查看各个操作的运行时间。

可以看到基本操作的响应时间都在几个毫秒,这是没有 cache 的基本性能指标。

第二次使用 DAX,查看 cache 数据后的性能。

进入 DAX 的集群管理界面,记录下 dax1 集群的终端节点,

在这里是(dax1.xmemqv.clustercfg.dax.cnw1.cache.amazonaws.com.cn:8111),将其配置为 Java 应用程序的第二次运行目标。

运行的结果如下:

其中 GetItem、Query 和 Scan 操作第一行的响应较慢是由于 cache miss,后面的几次响应时间都在零点几个毫秒,是从 DAX 取得的缓存结果,明显比直接从 DynamoDB 要快很多。

  • 小结

所以,从应用配置和使用的角度来看,采用 DAX 做数据库缓存方案非常简单方便,无需应用做修改,只要在应用执行时加上 DAX 的终端节点,就可以立刻获得极大的性能提升。

下面为两次应用执行的图示,可以看到第一次执行的是:

$java TryDax

而第二次执行的时候,采用 DAX 做数据库缓存,应用执行时加上了终端节点:

$java TryDax
dax1.xmemqv.clustercfg.dax.cnw1.cache.amazonaws.com.cn:8111

 
 
相关文章