7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

API Connectでカスタムの流量制御を使ってみた

Last updated at Posted at 2017-09-23

前提バージョン

IBM API Connect 5.0.6.3
※当記事ではVMware Workstation PlayerでAPI ConnectがPC上に導入済みとします。
#1 API Connectの流量制御について
API Connectでは、APIに対して「プラン」と呼ばれる流量制御の設定が可能です。
APIを利用する開発者は、開発者ポータルのサイトでプランの利用登録(サブスクライブ)をすることで、そのプランで指定された分だけAPIを呼び出すことができます。

APIが最大でどれだけ呼び出し可能になるかというと、
最大の流量 = プランへの登録数 × プランの制限流量
となるため、システムを保護する観点での流量制御を行う必要が生じる場合があります。

この記事では、APIのアセンブル処理の「gatewayscriptポリシー」でシステム保護のための流量制御を実施する方法について紹介します。
※gatewayscriptポリシーを使うため、OAuthプロバイダーAPIやMicroGatewayにはこの方法は適用できません。

#2 API Connect設定
#2-1 API定義の作成
API Manager(またはAPI Designer) で、通常のAPI定義を作成します。
image.png

#2-2 流量制御のポリシーを追加
「アセンブル」タブに移動し、「gatewayscript」アクションを追加します。
以下の設定では「lim01」をキーとし、5秒間(固定時間でカウント)に100回を超える呼び出しが発生すると、ユーザー定義の例外を発生させます。

image.png

var rl = require('ratelimit');
var apim = require('./apim.custom.js');
var lim01Rate = rl.rateCreate('lim01', 100, 5, 'fixed');
lim01Rate.remove(1, function(error, remaining, timeToReset) {
  if (error) {
    apim.error('ThrottleError', 429, 'Too Many Requests', 'Throttle Error has been occured.');
  } else {
    apim.readInputAsBuffer(function(error2, buffer) {
      session.output.write(buffer);
    });
  }
});

以上で設定完了です。
APIごとにどのキーを割り当てるかによって、キーの単位で流量を調整することが可能になります。

#2-3 流量制御が行われる範囲
上記「ratelimit」モジュールの「rateCreate」における流量制御は、プランの流量制御とは異なり(※)、DataPower Gatewayサーバーの割り当て量制約サーバーの設定内容に応じて、その制御範囲が変わります。
割り当て量制約サーバーの設定でピアグループの設定を行うと、その範囲で流量制御が行われます。
逆にピアグループの設定を行わない場合、上記の流量制御はサーバー単位となってしまいますので注意が必要です。
また、APIConnectのプロバイダー組織が複数ある場合、プランの流量制御はGatewayクラスターの範囲で制御されるのに対し、「rateCreate」の機能は(おそらく)DataPower Gatewayサーバー全体に対して行われるため、流量制御に使用するキーの文字列は適切なネーミングルールを決める必要があるでしょう。

※プランの流量制御は、APIMドメインのSLMピアグループの設定に基づいています。つまり、プランの流量制御の範囲はGatewayクラスター内ということになります。

#2-4 サーバー単位で流量制御したい場合
DataPowerサーバー自体への負荷を抑える目的でサーバー単位で流量制御したい場合、キーとなる値に「_システムID」を付与することで、サーバごとにキーを割り当てられます。
システムIDはGatewayScriptでシステムのコンテキスト変数から取得できます(ちょっと面倒ですが。。。)。

免責事項

この記事の内容は不正確である可能性があります。この記事の内容やその利用等によって生じた、いかなる損害に対しても責任は負いません。

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?