Azure架构最适合将API从API保存到Data Lake Store吗?

时间:2018-04-05 23:10:13

标签: azure azure-data-lake azure-iot-hub azure-eventhub

我期待构建一个能够接收JSON对象并将其保存到ADLS中的端点。到目前为止,我已经使用函数,事件中心和流分析尝试了几种不同的组合。问题是:迄今为止没有解决方案似乎是理想的。

TL; DR 在我的场景中,我有一些用户会通过API向我发送JSON数据,我需要将其保存在ADLS中,由用户分隔。这样做的最佳方式是什么?

有人能告诉我一些事吗?提前谢谢。

警告:长篇文章

让我解释一下到目前为止我的发现:

功能

优点

  1. 单一解决方案 - 使用单一服务解决方案
  2. 内置授权
  3. 组织 - 将用户的文件保存到ADLS内的文件夹
  4. HTTP端点 - 仅发送数据需要POST
  5. cheap&按需付费 - 按要求收费
  6. 缺点

    1. 绑定&依赖关系 - 函数没有ADLS绑定。要授权和使用ADLS,我需要安装额外的依赖项并手动管理其凭据。我只能用C#来做,但还没有用其他语言测试过。也可能是一个缺点,虽然我无法证实。
    2. 文件管理 - ADLS不建议为每个请求保存1个文件。另一种方法是附加到文件并管理其大小。与其他解决方案相比,这意味着更多的代码。
    3. 活动中心

      优点

      1. 根本没有代码 - 我只需要启用数据捕获
      2. 缺点

        1. 每个用户一个事件中心 - 通过事件中心捕获功能在ADLS内分离数据的唯一方法是每个用户使用一个事件中心
        2. 价格 - 捕获一个事件 - 每个用户的集线器大幅提高价格
        3. 授权 - 发送事件并不像执行POST那样简单
        4. 功能+事件中心

          使用具有函数的事件中心缓解函数缺点,但具有与事件中心相同的缺点(auth除外)

          功能+事件中心+流分析

          虽然我可以在没有捕获的情况下拥有单个事件中心,但使用Stream Analytics SQL作为过滤器将每个用户的数据定向到其特定文件夹,这将是一个限制因素。我已经尝试过了,随着SQL变大,它会变慢。

          物联网中心

          IoT Hub有路由,但它不像我要求的那样动态。

          有人能告诉我一些事吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

我没有看到仅使用Azure Functions将数据写入ADLS的缺点。

  • 只要你不写很多小文件,每个请求写一个文件应该不是问题
  • 使用.NET SDK即使没有现有绑定也应该非常简单
  • 解决身份验证:使用托管服务标识(MSI)和KeyVault在那里存储您的客户端机密。 SDK中的MSI支持显然位于roadmap上,然后确实很容易实现。
  • 您自己节省了事件中心的额外费用,而且我没有看到通过它添加真正的价值