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.leakyBucketTryConsumeが呼び出されます。
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');;