2015-07-01 32 views
1

SHORT VERSION:如何在AWS lambda中定期觸發事件?我如何在aws lambda中定期觸發事件?

LONG VERSION:我的情況是這樣的,我有一個數據庫中的事件在一定的時間內過期。每當我發現事件已經過期時,我想運行一個函數(發送推送通知,刪除行等)。我知道爲每個創建的事件設置一個計時器是不切實際的,但是有沒有什麼東西能夠每分鐘掃描一次我的數據庫,並尋找過期的事件來運行我的代碼?如果沒有,我的解決方案是否有其他選擇?

回答

0

您可以將事件存儲在以UUID爲鍵值的DynamoDB表中,並且在此表上具有散列範圍模式GSI,其中散列鍵將是過期時間段,例如事件過期的小時數20150701T04Z和GSI的範圍鍵可以是確切的時間戳(unix時間)。這樣,對於給定的小時到期存儲桶,您可以在您要將事件過期的小時內使用範圍查詢,並利用關鍵條件將讀數限制爲您感興趣的時間範圍.GSI不強制實施唯一性,所以即使在Unix時間有多個事件,你仍然可以。通過投射ALL attributes而不是KEYS_ONLY或INCLUDE,可以將事件過期從GSI驅動出去,而無需再次讀取到基表。通過調整到期桶的大小(幾小時或幾分鐘或幾天都是很好的候選),您可以大大減少寫入基表和GSI查詢的機會,因爲到期桶有不同的時間限制散列鍵,將均勻分佈在整個散列鍵空間中。

關於事件處理和Lambda的使用,首先,您可以讓EC2實例執行查詢,並在事件表過期時刪除它們(或通過將它們標記爲過期來將其刪除)。刪除事件項目將保持表格的可管理性,並幫助您避免在表格的分區中使用IOPS dilution。如果項目的數量增長不受限制,那麼表的分區將繼續分裂,導致每個分區的預置吞吐量越來越小,除非您提供了表格。接下來在流水線中,您可以使用包含舊圖像和新圖像的流視圖類型enable a DynamoDB stream on the event table。然後,您可以執行事件驅動處理(推送通知等)的attach a Lambda function to your Stream。當舊的和新的圖像之間的區別表明事件是墓碑式的時,您可以讓Lambda函數發出火警通知。

+0

只是告訴你,我要做的就是設置一個ec2實例,每分鐘通過使用crontab調用lambda函數。 lambda函數將查詢所有應該過期的事件並將其刪除。同樣在我的應用程序中,如果用戶曾經見過一個事件失效,它也會調用一個lambda函數。因此,如果用戶不查看應用程序,最糟糕的情況是59秒。 – user2977578

相關問題