Kong API のRate-Limitingに引っかかった件

あるサービスを本番展開した後、しばらくして「データ更新ができない」というインシデントが発生した。

 

調べてみると、API GWとして導入しているKong APIを中継すると処理が失敗していることがわかった。

その時のエラーがこれ。

json is {

    "message" : "An unexpected error occurred"

}

. response is StatusCode: 500, ReasonPhrase : 'Internal Server Error',

Version: 1.1, Content: SYstem.Net.Http.HttpConnectionResponseContent,

Headers:

{

    (中略)

    ,X-RateLimit-Limit-Second: 10000,

    ,X-RateLimit-Remaing-Second: 9999

    ,RateLimit-Remaing: 9999

    ,ReteLimit-Limit: 1000

 (中略)

}

 

確認すると、Rate-Limitingを10000 requests per 1 secondで設定していた。

評価期間中は処理データ量が10000件未満でやっていたが、運用開始後10000件を超えるケースが発生した。

 

そもそも1秒あたりに10000件を超えるリクエスト投げまくる処理はいかがなものか、ということで、実装自体を見直すことにした。

 

見直し案

1) 処理すべきデータをある程度まとめて(バルクにして)投げる

2) フロントアプリがJSONデータを作って投げず、制御用APIをたたくようにする。
   元データファイルをアップロードし、ETL*1処理を

   キックするAPIを用意する。

 

データ量が今後増える可能性も考慮して、案2を採用した。

これにより、もともと処理が遅いといわれていたのも改善され、みんなハッピーに。

 

go on developing...

 

参考

 

*1:Extract Transform Load