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