Skip to content

サーバの負荷軽減について

サーバの負荷を分散させるために、本システムではいくつかのコンテナをロードバランシングできるようにしています。

ロードバランシングの設定について

ロードバランシングはデフォルトで設定されていません。そのため、高負荷状態に弱い可能性があります。 設定するために、Dockerコンテナ起動後にコマンドを数行実行してください。

1. フロントエンドの配信

フロントエンドについては「Cloudflare Pages」を利用することで、CDNを利用して負荷を軽減しています。 原則として、静的なHTMLやCSS、JavaScriptファイルはCloudflare Pagesで配信することで、バックエンドのAPIサーバへの負荷を軽減しています。

2. APIサーバの負荷分散

次にボトルネックになる部分は、サーバ(特にバックエンドのAPIサーバ)です。 そのため、APIサーバをDockerコンテナとして複数立ち上げ、Traefikで負荷分散を行っています。

負荷率によって自動的に調整できるKubernetesを使っていないため、負荷率が高くなった場合は手動でコンテナを追加する必要がありますが、それでも負荷軽減には十分な効果があると考えています。

コンテナの追加

bash
docker compose up -d --scale fastapi=3  #これからサーバを立ち上げるとき
docker compose scale fastapi=3  #すでにサーバが立ち上がっているとき

実運用では、デーモンを作成すると便利かつ安全です

本方法でdockerコンテナを立ち上げることは可能ですが、プロダクション環境下でこれをやるのは若干の恐怖があります。
学内のサーバは誰が触るかわからないため、デーモンを作成しておくことをおすすめします。(再起動時も自動起動可能ですし、ログのトレースなどもサクッとできます)
詳しくは、こちら(デーモンの作成)を参照してください。

上記のコマンドで、APIサーバのコンテナを3つ立ち上げることができます。 コマンド押下後に少し待つと自動的にTraefikが負荷分散を実施してくれます。 立てるコンテナ数は適宜変更してください。(適正数などはわかりません)