負荷テストでLaravelの設定に制限されていた件
結論
下記、throttleの設定値を増やしてみる。
今回、私が実施した負荷テストにおいては、
1500くらいまで上げて期待する負荷を掛けて問題なく動作してくれました。
app/Http/Kernel.php
'api' => [ 'throttle:60,1', 'bindings', ], // 上記を下のように変更 'api' => [ 'throttle:1500,1', 'bindings', ],
設定値の意味としては、下記のようになっています。
'throttle:アクセス数,単位時間(分)',
「レート制限」というらしいです。
公式
Routing - Laravel - The PHP Framework For Web Artisans
‘‘‘ throttle middleware accepts two parameters that determine the maximum number of requests that can be made in a given number of minutes. ‘‘‘ 分数当たりのリクエスト数を制限すると読み取れます。
日本語版
リリースノート 5.6 Laravel
振り返り
nginxやphpfpm側の設定ばかり見ていてなかなか気づけませんでした。
そもそもLaravelでアクセス制限できることを知りませんでした。
Laravelちょっと詳しい方なら、サクっと解消できそうですね。
改めて考えると、
* サーバからはレスポンスが返されている「too many attempts」
* 60回を超えるとなぜかエラーになる。
などキーワードからLaravelに行き着いても良かったのですが、
ちょっとミドル側だという先入観が邪魔しちゃいましたね。
さいごに
今回はJMeterで適切な負荷をかけるためにthrottleを増やしましたが、
他のブログの説明を見る限り、あまりむやみに増やすのはよくないと感じました。
Laravel5.5 + Vue.js で SPAサイトを作成したら、”429 Too Many Requests”が頻発した - bitA Tech Blog
こちらに記載のあるように、IP+ドメイン単位でリクエスト数を数えているので、
同一のIPから1分間に60回アクセスされるという状況は、
テスト対象だったAPIとしては不正アクセスの可能性の方が高いため、
負荷テストだけの設定にとどめました。
ちなみに、FXなど金融系のAPIであれば分間200回や900回などもあるようです。
bitflyerは200回、OANDAは900回です。