

# 情境 3：為資料洞察流程準備點擊流資料
<a name="scenario-3"></a>

*Fast Sneakers* 是一家專注於時尚運動鞋的時尚精品店。任何一雙鞋子的價格可高可低，一切取決於庫存和趨勢，例如昨晚在電視上看到某位名人或體育明星穿著品牌運動鞋。*Fast Sneakers* 必須追蹤和分析這些趨勢，以將其收入最大化。

*Fast Sneakers* 不希望在專案中引入額外的開銷與需維護的新基礎設施。他們希望能夠將開發分割到適當的各方，讓資料工程師可以專注於資料轉換，且資料科學家可以獨立地處理其機器學習功能。

為了快速回應並根據需求自動調整價格，*Fast Sneakers* 將串流重要事件 (如點擊興趣和購買資料)、轉換和增強事件資料，並將其提供給機器學習模型。他們的 ML 模型能夠判斷是否需要調整價格。此讓 *Fast Sneakers* 可以自動修改其價格，從而將其產品利潤最大化。

![Fast Sneakers 即時價格調整](http://docs.aws.amazon.com/zh_tw/whitepapers/latest/streaming-data-solutions-amazon-kinesis/images/SDS-image-4.png)


*Fast Sneakers 即時價格調整*

此架構圖表顯示了 *Fast Sneakers* 利用 Kinesis Data Streams、AWS Glue 和 DynamoDB Streams 建立的即時串流解決方案。透過利用這些服務，他們可以獲得具有彈性和可靠性的解決方案，而無需花時間設定和維護支援的基礎設施。透過專注在串流擷取、轉換、載入 (ETL) 任務和機器學習模型，他們可以將時間花在為公司帶來價值的方面。

為了更深入了解其工作負載中使用的架構和技術，以下是所使用服務的一些詳細資訊。

## AWS Glue 和 AWS Glue 串流
<a name="aws-glue-and-aws-glue-streaming"></a>

[AWS Glue](https://aws.amazon.com/glue/) 是一種全受管的 ETL 服務，您可以用來編目、清理、擴充資料內容並在資料存放區之間可靠地移動資料。您可以藉助 AWS Glue，顯著降低 ETL 任務建立所需的成本、複雜性和時間。AWS Glue 是無伺服器的，因此沒有要設定或管理的基礎設施。您只需為執行任務時使用的資源付費。

您可以利用 AWS Glue，建立具有 [AWS Glue 串流 ETL 任務](https://docs.aws.amazon.com/glue/latest/dg/add-job-streaming.html)的消費者應用程式。這使您能夠利用 Apache Spark 和其他基於 Spark 的模組編寫來使用和處理事件資料。本文件的下一章節將詳細介紹此情境。

### AWS Glue Data Catalog
<a name="aws-glue-data-catalog"></a>

[AWS Glue Data Catalog](https://docs.aws.amazon.com/glue/latest/dg/populate-data-catalog.html) 包含對資料的參考，這些資料會用作為 AWS Glue 中 ETL 任務的來源和目標。AWS Glue Data Catalog 是資料的位置、結構描述及執行時間指標的索引。您可以使用資料目錄中的資訊，來建立和監控 ETL 任務。資料目錄中的資訊會存放為中繼資料資料表，其中每個資料表會指定單一資料存放區。您可以透過設定編目程式，自動評估多種類型的資料存放區，包括 DynamoDB、S3 和 Java Database Connectivity (JDBC) 連接的商店、擷取中繼資料和結構描述，然後在 AWS Glue Data Catalog 中建立資料表定義。

若要在 AWS Glue 串流 ETL 任務中使用 Amazon Kinesis Data Streams，最佳實務是在 AWS Glue Data Catalog 資料庫的資料表中定義串流。您可以使用 Kinesis 串流定義串流來源資料表，這是支援的眾多格式之一 (CSV、JSON、ORC、Parquet、Avro 或 Grok 的客户格式)。您可以手動輸入結構描述，也可以將此步驟留給 AWS Glue 任務，讓其在任務執行時間判斷。

### AWS Glue 串流 ETL 任務
<a name="aws-glue-streaming-etl-catalog"></a>

[AWS Glue](https://aws.amazon.com/glue) 會在 Apache Spark 無伺服器環境中執行 ETL 任務。AWS Glue 會在其服務帳戶中佈建和管理的虛擬資源上執行這些任務。除了能夠執行以 Apache Spark 為基礎的任務之外，AWS Glue 還在 Spark 的基礎之上，透過 [DynamicFrame](https://docs.aws.amazon.com/glue/latest/dg/aws-glue-api-crawler-pyspark-extensions-dynamic-frame.html) 提供了額外的功能層級。

DynamicFrame 是分散式資料表，可支援結構和陣列等巢套的資料。每個記錄都是自我描述，專為具有半結構化資料的結構描述靈活性而設計。`DynamicFrame` 中的記錄包含資料和描述資料的結構描述。ETL 指令碼中都支援 Apache Spark `DataFrames` 和 `DynamicFrames`，且您可以來回轉換。`DynamicFrames` 為資料清理和 ETL 提供一組進階轉換。

透過在 AWS Glue 任務中使用 Spark Streaming，您可以建立連續執行的串流 ETL 任務，並使用來自 Amazon Kinesis Data Streams、Apache Kafka 和 Amazon MSK 等串流來源的資料。這些任務可以清理、合併和轉換資料，然後將結果載入到 Amazon S3、Amazon DynamoDB 或 JDBC 資料儲存等存放區中。

依預設，AWS Glue 以 100 秒的間隔處理和寫出資料。這樣可以有效處理資料，並且可在資料到達時間比預期晚時執行彙總。您可以透過調整長短來設定時段，以適應反應速度與彙總的精確度。AWS Glue 串流任務使用檢查點來追蹤從 Kinesis Data Stream 讀取的資料。如需在 AWS Glue 中建立串流 ETL 任務的演練，您可以參考[在 AWS Glue 中新增串流 ETL 任務](https://docs.aws.amazon.com/glue/latest/dg/add-job-streaming.html)

## Amazon DynamoDB
<a name="amazon-dynamodb"></a>

[Amazon DynamoDB](https://aws.amazon.com/dynamodb/) 是一個鍵值和文件資料庫，可針對任何規模提供十毫秒內級別的效能。其是全受管、多區域、多主動式耐用資料庫，內建安全性、備份和還原以及記憶體內快取，以供網際網路規模的應用程式使用。DynamoDB 每天可以處理超過十兆個請求，而且每秒最多可支援超過 2,000 萬個請求。

### 變更 DynamoDB Streams 的資料擷取
<a name="change-data-capture-for-dynamodb-streams"></a>

[DynamoDB 串流](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.html)是 DynamoDB 資料表中項目變更的排序資訊流。當您在資料表啟用串流時，DynamoDB 會擷取資料表中對資料項目所做每項修改的資訊。DynamoDB 可在 AWS Lambda 上執行，所以您可以建立觸發程序，即自動回應 DynamoDB Streams 事件的程式碼片段。您可以利用觸發程序建置應用程式，該應用程式會對 DynamoDB 資料表中的資料修改做出反應。

在資料表上啟用串流後，您就可以將串流 [Amazon 資源名稱](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html) (ARN) 與您編寫的 Lambda 函數相關聯。修改資料表項目後，資料表串流會立即顯示新記錄。​當 ​AWS Lambda 偵測到新的串流記錄時，便會輪詢該串流並同步叫用 Lambda 函數。

## Amazon SageMaker 和 Amazon SageMaker 服務端點
<a name="amazon-sagemaker-and-amazon-sagemaker-service-endpoints"></a>

[Amazon SageMaker](https://aws.amazon.com/sagemaker/) 是一個全受管的平台，使開發人員和資料科學家能夠以任何規模快速建置、訓練和部署機器學習模型。SageMaker 包含能夠一起使用或獨立使用的模組，可用於建置、訓練和部署機器學習模型。藉助 [Amazon SageMaker 服務端點](https://docs.aws.amazon.com/general/latest/gr/rande.html)，您就可以建立受管託管端點，以便使用您在 Amazon SageMaker 內部或外部開發的部署模型進行即時推論。

透過使用 AWS SDK，您可以叫用 SageMaker 端點，傳遞內容類型資訊和內容，然後根據傳遞的資料接收即時預測。這使您能夠將機器學習模型的設計和開發與針對推論結果執行動作的程式碼分開。

這使資料科學家能夠專注於機器學習，而使用機器學習模型的開發人員可以專注於該模型在程式碼中的使用情形。如需如何在 SageMaker 中叫用端點的更多資訊，請參閱 [Amazon SageMaker API 參考中的 InvokeEnpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)。

## 即時推論資料洞察
<a name="inferring-data-insights-in-real-time"></a>

之前的架構圖表顯示，*Fast Sneakers* 現有的 Web 應用程式新增了一個內含點擊流事件的 Kinesis Data Stream，其中提供網站的流量和事件資料。產品目錄包含諸如分類、產品屬性和價格等資訊，以及包含訂購項目、帳單、出貨等資料的訂單表都是單獨的 DynamoDB 資料表。資料串流來源和適當的 DynamoDB 資料表會在 AWS Glue Data Catalog 中定義其中繼資料和結構描述，以供串流 AWS Glue ETL 任務使用。

透過利用 Apache Spark、Spark Streaming 和 AWS Glue 串流 ETL 任務中的 `DynamicFrames`，*Fast Sneakers* 可以從任一資料串流中擷取資料並進行轉換，從產品和訂單資料表中合併資料。透過轉換中的水合資料，從中取得推論結果的資料集將提交到 DynamoDB 資料表中。

資料表的 DynamoDB Stream 為寫入的每條新記錄觸發 Lambda 函數。Lambda 函數使用 AWS SDK，將先前轉換的記錄提交到 SageMaker 端點，以推論產品需要進行哪些價格調整 (如果有)。如果機器學習模型找到需要調整價格的項目，Lambda 函數會將價格變更寫入目錄 DynamoDB 資料表中的產品。

## 總結
<a name="summary-4"></a>

Amazon Kinesis Data Streams 可輕鬆地收集、處理和分析即時串流資料，讓您及時取得深入的洞察並快速地對新資訊做出反應。與 AWS Glue 無伺服器資料整合服務結合，您可以建立即時事件資料串流應用程式，為機器學習準備和結合資料。

Kinesis Data Streams 和 AWS Glue 服務都是全受管的，因此 AWS 消除了為大數據平台管理基礎設施的無差別繁重工作，讓您專注於以資料為基礎而產生的資料洞察。

*Fast Sneakers* 可以利用即時事件處理和機器學習，使其網站能夠進行全自動的即時價格調整，從而大幅提高產品庫存。這為他們的業務帶來了最大的價值，同時免除大數據平台的建立和維護需要。