【问题标题】:Continuously updated database shared between multiple AWS EC2 instances在多个 AWS EC2 实例之间共享的持续更新数据库
【发布时间】:2019-02-25 21:11:22
【问题描述】:

对于一个小型个人项目,我每 5 分钟抓取一些数据并将其保存在 SQL 数据库中。到目前为止,我一直在使用结合 100GB EBS 存储的小型 EC2 AWS 实例。这对于抓取非常有效,但对于分析结果数据变得无法使用,因为 EC2 实例没有足够的内存。

数据分析只是不规则地进行,所以如果花 24/7 小时来拥有更大的 EC2 实例会觉得很浪费,所以我正在寻找更灵活的东西。通过阅读,我了解到:

  • 您无法同时将 EBS 连接到两个 EC2 实例,因此无法在需要分析时启动第二个临时大型实例。
  • AWS EFS 似乎是一种解决方案,但要贵得多,而且考虑到我的知识有限,我不能 100% 确定这是理想的解决方案。
  • 像 Amazon Athena 这样的无服务器选项看起来很棒,但这是基于 S3 的,它不适合需要持续更新的数据 (?)。

我认为这对于 AWS 来说是一个非常常见的用例,所以我希望尝试在正确的方向上获得一些指示。有没有适合我的问题的选项? EFS 是正确的方法吗?

谢谢!

【问题讨论】:

  • 为什么不使用 RDS 和只读副本
  • 我对您的瓶颈所在感到困惑——是 SQL 数据库,还是您在 EC2 上的主要应用程序?您的数据库是否也在 EC2 实例上,或者您正在使用 Amazon RDS?随时编辑您的问题以提供更多详细信息。
  • 您好,感谢您的意见!我将编辑我最初的问题,但是:数据库位于 EC2 实例上(使用 EBS 存储)。瓶颈是 EC2 实例上的 RAM 内存(只有 1GB),这使我无法有效地查询数据库。
  • @Claudiordgz 因为我不知道只读副本的概念,所以我会研究一下,谢谢:)

标签: database amazon-web-services amazon-ec2


【解决方案1】:

以前用户的回答很棒。让我们将它们分解为选项。在我看来,您的初始堆栈是您在 EC2 中安装的自定义 SQL 数据库。

选项 1 - RDS 只读副本

将您的数据库移动到 RDS,这会给您带来很多好处,但我们正在寻找的主要是只读副本,如果您的阅读量增长,您可以创建额外的只读副本并将它们放在负载均衡器后面。无需太多代码更改,此设置是最容易实现的目标。

选项 2 - EFS 在 EC2 实例之间共享数据

使用 EFS 并不简单,这不是 EFS 的错。一些数据库将唯一 ID 保存到文件系统,这意味着您不能共享硬盘驱动器。 EFS 是一项服务,会为每个读/写操作增加一些延迟。根据您安装的数据库分发的方式,它甚至可能是不可能的。

选项 3 - Athena 和 S3

让工作人员保存到 S3 而不是 SQL 也是可行的,但这意味着重写您的网络抓取工具。您可以在同一个键上多次调用 S3 -> PutObject,它会覆盖之前的对象。然后你需要重写你的分析工具来查询 S3。这个选项非常好,而且它可能是“运营成本”中最便宜的,但这意味着你必须熟悉 S3,更重要的是,Athena。您还需要弄清楚如何为您的应用程序保存新数据和最佳文件格式。您可以从常规 JSON 或 CSV blob 开始,然后以更低的成本迁移到 Apache Parquet。 (有关该声明如何意味着节省的更多信息,请参见此处:https://aws.amazon.com/athena/pricing/

选项 4 - 红移

RedShift 用于 BigData,我会等到查询常规 SQL 出现问题(每个查询多秒),然后我会开始研究它。当然,它可以让您查询非常便宜,但您可能必须设置一个管道来侦听 SQL(或由它触发),然后更新 RedShift。原因是 RedShift 可以根据您的查询需求进行扩展,您可以轻松启动多台机器以加快查询速度。

【讨论】:

  • 感谢@Claudiordgz,非常感谢!阅读有关选项 1-3 的信息,包括 parquet + S3 选项(例如,这个很棒的博客 read.acloud.guru/… ),在这里被告知了选项 4,但是这种概述对于做出明智的决定非常有帮助。我想我会先选择容易实现的目标,除非我有时间潜入 Athena/S3。
  • 感谢@Toekan 的博文!
【解决方案2】:
  1. 据我所知,S3 和 Athena 是很好的选择。我不确定您是否担心不使用 S3,但是一旦您可以将抓取的数据保存在 S3 中,您就可以使用 Athena(按查询付费模型)对其进行分析。

  2. 或者,您可以使用 RedShift 保存数据并分析哪些具有类似于 ec2 按需定价模型的按需服务。

此外,您还可以使用 Kenisis Firehose,它可用于在您摄取数据时实时分析数据。

【讨论】:

  • 从周围阅读看来似乎无法更新 S3 上的数据?那么如何将每 5 分钟一次的新抓取数据添加到数据库中呢?或者有没有办法解决这个问题?我也去看看 Redshift,谢谢!
【解决方案3】:

您的抓取工作人员应将数据存储在 Amazon S3 中。这样,工作人员实例可以扩展(甚至关闭)而无需担心数据存储。在 DynamoDB 等数据库中保存流程数据(例如,已抓取的内容、接下来要抓取的位置)。

当您需要查询保存到 Amazon S3 的数据时,Amazon Athena 非常适合以可读格式存储(CSV、ORC 等)。

但是,如果您需要读取非结构化数据,您的应用程序可以直接通过 S3 访问文件,方法是下载和使用它们,或者将它们作为流读取。对于这种类型的处理,您可以启动具有大量资源的大型 EC2 实例,然后在不使用时将其关闭。更好的是,将其作为 Spot 实例 启动以节省资金。 (这意味着您的系统需要应对可能中途停止的情况。)

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 2015-01-20
    • 2021-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多