簡體   English   中英

掃描表並在 AWS 上為 10M 用戶運行更新腳本

[英]Scan table an run an update script for 10M user on AWS

我正在使用包含超過 1000 萬用戶的AWS Dynamodb數據庫,我們在處理某些事件時出錯,並且我們確實以錯誤的方式保存了一些記錄。

我創建了一個腳本,通過 250 個批量掃描表來執行更新作業,我在本地運行它可以工作,並且需要 4 天才能完成孔數據庫,我遇到了AWS session 的一些問題,每次登錄注銷時再次運行腳本在完成之前,我還會跟蹤另一個表中的記錄,所以當我重新啟動腳本時,它會從該記錄開始,而不是從頭開始。

每個人都很高興這項工作完成了,但這不是我來這里的原因,所以我的QUESTION

使用aws服務的解決方案是什么,我可以在下次發生這種情況時構建它以使其faster而不是在本地運行。

歡迎任何模式設計/解釋/建議。

建築學

AWS Lambda 能夠在功能上實現無限的水平擴展。 Lambda 最多可以執行 15 分鍾,因此您只需為 lambda 提供適量的工作,以便它可以在配置的超時時間內完成。 在這個 model 中,您已經有 250 個批處理大小,因此您可能只需要幾秒鍾而不是 15 分鍾來執行批處理。

接下來是一個問題,告訴您的 lambda 它的工作是什么部分。 SQS 在這里是一個很好的解決方案 - 您可以為每批工作推送一條 SQS 消息,並讓 AWS 為每條消息自動調用您的 lambda。

您還必須擴展您的 dynamo 數據庫集群,以便能夠跟上這些 lambda 能夠生成的大量讀寫操作,而不會影響生產。 您可以首先將 lambda 限制在較低的音量並增加 lambda function 的允許並發性,同時監控生產 SLI 以確保不會造成任何影響。

這種系統的成本相當低。 10M/250 = 40000 批; 如果每個批次都是一條消息並且是一個 lambda 調用,則需要 40000 次調用,並且至少 40000 次寫入、40000 次讀取和 40000 次 sqs 刪除(在失敗的情況下,消息將返回隊列進行重新處理,這非常適合您的情況,因為該操作聽起來是冪等的)。 If you're not using lambda or SQS for anything else, this should fit comfortably within the free tier of lambda/sqs (1M sqs operations; 1M lambda invokes; 400k GB/s of lambda runtime) unless your batch updates take more than 10每個秒。 或需要超過 1GB 的 memory。 基於 4 天/40000 個批次,聽起來您的批次運行時間不到 9 秒。

當您水平縮放時,這並不重要。 但還是值得思考的。 有些語言比其他語言快得多,當必須執行 40,000 批操作時,它會產生很大的不同。 最慢的是使用對aws cli 的重復調用——每個調用都需要實例化整個 python 運行時,這有相當多的開銷。 Faster 是在 python 等解釋語言的一個進程中運行所有批次,因為至少那時您不必啟動 40,000 個進程而產生開銷。 但是仍然需要在 python 層和 C 層之間轉換所有數據的開銷。 對於一項操作,這種開銷幾乎不會引起注意; 對於 40,000 個請求,開銷可能很大。 我假設諸如 Java 之類的性能更高的語言將提供類似的性能改進。 根據經驗,我可以說 Go 的 AWS 開發工具包的性能將大大優於 Python,並且可以很好地並行啟動。

AWS glue可能是處理數據的好選擇 ( https://docs.aws.amazon.com/glue/latest/dg/add-job.html )

您可以從 dynamoDB( https://docs.aws.amazon.com/prescriptive-guidance/latest/dynamodb-full-table-copy-options/aws-glue.html )加載數據並使用 jupyter notebook一些非常簡單的 python 代碼來處理數據。

您甚至可以使用aws glue databrew ,它是一個可視化界面,讓您無需真正了解編程語言即可處理數據 ( https://aws.amazon.com/glue/features/databrew/ )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM