1

我正在使用dynamodb來存儲應用程序的配置,這種配置可能會每天更改幾次,並且數量級將爲幾十。我的應用程序將部署到許多EC2實例。我最終將編寫另一個應用程序以允許管理配置,同時通過在AWS控制檯中直接更改表來管理配置。多個實例消耗的小型表上的Dynamo流

我想使用發電機流來監視配置的變化,當應用程序收到要處理的記錄時,它只是重新讀取整個發電機表。

這適用於本地和部署到一個實例,但是當我將它部署到三個實例時,它永遠不會初始化IRecordProcessor,並且不會對錶進行任何更改。

我懷疑這是因爲表只有一個碎片,並且the number of instances should not exceed the number of shards(至少對於kinesis流,我知道kinesis和dynamo流實際上是different)。

我知道如何拆分kinesis流中的碎片,但似乎無法找到一種方法來爲發電機流做到這一點。我讀到,其實the number of shards in a dynamo stream is equal to the number of partitions in the dynamo table,你可以increase the number of partitions by increasing read/write capacity。我不想增加吞吐量,因爲這樣會很昂貴。

  1. 請問碎片數量應該多於實例數的條件是否也適用於dyanmo流?如果是這樣,是否有另一種方法來增加碎片的數量,如果沒有,是否有一個衆所周知的原因,當多個實例讀取時,小型表上的發電機流失敗?
  2. 有沒有更好的方式來存儲和觀看這樣的配置(理想情況下使用AWS基礎架構)?我要調查觸發器。

回答

0

我終於解決了這個通過設置KinesisClientLibConfiguration時添加的實例ID(EC2MetadataUtils.getInstanceId)到流名字,所以一個新的流設置爲每個實例。這確實會導致爲每個實例設置單獨的發電機表,現在我需要在新實例上重新啓動應用程序時刪除舊錶。

我也聯繫了AWS的支持,並收到了this的回覆。

+0

您是否知道在使用DynamoDB Streams時是否受到Lambda尊重的碎片?即碎片總是被一個消費者依次消費?在我的[問題]中的更多細節(http://stackoverflow.com/questions/41527444/dynamodb-streams-with-lambda-how-to-process-the-records-in-order-by-logical-gr/)。 – AlfredBaudisch