SYSADMIN.leakyBucketTryConsume
このプロシージャは、Leaky Bucket アルゴリズムを実装し、Cross-Procedure Rate-limit 管理を提供します。
CREATE
FOREIGN
PROCEDURE
leakyBucketTryConsume(
IN
name
string
NOT
NULL
,
IN
capacity
integer
,
IN
refill
integer
) OPTIONS (UPDATECOUNT 0)
以下のパラメータを取ります:
Parameter | Description |
---|---|
| Name of a leaky bucket; can be multiple |
| Number of tokens available |
| Number of seconds to accumulate a unit |
leakyBucketTryConsume
手順は、トークンの「バケット」を管理するために使用されます。このプロシージャを呼び出すと、渡されたパラメータに応じて新しいバケツを作成したり、既存のバケツを更新したり、あるいは単にトークンを消費したりします。
- すべてのパラメータ (
name
,capacity
,refill
) を渡し、名前がまだ存在しない場合、新しいバケツが作成され、SYSADMIN.leakyBucketTryConsume
が呼び出されます。 name
と、他のパラメータ (capacity
および/またはrefill
) の一方または両方を渡した場合で、その名前がすでに存在する場合は、バケツが更新され、SYSADMIN.leakyBucketTryConsume
が呼び出されます。name
を渡すだけで、名前がすでに存在する場合は、SYSADMIN.leakyBucketTryConsum
e
が呼び出されます。
SYSADMIN.leakyBucketTryConsume
の呼び出しは、トークンがあればそれをバケツから消費するか、トークンが生成されるまで待ってから消費します。新しいバケツが作成されたり、既存のバケツが更新されたりすると、そのバケツはトークンで満たされます。
バケツの容量や補充時間が変更された場合、サーバーログに警告が追加されることに注意してください。補充時間は、手順が呼び出されたときにのみ計算されます。トークンの補充と消費の両方のアクションは、マルチスレッドに耐えられるように同期ブロック内で実行されます。
Examples
1. 容量2、補充速度10秒のリーキーバケットを作成:
CALL
"SYSADMIN.leakBucketTryConsume"
(
"name"
=>
'bucket1'
,
"capacity"
=>
2
,
"refill"
=>
10
);;
2. リーキーバケットを容量 5、補充速度 15 秒に更新:
CALL
"SYSADMIN.leakBucketTryConsume"
(
"name"
=>
'bucket1'
,
"capacity"
=>
5
,
"refill"
=>
15
);;
3. リーキーバケットの使用:
CALL
"SYSADMIN.leakBucketTryConsume"
(
"name"
=>
'bucket1'
);;
SYSADMIN.leakyBucketReset
このプロシージャは、リーキーバケットを壊します。
CREATE
FOREIGN
PROCEDURE
leakyBucketReset(
IN
name
string
NOT
NULL
)
Example
CALL SYSADMIN.leakyBucketReset(
"name"
=>
'bucket1'
);;