Help us understand the problem. What is going on with this article?

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

変更方法

②ロードバランサ

  1. 負荷分散メニューの下部の青文字「詳細設定メニュー」を押下
  2. 「バックエンドサービス」タブを選択
  3. 編集ボタンを押下
  4. バックエンドサービス詳細の上部の方にある鉛筆マーク image.png
  5. これで30秒→300秒に image.png

④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つになり得ると思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした