ホームページ >バックエンド開発 >PHPチュートリアル >Laravel (PHP) アプリケーションのスケーリングをどのように計画するか
10MPage.com の拡張: 成長するインターネット アーカイブをホスティングするための実用的なアプローチ
10MPage.com は、ユーザーが 64x64 ピクセルの画像を大規模なオンライン アーカイブに投稿できるようにすることで、2025 年のインターネットの状態を把握することを目指しています。 私は個人開発者として、初期段階では費用対効果を優先し、予算に優しい VPS でホスティングしています。 ただし、将来の成長にはスケーラブルなアーキテクチャが不可欠です。 この記事では、シンプルさと最小限のダウンタイムに焦点を当てた、段階的なスケーリング計画について詳しく説明します。
アプリケーション アーキテクチャ:
Laravel と PHP で構築されたこのアプリケーションは、画像の処理、グリッドの配置、電子メールの配信をバックグラウンド プロセス (Laravel Horizon と Supervisor によって管理) に大きく依存しています。 Redis はキャッシュとジョブを処理し、MySQL はデータを保存します。 Nginx と PHP-FPM は Web リクエストを処理します。 単一サーバーの初期設定を以下に示します。
スケーリング戦略:
私のスケーリング計画には、マルチサーバー アーキテクチャへの段階的な移行が含まれており、各ステップでのダウンタイムを最小限に抑えます。
フェーズ 1: Redis の分離 (ダウンタイムゼロ)
最初のステップは、Redis を別のサーバーに移動することです。 アプリケーションは一時的にローカル ファイル システム キャッシュを使用でき、ジョブ キューを一時停止できます。 これには、新しいサーバーのセットアップ、ネットワーク アクセスの構成、Redis 接続のリダイレクトが含まれます。 移行が完了すると、元のサーバー上の Redis がシャットダウンされ、アンインストールされます。
フェーズ 2: ロード バランサーの実装 (ダウンタイムゼロ)
次に、アクティブ ヘルス チェックなどの高度な機能を活用するロード バランサーとしての HAProxy を紹介します。 このサーバーは SSL 終了も処理します。 DNS はロード バランサーを指すように更新され、トラフィックを既存の Web サーバーに分散します。
フェーズ 3: ワーカー サーバーの分散 (ダウンタイムゼロ)
Laravel Horizon の設計により、ワーカー サーバーをシームレスに追加できます。 新しいサーバーがセットアップされ、アプリケーションがデプロイされ、スーパーバイザーを使用してワーカーが開始されます。 その後、元のワーカーをシャットダウンできます。 ワーカーのスケーリングには、単にこのプロセスを複製することが含まれます。
フェーズ 4: 複数の Web サーバーの導入 (ダウンタイムゼロ)
ワーカー サーバーと同様に、追加の Web サーバーが追加され、Nginx と PHP-FPM で構成され、ロード バランサーに登録されます。 レプリケーションは簡単で、高可用性が確保されます。
フェーズ 5: 専用データベース サーバー (最小限のダウンタイム)
最終的に、元のサーバーは専用のデータベース サーバーになります。 不要なソフトウェアはすべて削除されます。 今のところ、単一の強力なデータベース サーバーで十分ですが、将来的にこのコンポーネントを拡張するには、クラスタリングと短いダウンタイムが必要になる可能性があります。
展開の自動化:
私の Git ベースのデプロイ プロセスは、必要な場合にのみサービスをデプロイおよび再起動するスクリプトを使用して、複数のサーバーを処理するように調整されます (再起動前に Horizon ステータスを確認するなど)。
単一障害点への対処:
現在のアーキテクチャには単一障害点 (ロード バランサー、データベース、Redis) があります。 将来の改善には、ロード バランサーの冗長化が含まれる予定です。 データベースと Redis のスケーリングについては、今後の記事で取り上げます。
コンテナとクラスター:
私はコンテナーとクラスターを高く評価していますが、このプロジェクトの現在の規模では多すぎると思います。 選択したアプローチでは、迅速な初期セットアップを優先し、不必要な複雑さを回避します。 初期段階でのスケーリングには、マシンのスナップショットとクローン作成で十分です。
結論:
この実用的なスケーリング プランでは、10MPage.com が将来の成長に対応できるようにしながら、シンプルさと費用対効果を優先しています。 段階的なアプローチにより、ダウンタイムが最小限に抑えられ、スケーリング プロセス全体を通じて機能が維持されます。 明確で段階的な戦略に焦点を当てることで、この野心的なインターネット アーカイブに一度に 1 つのタイルを追加しながら、プロジェクト自体の構築に労力を費やすことができます。 今すぐ独自のタイルを投稿してください!
以上がLaravel (PHP) アプリケーションのスケーリングをどのように計画するかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。