【问题标题】:Protect against BigQuery spam防范 BigQuery 垃圾邮件
【发布时间】:2019-11-19 11:27:47
【问题描述】:

我有以下软件组件:

  • Amazon Kinesis 事件流
    • 示例事件表:product-purchase-events
  • BigQuery 数据库接收+存储事件
    • 查询示例:SELECT count(*) as count, DATE(timestamp) as day FROM product-purchase-events GROUP BY day
  • 公开 API 的微服务会运行一组预定义的 BigQuery 查询
    • 示例端点:GET /product-purchase-event/?step=DAY
  • 公共网络应用使用查询 API 来展示漂亮的图表

事实:BigQuery 每次查询的费用和固定费用非常昂贵。

问题:如果有人向GET /product-purchase-event 端点发送垃圾邮件,每次调用都会执行一个新查询,这意味着在 100 万次垃圾邮件查询后我会收到一份非常好的账单。

我的问题:您能保护 BigQuery 的垃圾邮件吗?我知道有 24 小时缓存,但我希望数据尽可能实时。

我还知道还有其他解决方案,例如 Amazon Redshift,它按小时而不是按查询计费,但我想知道是否可以使用 BigQuery 解决这个垃圾邮件问题。似乎大多数人只在内部使用它,这意味着没有外部人员可以执行查询,所以垃圾邮件不是问题。

【问题讨论】:

  • 赞成@shollyman 的回答。如果不考虑延迟,则可以选择定期将数据聚合到一个小得多的表中并将 Web 前端连接到汇总表。 BigQuery 缓存在这种情况下有效。但如果你真的收到 100 万个垃圾邮件请求,我相信你仍然会超出 BigQuery 查询配额。 shollyman 提出了一些缓存结果的方法,你应该考虑一下。

标签: sql google-bigquery amazon-kinesis


【解决方案1】:

正如您正确推测的那样,将交互式公共 Web 端点连接到直接运行 BigQuery 查询的处理程序是一个坏主意。这里有多个因素,包括成本和延迟。此外,查询接收流式插入的表意味着您将无法利用基本的 BigQuery caching mechanism,并且一旦您的公共处理程序开始获得合理的负载量,您将很快达到并发限制。

这里更典型的模式是通过 BigQuery 查询定期计算您的聚合,然后读取这些查询结果并将其传播到更适合以点查找方式提供结果的存储层/系统中。例如,像数据存储、内存中的键值存储,甚至像云 SQL 这样的东西。

这将您的服务架构与数据处理分离,并且公共处理程序大大简化:它只是从存储层获取聚合。

您还可以更细致地处理“我们何时重新计算”。您可以将处理定义为在固定时间间隔内简单地重新运行,利用数据陈旧意识,或根据环境中的其他信号构建一些自定义缓存语义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-02
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 2017-02-01
    • 2011-01-10
    相关资源
    最近更新 更多