本文章是由機器翻譯。

Azure 內幕消息

事件中心的分析和視覺化

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 還密切與雲計算和移動工程群體、 提供回饋和影響路線圖 》。

感謝以下的微軟技術專家對本文的審閱:JamesDanRosanova Juan · 佩雷斯 Birdsall,切拉潘普拉迪普,