Day 27 - 成本估计与 Amazon DynamoDB
观赏鱼辨识成本估计
根据 Day 01 - 观赏鱼辨识系统说明所介绍的服务,这个系统需要一个 g4dn.2xlarge 的 Amazon EC2 主机,以及一个 Amazon Elastic IP 的固定 IP 位置,在不考虑流量的情况下,一年的固定成本为 4,393.56 USD,这是以主机建置在 US East (Ohio) 地区来计算的, AWS 提供一个 AWS 价钱计算机 (AWS Pricing Calculator),计算结果如下图。
图 1、AWS 价钱计算机 (AWS Pricing Calculator)
这样的成本对于一个建立雏形系统的开发人员来说十分昂贵,因为整个架构一开始就是以微服务的方式建构,所以现在尝试将所有服务转换成 AWS 的托管服务,形成无服务器 (serverless) 的方式。首先考虑的是将资料库独立出来,AWS 提供的资料库有分关联型资料库 (RDS) 与非关联型资料库 (DynamoDB),Amazon RDS 的收费方式与 Amazon EC2 一样,是需要租赁一台主机;而 DynamoDB 则是与服务请求数量与存储容量相关。下图是 Amazon RDS 与 DynamoDB 的价格比较, Amazon RDS 的预留一年主机租用费用是 203.00 USD ,而硬碟 10GB 每月费用是 2.3 USD;DynamoDB 则是每月需要 2.51 USD。所以选择 DynamoDB 是比较划算的,主要是因为我们使用的容量其实是很低的。
图 2、Amazon RDS 与 DynamoDB 的价格比较
Amazon DynamoDB 简介
Amazon DynamoDB 是一项快速灵活的非关联型资料库服务,适合所有需要一致性和个位数毫秒级延迟的任何规模的应用程序。它是完全托管的云端资料库,支持文档和键值存储模型。
Amazon DynamoDB 提供以下优势:
- 完全托管 – DynamoDB 是一项完全托管的非关联型资料库服务,只需创建资料库表并设置自动扩容 (Auto Scaling) 的目标使用率,其余事情都可交由该服务来代劳。您无需再担心资料库管理任务,例如硬体或软体预置、设置和配置、软件修补、操作分布式资料库集群,或者根据扩展需求在多个实例间对数据进行分区等问题。还可以使用 DynamoDB 对您的所有表执行时间点恢复、备份和还原,这可帮助满足公司和法规存档要求。
- 性能快速稳定 – 服务端平均延迟通常不超过个位数毫秒 (ms)。随着您的资料量不断增多、应用程序性能要求不断提升,DynamoDB 会使用自动分区和固态硬盘 (SSD) 技术来满足您的吞吐量需求,并针对任意规模的数据库提供低延迟。
- 精细的访问控制 – DynamoDB 与 AWS Identity and Access Management (IAM) 集成,对组织内的用户实现精细的访问控制。您可以为每名用户分配唯一的安全证书,控制每名用户对服务和资源的访问。
- 灵活 – DynamoDB 支持存储、查询和更新文档。使用 AWS 开发工具包 (SDK),可以编写将 JavaScript 对象表示法 (JSON) 文档直接储存到 Amazon DynamoDB 表中的应用程序。此功能减少了为插入、更新和检索 JSON 文档必须编写的新代码量。您还可以通过使用几行代码来执行强大的资料库操作,例如嵌套 JSON 查询。
图 3、Amazon DynamoDB 的优势
如果与关系资料库表的元件进行比较,项目类似于行(记录),属性类似于列(栏位),DynamoDB 的基本元件包括下列元件,图示如下图:
- 资料表 – DynamoDB 将资料存储在表中,表中包含具有属性的项目。
- 项目 – 每个表包含零个或更多个项目,项目是一组属性,具有不同于所有其他项目的唯一标识。
- 属性 – 每个项目包含一个或多个属性,属性是基础的数据元素,无需进一步分解。
- 主键 – 表具有一个主键,用于唯一标识表中的每个项目,每个项目的键都不同。
图 4、Amazon DynamoDB 的基本组件
DynamoDB 支援两种类型的主键:
简单主键 – 简单主键由一个称为分区键的属性构成。 DynamoDB 基于此主键属性构建无序的索引,表中的每个项目由其分区键值进行唯一标识。在下图中 SensorLocation 表中,主键是分区键,因为它由单个属性 SensorId 组成,该属性是分区键。表中的每个项目由其分区键值(SensorA 和 SensorB)进行唯一标识,同样,每个感测器都只有一个位置,以纬度和经度表示。
复合主键 – 复合主键由两个属性组成:分区键和排序键。 DynamoDB 基于分区键属性和排序键属性分别构建无序索引和有序索引,在具有分区键和排序键的表中,两个项目可能具有相同的分区键值;但是,这两个项目必须具有不同的排序键值。在下图中 SensorReadings 表中,主键是分区和排序主键,因为它由 SensorId 属性(分区键)和 Time 属性(排序键)组成。对于每个 SensorId,在不同时间可能有多个项目对应于感测器读数。 SensorId 和 Time 的组合唯一识别表中的专案。
图 5、Amazon DynamoDB 支援的主键类型
Amazon DynamoDB 操作
步骤 1:建立资料表
透过 AWS 管理控制台 (AWS Management Console) 新增一个表格,以及分区索引键,设定如下,图片如下:
- 表格: fishInfoTbl
- 分割区索引键: LatinName
图 6、建立 Amazon DynamoDB 资料表
步骤 2:写入资料至资料表
来到 DynamoDB 的管理介面,点击左边功能选单的 项目,选定资料表 fishInfoTbl,点击 建立项目,如下图所示。
图 7、建立 Amazon DynamoDB 项目
建立项目的方式有两种,一种是表单另一种则是 JSON 方式,下图使用 JSON 建立 Amazon DynamoDB 项目。
图 8、使用 JSON 建立 Amazon DynamoDB 项目
最后检视 Amazon DynamoDB 中,fishInfoTbl 表格内的所有项目,如下图所示。
图 9、检视 Amazon DynamoDB 项目
参考资料
- AWS Pricing Calculator,https://calculator.aws/#/estimate
- Amazon DynamoDB,https://aws.amazon.com/tw/dynamodb/
- 事前准备 - 入门教学,https://docs.aws.amazon.com/zh_tw/amazondynamodb/latest/developerguide/GettingStarted.SettingUp.DynamoWebService.html