NerdWallet 的使命是為生活中的所有財務決策提供清晰的資訊。 這涵蓋了一系列不同的主題:從選擇合適的信用卡到管理您的支出,到找到最好的個人貸款,再到為您的抵押貸款再融資。 因此,NerdWallet 提供了跨越眾多領域的強大功能,例如信用監控和警報、用於跟蹤淨值和現金流的儀表板、機器學習 (ML) 驅動的建議,以及為數百萬使用者提供的更多功能。
為了為我們的使用者構建一個一體化和高效能的體驗,我們需要能夠使用來自多個獨立團隊的大量不同的使用者資料。 這需要強大的資料文化以及一套資料基礎設施和自助服務工具,以實現創造力和共同作業。
這篇文章中我們闡述了一個用例,該用例說明 NerdWallet 如何通過構建支援來自整個公司的流資料的無伺服器 Serverless 管道來擴充套件其資料生態系統。 我們迭代了兩種不同的架構,並且說明在初始設計中遇到的挑戰,以及我們在第二個架構中使用 Apache Hudi 和其他 AWS 服務所獲得的收益。
NerdWallet 收集了大量的支出資料。 此資料用於為使用者構建有用的儀表板和見解。資料儲存在 Amazon Aurora 叢集中。 儘管 Aurora 叢集作為聯機事務處理 (OLTP) 引擎執行良好,但它不適合大型、複雜的聯機分析處理 (OLAP) 查詢,因此我們無法向分析師和資料工程師公開直接的資料庫存取許可權。資料所有者必須使用唯讀副本上的資料來解決此類請求。 隨著資料量以及資料消費者和請求的多樣性的增長,這個過程變得更加難以維護。 此外資料科學家大多需要從 Amazon Simple Storage Service (Amazon S3) 等物件儲存存取資料檔案。
我們決定探索所有消費者都可以使用開放標準工具和協定安全且可延伸地獨立完成他們自己的資料請求的替代方案。 從資料網格範例中汲取靈感,我們設計了一個基於 Amazon S3 的資料湖,將資料生產者與消費者分離,同時提供自助服務、安全合規且可延伸的易於設定的工具集。
下圖是初始設計的架構
該設計包括以下關鍵元件:
該架構適用於小型測試資料集,然而團隊很快就遇到了大規模生產資料集的問題。
團隊遇到了以下挑戰
由於初始架構設計的所有這些限制,我們決定重新設計一個真正的增量處理架構
下圖展示了我們重新設計的架構。為了支援實時用例,我們在架構中新增了 Amazon Kinesis Data Streams、AWS Lambda、Amazon Kinesis Data Firehose 和 Amazon Simple Notification Service (Amazon SNS)。
新引入的元件如下:
SELECT ID, SUM(AMOUNT) SPENDING
FROM "{{DATABASE}}"."{{TABLE}}"
WHERE CATEGORY IN (
'ENTERTAINMENT',
'SOME_OTHER_CATEGORY')
AND ID_BUCKET ='{{ID_BUCKET}}'
GROUP BY ID;
採用一種無伺服器流處理架構,該架構可以在我們資料湖的新鮮度幾分鐘內擴充套件到每秒數千次寫入。在目前的規模下,Hudi 作業每秒處理每個 AWS Glue Worker 大約 1.75 MiB,它可以自動向上和向下擴充套件(得益於 AWS Glue 自動擴充套件)。 由於 Hudi 的增量更新與我們的第一次架構相比,在不到 5 分鐘的時間內端到端新鮮度有了顯著改善。
藉助 Amazon S3 上的 Hudi,我們已經建立了一個高槓杆基礎來個性化我們的使用者體驗。 擁有資料的團隊現在可以通過千篇一律的解決方案中內建的可靠性和效能特徵在整個組織內共用他們的資料。 這使我們的資料消費者能夠構建更復雜的訊號,為生活中的所有財務決策提供清晰度。
PS:如果您覺得閱讀本文對您有幫助,請點一下「推薦」按鈕,您的「推薦」,將會是我不竭的動力!
作者:leesf 掌控之中,才會成功;掌控之外,註定失敗。
出處:http://www.cnblogs.com/leesf456/
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。
如果覺得本文對您有幫助,您可以請我喝杯咖啡!