私のアプリは、読み込みスループットを制限する、予め設定された読み込み容量を持つDynamoDBからデータを読み込みます。あなたが見ることができるように、クエリは最初の能力を読んで消費電流をチェックしますこの場合のキャパシティコントロールの仕方は?
const READ_CAPACITY = 80
async function query(params) {
const consumed = await getConsumedReadCapacity()
if (consumed > READ_CAPACITY) {
await sleep((consumed-READ_CAPACITY)*1000/READ_CAPACITY)
}
const result = await dynamoDB.query(params).promise()
await addConsumedReadCapacity(result.foo.bar.CapacityUnits)
return result.Items
}
async function getConsumedReadCapacity() {
return redis.get(`read-capacity:${Math.floor(Date.now()/1000)}`)
}
async function addConsumedReadCapacity(n) {
return redis.incrby(`read-capacity:${Math.floor(Date.now()/1000)}`, n)
}
、それがない場合:私はここで私は今これをやっている方法です、限界に達していないために私のクエリを制御したいのですがntがREAD_CAPACITY
を超えた場合は、クエリを実行し、消費された読み取り容量を加算します。
consumed > READ_CAPACITY
チェックが合格した競合状態があり、dynamoDB.query
を実行する前に、他のサーバー上の他のプロセスからのクエリによるdynamodb読み込み容量制限が問題になります。これをどのように改善できますか?
ありがとうございました!私はこれらのオプションを考慮しましたが、それらが合わないと思うのですが、その理由は毎回300万アイテムをクエリする必要があります。スループットに制限がないと大きなスパイクが発生するため、自動スケーリングと破裂。新しいクエリーとバックオフクエリーが一緒に実行される場合、試行してバックオフすると、それはより災害につながりませんか? – cheetah