我正嘗試在AWS服務之上構建數據收集管道。下面給出整體架構;是否有可能在連接到API網關的Lambda上使用AWS KPL
總結系統應該從API網關(1)(每個事件的一個請求)獲取事件並將數據寫入Kinesis(2)。
我期待〜每秒100k事件。我的問題與Lambda函數的KPL使用有關。在第2步中,我計劃用KPL編寫一個Lambda方法在Kinesis上以高吞吐量寫入事件。但是我不確定這是可能的,因爲API網關分別爲每個事件調用lambda函數。
在這樣的架構中使用KPL有可能/合理嗎?或者我應該使用Kinesis Put API來代替?
1 2 3 4
+----------------+ +----------------+ +----------------+ +----------------+
| | | | | | | |
| | | | | | | |
| AWS API GW +-----------> | AWS Lambda +-----------> | AWS Kinesis +----------> | AWS Lambda |
| | | Function with | | Streams | | |
| | | KPL | | | | |
| | | | | | | |
+----------------+ +----------------+ +----------------+ +-----+-----+----+
| |
| |
| |
| |
| |
5 | | 6
+----------------+ | | +----------------+
| | | | | |
| | | | | |
| AWS S3 <-------+ +----> | AWS Redshift |
| | | |
| | | |
| | | |
+----------------+ +----------------+
我也在考慮直接寫入S3而不是從api-gw調用lambda函數。如果第一種結構是不合理的,這可能是一個解決方案,但在這種情況下,我將有一個延遲,直到將數據寫入到KINESIS
1 2 3 4 5
+----------------+ +----------------+ +----------------+ +----------------+ +----------------+
| | | | | | | | | |
| | | | | | | | | |
| AWS API GW +-----------> | AWS Lambda +------> | AWS Lambda +-----------> | AWS Kinesis +----------> | AWS Lambda |
| | | to write data | | Function with | | Streams | | |
| | | to S3 | | KPL | | | | |
| | | | | | | | | |
+----------------+ +----------------+ +----------------+ +----------------+ +-----+-----+----+
| |
| |
| |
| |
| |
6 | | 7
+----------------+ | | +----------------+
| | | | | |
| | | | | |
您對第二架構有何看法。我不想面對休息終點的任何延遲(步驟1)。如果我使用kinesis端點直接使用api網關,則步驟2變爲不必要的同步寫入。 – ygk
第二個架構是我在Kinesis選項出現之前實現的。它可以工作,但是它嚴重限制了S3調用的數量。 S3會在某些時候降低你的速度,你的API將不得不拒絕新的傳入請求。因此,如果您不想將節流傳播到客戶端,那麼將數據放入聚合Kinesis是更好的選擇。每秒撥打10萬個電話,我不確定S3會接受這麼多電話。 –