npocccties / chiloportal

Other
2 stars 0 forks source link

同一IPからの 1 秒あたりのリクエスト数制限 #562

Closed yoshinobu-etou-id closed 1 year ago

yoshinobu-etou-id commented 1 year ago

普通にポータルサイトを見る分には問題ないようなリクエスト数を上限に設定済み。 F5キーを連打すると過負荷を示す 503 エラーを表示。(暫くして、再度 F5 キーを押下すると正常に戻る) 2~3日の間、様子を見てから、問題なければクローズ予定。

yoshinobu-etou-id commented 1 year ago

F5キーを連打すると過負荷を示す 503 エラーを表示。(暫くして、再度 F5 キーを押下すると正常に戻る)

ちょっと違和感があったので、流量を緩和してみました。(75 requests/sec)

普通にF5キーを連打する分には503は出ないように見えましたが、 江藤端末から攻撃ツール(vegeta)で超過リクエスト(85 requests/sec)を10秒間、 送信したところ503をいくつか返してました。

65361ddff90a:/workspace# vegeta report result/front/front_85_rate.bin 
Requests      [total, rate, throughput]  850, 85.10, 81.16
Duration      [total, attack, wait]      10.0174764s, 9.9881345s, 29.3419ms
Latencies     [mean, 50, 95, 99, max]    33.5196ms, 30.852005ms, 36.55218ms, 134.86395ms, 205.5056ms
Bytes In      [total, mean]              9423455, 11086.42
Bytes Out     [total, mean]              0, 0.00
Success       [ratio]                    95.65%
Status Codes  [code:count]               200:813  503:37  
Error Set:
503 Service Temporarily Unavailable
yoshinobu-etou-id commented 1 year ago

下記のテスト用のポータルサイトだと503エラーが頻発していたので、一旦リクエスト上限は解除しています。 https://test-portal.oku.cccties.org/consumers/1/frameworks/1/stages/1

バックエンド側の不具合もあり、比較的多い能力バッジIDを返していたためと思いますが、 1秒あたりのリクエスト上限については、余裕をもって設定する予定です。

ties-makimura commented 1 year ago

バッジマップの整理V5 で見る感じですと,能力バッジが1つ増えると,育成指標の対応数は1~10程度増えそうです(F列とJ列)

現時点で予定している能力バッジは41個なので,テスト用のポータルサイトだと今の3倍程度バッジID数が返ってきても問題なければ,スタート時は大丈夫かなと思えます.

yoshinobu-etou-id commented 1 year ago

切りがいいところで 150 Requests/sec を上限に設定したいと思います。(内、Backend API:15)

現時点:

スタート時想定:

以下、現時点の Request数を添付しておきます。

スクリーンショット 2022-11-18 091036

yoshinobu-etou-id commented 1 year ago

設定を変更し、開発サーバーで問題ないことを動作確認済みです。 念の為、テストサーバーでも動作確認をお願いしたいです。 @ties-makimura

ties-makimura commented 1 year ago

https://github.com/npocccties/chiloportal/blob/develop/backend/nginx.production.conf の設定をそのまま nginx.conf にすると, 育成指標ページで 503 になりました.

yoshinobu-etou commented 1 year ago

ちなみにどのURLでしたでしょうか?

ties-makimura commented 1 year ago

https://test-portal.oku.cccties.org/consumers/1/frameworks/1/stages/1 今は 503 でるようにしていますが,ページ確認できないので,確認したい時は limit_req の行をコメントしています.

yoshinobu-etou commented 1 year ago

backend のディレクトリで以下のコマンドを叩き、コンソールに出た結果を見てみたいです。 docker compose logs web

ties-makimura commented 1 year ago
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/consumer?consumer_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/consumer/?consumer_id=1 HTTP/1.1" 200 139 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/framework?framework_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/framework/?framework_id=1 HTTP/1.1" 200 1953 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/framework/stage/list?framework_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/framework/stage/list/?framework_id=1 HTTP/1.1" 200 93 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/stage/field/list?stage_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/stage/field/list/?stage_id=1 HTTP/1.1" 200 2672 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7%2C8%2C9%2C10%2C11 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7%2C12%2C13 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *891 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *904 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *903 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *902 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *901 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *898 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *900 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *897 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *899 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *896 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7%2C12%2C13 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=16 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=16 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *900 limiting requests, excess: 15.050 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *896 limiting requests, excess: 15.750 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *899 limiting requests, excess: 15.750 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=16 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=16 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=16 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *902 limiting requests, excess: 15.600 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=16 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *903 limiting requests, excess: 15.450 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *891 limiting requests, excess: 15.300 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 31#31: *904 limiting requests, excess: 15.300 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *927 limiting requests, excess: 15.100 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *929 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 2022/11/18 05:40:14 [error] 30#30: *930 limiting requests, excess: 15.950 by zone "lrz", client: 172.18.0.1, server: , request: "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7%2C8%2C9%2C10%2C11 HTTP/1.1", host: "test-portal.oku.cccties.org"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:05:40:14 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7%2C8%2C9%2C10%2C11 HTTP/1.1" 503 197 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
yoshinobu-etou commented 1 year ago

意外に backend に向けたリクエストが67件と多いですね。。。 見誤ってましたので、再度調整いたします。

yoshinobu-etou commented 1 year ago

/api/v1 で、15 が低すぎるので、503でエラーが発生しています。 現時点で 67 なので、200くらいは必要でしょうね。

yoshinobu-etou commented 1 year ago

GETのみで見ると46件、とすると150が上限で妥当かもですね。

yoshinobu-etou commented 1 year ago
    location ^~ /api/v1 {
        limit_req zone=lrz burst=15 nodelay;

    location ^~ /api/v1 {
        limit_req zone=lrz burst=150 nodelay;

で直ると思いますので、また直したらご報告いたします。

ties-makimura commented 1 year ago

limit_req zone=lrz burst=150 nodelay; にしたら表示されました. その時の GET /api/v1/ 部分のログ

backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:34 +0000] "GET /api/v1/consumer?consumer_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:34 +0000] "GET /api/v1/consumer/?consumer_id=1 HTTP/1.1" 200 139 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:34 +0000] "GET /api/v1/consumer/framework/list?consumer_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:34 +0000] "GET /api/v1/consumer/framework/list/?consumer_id=1 HTTP/1.1" 200 1955 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:34 +0000] "GET /api/v1/framework/stage/list?framework_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:34 +0000] "GET /api/v1/framework/stage/list/?framework_id=1 HTTP/1.1" 200 93 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:35 +0000] "GET /api/v1/consumer?consumer_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:35 +0000] "GET /api/v1/consumer/?consumer_id=1 HTTP/1.1" 200 139 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:35 +0000] "GET /api/v1/framework?framework_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:35 +0000] "GET /api/v1/framework/?framework_id=1 HTTP/1.1" 200 1953 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/framework/stage/list?framework_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/framework/stage/list/?framework_id=1 HTTP/1.1" 200 93 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/stage/field/list?stage_id=1 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/stage/field/list/?stage_id=1 HTTP/1.1" 200 2672 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=14 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7%2C8%2C9%2C10%2C11 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=16 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=16 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7%2C12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=19 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 301 0 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 200 2665 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=14 HTTP/1.1" 200 1176 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=19 HTTP/1.1" 200 1456 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7%2C8%2C9%2C10%2C11 HTTP/1.1" 200 8302 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=16 HTTP/1.1" 200 1254 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=16 HTTP/1.1" 200 1254 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 200 2665 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=19 HTTP/1.1" 200 1456 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 200 2665 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=19 HTTP/1.1" 200 1456 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=19 HTTP/1.1" 200 1456 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7%2C12%2C13 HTTP/1.1" 200 5699 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=12%2C13 HTTP/1.1" 200 3035 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 200 2665 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=19 HTTP/1.1" 200 1456 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
backend-web-1  | 172.18.0.1 - - [18/Nov/2022:06:29:36 +0000] "GET /api/v1/badges/?badges_type=wisdom&badges_ids=6%2C7 HTTP/1.1" 200 2665 "-" "node-fetch/1.0 (+https://github.com/bitinn/node-fetch)" "-"
yoshinobu-etou-id commented 1 year ago

動的ページだとリクエスト数の多いところで、6件でした。 なので、切り良く10件として、スタート時想定の3倍とすると、30件で修正しました。

    location / {
        limit_req zone=lrz burst=30 nodelay;

テストサーバーにて動作確認済みなので、一旦クローズしますが、 問題あればリオープンいたします。

yoshinobu-etou-id commented 1 year ago

ちなみに docker compose でなくてもログは確認可能です。 docker logs -f backend-web-1

↑で指定するコンテナの名前は docker ps で確認可能。

yoshinobu-etou-id commented 1 year ago

フロントエンド(172.18.0.1)からバックエンドAPIへのリクエストについては、 外からのアクセスではない(Dockerのネットワークからのアクセス)ので制限対象外としました。

ただ、負荷の高い下記ページに集中してアクセスすると、 バックエンドAPIへのリクエストが増加し、503エラーが発生します。 https://test-portal.oku.cccties.org/consumers/1/frameworks/1/stages/1

とはいえ、みんながみんな、上記の負荷の高いページにアクセスすることもないと思いますので、 トップページや能力バッジのページにアクセスする分には問題ないかと思います。 もし、負荷集中した場合は、503エラーが発生しますが、負荷が軽減されると正常に戻ります。 (トップページに高負荷を掛けている状態で、江藤のスマホから能力バッジのページを見れることを確認済み)

本番環境は 4コア/16GB と伺っており、マシン性能を上げれば、 バックエンドAPIの処理能力(APIサーバーやDBサーバーの処理能力)が上がるので、 一応の対策は出来ていると思っております。

yoshinobu-etou-id commented 1 year ago

503/504エラー発生時には、Nginxがデフォルトの英語ページが表示されてしまうので、 ユーザが分かるよう日本語でその旨を表示する必要がある。(エラーメッセージは makimura さんから連携予定)

ties-makimura commented 1 year ago

アクセスが集中しているので時間をおいてからアクセスしてください これでお願いします.

yoshinobu-etou-id commented 1 year ago

以下、直リンクのエラーページです。 これが503/504の際に表示されます。 https://test-portal.oku.cccties.org/50x.html

ties-makimura commented 1 year ago

実際発生したら404の時のようにヘッダーなどは残る感じでしょうか? image

yoshinobu-etou-id commented 1 year ago

いえ。直リンクに示した通りです。

yoshinobu-etou-id commented 1 year ago

503/504はWEBサーバー(Nginx)が返すものであり、 404はフロントエンドが返しています。

yoshinobu-etou-id commented 1 year ago

今回は前者に対応しましたが、後者の対応も必要なのではないかと思ってきました。 フロントエンド未到達時:WEBサーバー(Nginx)がエラーページを返す フロントエンドからバックエンド未到達時:フロントエンドがエラーページを返す

yoshinobu-etou-id commented 1 year ago

バックエンドのエラーページのデザインについて問題なければクローズ願います。 もし、フロントエンドでのエラーページの表記も日本語にする必要があれば、別途 issue を作成願います。既に日本語になっていれば申し訳ございません。