此文章由机器翻译。

Azure Insider

事件中心的分析和可视化

Bruno Terkaly

下载代码示例

Bruno Terkaly 有无数的例子,在构建解决方案的基于分析和可视化的公司。有很多情况下,需要大型的数据提取和分析。没有人可以否认在社交网络空间,巨大的增长在 tweet 来自 Twitter,在员额从 Facebook 和 Web 内容从博客是实时分析,用来提供公司的品牌知名度。这是围绕实时分析和可视化,侧重于超大规模数据流动的多部分系列的第一部分。

这一级别的数据分析是网络的见解,帮助品牌使更快、 更聪明、 更多以观众为中心的决策等公司的大企业。其营销解决方案进行分析和组织实时消费数据从社会网络,以产生战略性的、 可操作的见解告知好受众细分、 内容策略、 媒体投资和品牌健康。什么区分其做法是公司的能力,以简化的社交媒体数据使用进行主动分类,它跨 15,000 的消费者利益维度,在真正的时间,利用计算语言学、 机器学习和其他技术。某些消费者利益维度包括 46 去比根的正面和负面的情绪和细微差别的恨,爱、 欲望与恐惧所以营销人员了解消费者对产品的感觉不仅接下来做什么更深的情感量词的使用。

对于此级别,您需要的第一件事是分析的大规模数据摄取。再次使用社交媒体的例子,考虑 Twitter 有数以百计的数以百万计的活跃用户和数以亿计的每一天的推文。Facebook 拥有 8 亿 9000 万活跃的用户群。建设摄取这一数额中实时数据的能力是一项艰巨任务。

一旦摄入体内的数据,还有更多工作要做。 您需要具有解析并放置在永久数据存储中的数据。在许多情况下,传入的数据流动通过复杂事件处理 (CEP) 系统如 Azure 流分析或风暴。这种制度并通过运行站查询流对传入数据的分析。这可能会生成警报或数据转换为另一种格式。您可以选择要数据 (或它的一部分) 保存到永久存储区或有它被丢弃。

那永久数据存储区通常是基于 JSON 文档数据库或者甚至像 SQL Server 数据库。之前被放置到永久性存储器,经常聚合数据,合并或标签的其他属性。在更复杂的情况下,数据可能处理的机器学习算法,以便制作的预测。

最终,这些数据必须被可视化,这样用户可以得到更深层次的背景和意义认识。可视化往往发生在基于 Web 的控制板上或在一个移动应用程序。这通常介绍了中间层或 Web 服务,这可以公开从永久存储的数据,并向这些仪表板和移动应用程序提供的需要。

这篇文章中和后续的文章将采取一个更直观的例子。想象一下你有成千上万的设备领域测量降水的城市在美国境内。目标是从一个移动设备的降雨数据可视化。图 1 演示一些可能会给生活带来这种解决方案的技术。

的降雨分析系统的总体结构
图 1 的降雨分析系统的总体结构

有对这种体系结构的几个组件。首先是事件生产商,这可能是具有附加的雨量传感器的树莓派设备。这些设备可以使用一种轻量级协议等高级消息队列协议 (AMQP) 送入微软 Azure 事件中心的高容量的雨量数据。一旦 Azure 摄入了这些数据下, 一层体系结构中的涉及从 Azure 事件集线器中读取事件和坚持永久数据存储区,例如 SQL Server 或 DocumentDB (或其他一些基于 JSON 的存储区) 的事件。它也可能意味着聚合事件或消息。架构中的另一层通常涉及 Web 层,使基于 Web 的客户端,如移动设备可用永久存储的数据。移动应用程序或甚至 Web 仪表板然后提供数据的可视化。这篇文章将集中的第一个组件。

事件生产者

因为我敢肯定你们中的大多数通常不拥有数以千计的物联网 (物联网) 设备,我做了一些简化示例有关的事件生产者在图 1。在这篇文章,我会去模仿与基于 Linux 运行的虚拟机 (Vm) 在 Azure 的树莓派设备。

我需要有运行在 Linux 机器上,Ubuntu 14.02 具体的 c 语言程序。我还需要使用 AMQP,开发的金融业克服一些在 HTTP 中找到效率低下的问题。您仍然可以使用 HTTP 作为传输协议,但 AMQP 是在延迟和吞吐量方面效率更高。这是建基于 TCP 的协议,在 Linux 上具有优良的性能。

模拟 Linux VM 上覆盆子 Pi 的整点是可以将大多数,如果不是全部,复制到树莓派,支持许多 Linux 发行版的代码。如此而不是从附加的雨量传感器中读取数据,事件生产者将从文件中读取文本包含 12 个月的降雨数据为在美国的几个百强城市。

高尺度数据摄取 Azure 中的核心技术被所谓的事件枢纽。蔚蓝的事件集线器提供超可扩展流摄取,使数以万计的树莓派设备 (事件生产者) 发送不间断的连续数据流。您可以通过定义缩放 Azure 事件枢纽吞吐量单位 (Tu),藉以处理每个吞吐量单位可以写操作的 1,000 事件每第二次或 1 MB / 秒 (2 MB/s 的读操作)。蔚蓝的事件集线器可处理超过 1 GB/s 聚合吞吐量达 100 万的生产者。

发送事件

将事件发送到 Azure 事件集线器是简单的。发送的事件,正如你可以看到在一个实体图 1,被称为事件的发布者。您可以使用 HTTPS 或 AMQP 换。我将使用共享访问签名 (SAS) 来提供身份验证。SAS 是提供对事件发布者发送和接收访问的时间戳的唯一标识。

若要在 C# 中发送数据,请创建 EventData,您可以发送通过 Send 方法的一个实例。为更高的吞吐量,您可以使用 SendBatch 方法。在 C 中,AMQP 提供了大量的方法来提供相似的功能。

分区键

分区是在 Azure 事件中心的核心概念之一。分区键是用于传入的事件数据映射到特定的分区的值。分区是简单有序的系统在活动中心举行活动。因为发送新的事件,它们添加分区的末尾。可以认为每个分区是关系型数据库中的单独提交日志并以类似的方式工作。

默认情况下,每个 Azure 事件集线器包含八个分区。你可以超越 32 个分区,但这需要几个额外的步骤。你只需要做到这一点的基础下游消费应用程序所需的并行度。时发布事件,您可以针对特定分区键,但这并不很好地扩展,介绍了体系结构的耦合。

更好的办法是让内部的哈希函数使用循环赛事件分区映射功能。如果您指定 PartitionKey,哈希函数会将其分配给一个分区 (同一 PartitionKey 总是分配给同一个分区)。循环赛转让发生只有在指定了没有分区键。

开始

一个伟大的地方开始是要经过在本教程中 bit.ly/1F2gp9H。您可以选择您的编程语言:C、 Java 或 C#。这篇文章的代码基于 c。 请记住,我通过读取一个文本文件,包含雨量数据模拟树莓派设备。也就是说,它应该很容易树莓派设备到此代码中的,所有的端口。

也许最好的地方,开始是在门户提供 Azure 事件集线器。单击应用程序服务 |服务总线 |事件中心 |快速创建。资源调配过程的一部分涉及到获取一个共享的访问签名,是用 C 程序来让它将事件写入到 Azure 事件中心的安全机制。

一旦您提供在 Azure 事件中心,您还可以使用以指向您的 Azure 事件集线器 Azure 数据中心内部的特定实例的 URL。因为 SAS 键包含特殊字符,你需要编码的 URL,如针对 bit.ly/1z82c9j

提供蔚蓝色的虚拟机并安装 AMQP

因为这项工作将通过资源调配在 Azure 中的基于 Linux 的 VM 模拟物联网方案,它有意义做最齐全的 VM 在云计算上你的作品。开发和测试环境对树莓派很有限。一旦你得到了你代码和在虚拟机中运行,你可以简单地重复此过程并将二进制文件复制到树莓派设备。你可以找到更多的指导,对资源调配的基于 Linux 的 VM 在 Azure 上 bit.ly/1o6mrST。我已经使用的代码库基于 Ubuntu Linux 映像。

现在,您已经设置 Azure 事件集线器和虚拟机主机的 Linux,你准备为 AMQP 安装二进制文件。正如我刚才所说,AMQP 是一个高性能、 轻量化的消息库,支持广泛的消息传递应用程序如经纪人,客户端库、 路由器、 桥梁、 代理等。要安装 AMQP,会需要远程成 Ubuntu Linux 机器,安装 AMQP 信使图书馆从 bit.ly/1BudbhA

因为我做我的大部分工作从 Windows 机器上,我用腻子到远程到 Ubuntu 图像在 Azure 中运行。您可以下载腻子在 putty.org。若要使用腻子,你需要从 Azure 管理门户网站获取您的 VM URL。使用 OS X 的开发人员可以简单地使用 SSH 到远程从 Mac 终端。

你可能会发现它容易上而不是 Ubuntu 的 CentOS 安装 AMQP,作为针对 bit.ly/1F2k47z。在 Azure 中运行基于 Linux 的工作负荷是一个流行的战术。如果你已经习惯于 Windows 开发,你应该开始熟悉编程在 Linux 世界中。注意,在图 2 ,我指着我的 Ubuntu VM (vmeventsender.cloudapp.net)。

使用腻子到远程在 Ubuntu Linux VM
图 2 使用腻子到远程在 Ubuntu Linux VM

Send.c

一旦您已经安装了 AMQP 您 Ubuntu 的 VM 上,你可以利用 AMQP 安装过程所提供的示例。我特别的部署,这里是您将在这里找到 send.c 文件:/home/azureuser/dev/qpid-proton-0.8/examples/messenger/c/send.c。 (本文的代码下载包括我编辑的版本的 send.c)。

你基本上会取代由 AMQP 我修订的版本一起安装的默认示例。你应该能够运行它的情况是,除了指向编码共享的访问签名和 Azure 事件中心的 URL。我对 send.c 所作的修改包括从 weatherdata.csv,还包括在本文的代码下载中读取的雨量数据。中的代码图 3 是相当清晰。主入口在方法开始通过打开文本文件中,一次读取一行并将降雨数据解析成 12 个独立的部分 — — 一个用于每个月。

图 3 原始代码在 C 来将消息发送到 Azure 事件集线器

int main(int argc, char** argv)
{
  printf("Press Ctrl-C to stop the sender process\n");
  FILE * fp;
  char  line[512];
  size_t len = 0;
  size_t read = 0;
  int i = 0;
  int curr_field = 0;
  int trg_col = 0;
  pn_messenger_t *messenger = pn_messenger(NULL);
  pn_messenger_set_outgoing_window(messenger, 1);
  pn_messenger_start(messenger);
  fp = fopen("weatherdata.csv", "r");
  if (fp == NULL)
    exit(EXIT_FAILURE);
  while (fgets(line, 512, fp)!=NULL)
  {
    for (i = 0; line[i] != '\0'; i++)
    {
      if (line[i] == ',')
      {
        fields[curr_field][trg_col] = '\0';
        trg_col = 0;
        curr_field += 1;
      }
      else
      {
        fields[curr_field][trg_col] = line[i];
        trg_col += 1;
      }
    }
    trg_col = 0;
    curr_field = 0;
    for (i = 1; i < 13; i++)
    {
      sendMessage(messenger, i, fields[0], fields[i]);
      printf("%s -> %s\n", fields[0], fields[i]);
    }
    printf("\n");
  }
  fclose(fp);
  // Release messenger resources
  pn_messenger_stop(messenger);
  pn_messenger_free(messenger);
  return 0;
}
int sendMessage(pn_messenger_t * messenger, int month, char *f1, char *f2)
{
  char * address = (char *) "amqps://SendRule:
    [secret key]@temperatureeventhub-ns.servicebus.windows.net/temperatureeventhub";
  int n = sprintf (msgbuffer, "%s,%d,%s", f1, month, f2);
  pn_message_t * message;
  pn_data_t * body;
  message = pn_message();
  pn_message_set_address(message, address);
  pn_message_set_content_type(message, (char*) "application/octect-stream");
  pn_message_set_inferred(message, true);
  body = pn_message_body(message);
  pn_data_put_binary(body, pn_bytes(strlen(msgbuffer), msgbuffer));
  pn_messenger_put(messenger, message);
  check(messenger);
  pn_messenger_send(messenger, 1);
  check(messenger);
  pn_message_free(message);
}

图 4 为您提供具有降雨数据的文本文件部分视图。C 代码将连接到你早些时候,调配使用 URL 和编码共享的访问签名的 Azure 事件枢纽实例。一旦连接,降雨量数据将加载到消息数据结构,并发送到使用 pn_messenger_send 的 Azure 事件集线器。你可以在这些方法的完整说明 bit.ly/1DzYuud

分部视图的降雨数据的文本文件
图 4 分部视图的降雨数据的文本文件

有在这一点上其余的只有两个步骤。第一个是实际编译的代码,只是涉及到更改目录和发行使安装命令。最后一步是实际运行您刚刚创建的应用程序 (请参阅图 5):

// Part 1 – Compiling the code
cd /home/azureuser/dev/qpid-proton-0.8/build/examples/messenger/c
make install
// Part 2 – Running the code
cd /home/azureuser/dev/qpid-proton-0.8/build/examples/messenger/c
./send

输出从运行的代码
图 5 输出从运行的代码

结束语

在下一篇文章中,我将展示它需要消耗事件从 Azure 事件集线器和 Azure 流分析中,并将数据存储在一个 SQL 数据库和 Azure DocumentDB 被称为基于 JSON 数据存储区。后续文章将深入揭露此数据到移动应用程序。在本系列的最后一篇文章,我将构建一个移动的应用程序,提供了一个可视化的雨量数据。


Bruno Terkaly 是主要软件工程师在微软,目的是发展的业界领先的应用程序和服务启用跨设备。他是负责开车穿越美国的顶级云计算和移动的机会和从技术支持的角度之外。他帮助合作伙伴带来市场及其应用提供建筑指导和深厚的技术接合 ISV 的评价、 开发和部署过程。Terkaly 还密切与云计算和移动工程群体、 提供反馈和影响路线图 》。

衷心感谢以下 Microsoft 技术专家对本文的审阅:James Birdsall,普拉迪普切拉潘,Juan 佩雷斯,丹 Rosanova