Google Compute Engine&Nginx&Railsタイムアウト考察
diffeasy Advent Calendar 2019の3日目の記事です。
タイムアウト対策
Webでの大量データのPDF、CSVダウンロードなど、API実行すると処理が圧倒的に長くなるとタイムアウトになります。根本のロジックを見直す、非同期処理やバッチ処理を検討することが必達です。
ただ、根本対策に時間を要してしまう可能性があったため、暫定対策としてのインフラ側のタイムアウト値設定を伸ばすことをやってみたのでまとめます。
4分(240秒)ぐらいかかる処理だったため、余裕を持って5分(300秒)ほど処理できるようにしたものです。
(WebAPIとしてありえないとは突っ込まないでほしい。一旦。。)
前提となる環境
- GoogleComputeEngine(Linux CentOS)
- GCPロードバランサ
- nginx
- Rails(APIモード)
- Puma
- Vue.js(axiosでAPI実行)
処理順序は?
基本的に処理が進むにつれてタイムアウト値は短くする必要があります。
①API URL実行
②GCPロードバランサ
③GoogleComputeEngine(Linux CentOS)
④nginx
⑤puma(Rails)
タイムアウト値を持っているのは?
今回の構成では以下2つのみがデフォルト保有しているものでした。
この2つを変更することでタイムアウト値を変えることが出来ます。
②ロードバランサ
④nginx
変更方法
②ロードバランサ
④nginx
nginxのタイムアウト初期値は60秒。290秒に変更する。
fastcgi_read_timeout
proxy_read_timeout
をセットする。
server {
listen 10443;
server_name xxxx.hogehoge.com;
# タイムアウトまでの秒数を変更
fastcgi_read_timeout 290;
proxy_read_timeout 290;
}
まとめ
4分ほどかかる処理を作ってしまうのが、そもそもアンチパターンですね。
ただ、その処理をリファクタリングするのに時間をかけてユーザーを待たせる可能性があるのなら、長い時間を待たせて動かしてもらうのも対策の1つになり得ると思います。
Author And Source
この問題について(Google Compute Engine&Nginx&Railsタイムアウト考察), 我々は、より多くの情報をここで見つけました https://qiita.com/tomoshin/items/7b2eef4743527cbe26ca著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .