質問: **質問** 裏でとても重たい処理が走るようなWEBアプリの負荷分散?分散処理?同時実行数の制限?ってどうやりますか?**一般論を教えてください**(Pythonを使っている人はPythonでの実装方法をお教えてください) **状況** 裏で重たい処理を動かすWEBアプリを作成しております。結構重たいので、同時に100人くらいで処理を流すと大量にエラーが発生します(根本のプログラムの問題か、メモリが枯渇して強制的にKILLされているかわかりませんが。。。) **環境** ``` サーバ:Nginx アプリ:Django 並列処理:Celeryかthreding ``` **現状に関する追記** テストの段階です。HeadlessChromeとSeleniumを用いて、テスト用サーバーからほとんど同時に100ユーザーほどでアクセスしています。Jmeterなどのツールの使いかたを覚えている時間がなかったためです。この際、データベースに保存しているデータから、正常に全ユーザーがアクセスできているかを確認したり、ページ遷移の際にスクリーンショットをとって、正常にページ遷移が行われているか確認しています。しかし、100ユーザーでアクセスした際、CPU使用率は低く、メモリ使用率が低いのにもかかわらず、何分経っても、ページが遷移しない状況がありました(ご指摘のような「一つ一つの処理が実行中の間はレスポンスを返す処理は行っていません」)このような状況はユーザー数が増えるにつれ、顕著に現れます **独り言** このような場合どんな方法で、同時接続に対処しますか?thredingって同時実行数の制限ってできるんですか?Celeryはworker数やらconcurrencyやら指定したら、溢れたタスクは待機してくれますが、、、
回答: 同じような回答になりますが... まずはエラーの原因を追究するのがスジですよね。 その結果によってどこに手を入れるのかを決める、と。 やみくもに対策してもデスループにはまりがちになるのがオチです。 次に、サーバーをもっとパワフルなものにリプレースする あるいは重たい処理を別サーバーで動かす などの力技が使えるならそれがベターですかね。 ハードウェア的なてこ入れがムリなら webアプリと重たい処理の間に調停役のなにかを挟むことになるかと。 ただし、webは一期一会ですから利用手順的な意味で変更が必要でしょう。 最初に書きましたが、webアプリが原因なのか、重たい処理が原因なのか それによってやり方は変わってくると思います。