サーバーレスRedisを使用したLaravelのスケーリング
Laravelは、スケーラブルで高性能なWebアプリケーションを構築するための人気のあるPHPフレームワークです。
この記事では、サーバーレスRedisを使用して、Laravelセッションを保存し、サーバーレスRedisインスタンスにデータをキャッシュすることで、Laravelアプリケーションをスケーリングする方法を学習します。
始める前に、次のものが必要です。
- Upstashアカウント:アカウントをお持ちでない場合は、無料でサインアップできます。クレジットカードは必要ありません。
- Laravelをインストールしていない場合は、次の手順に従ってください:ワンクリックでLaravelをインストールする
単一のサーバーでLaravelを実行するのではなく、次のシナリオを考えてみましょう。
- 2つのWebサーバーで実行されているLaravelアプリケーション。
- 単一のロードバランサーが、2つのWebサーバーへのリクエストのルーティングを担当します。
- アプリケーションのデータを保存するために使用されるMySQLデータベースサーバー。
- UpstashサーバーレスRedisクラスターは、データのキャッシュとユーザーセッションの保存を担当します。
図:
サーバーレスRedisとは何ですか?
サーバーレスRedisは、サービス製品としてのフルマネージドデータベースであり、料金はコマンドごとに基づいているため、実際に使用した分だけ課金されます。
そうすれば、サーバーを過剰にプロビジョニングする必要がなく、必要に応じてアプリケーションを拡張できます。
デフォルトでは、LaravelはユーザーセッションをWebサーバーのディスク上のファイルに保存します。そうすれば、ロードバランサーがユーザーリクエストを別のサーバーに転送すると、ユーザーセッションが失われます。
これが、ユーザーセッションとアプリケーションキャッシュを一元的に保存する場所を用意することが重要である理由です。これにより、リクエスト間や複数のサーバー間で共有でき、ロードバランサーがリクエストを別のサーバーに転送するたびに失われることはありません。
もちろん、データベースを使用してユーザーセッションを保存し、データをキャッシュすることもできますが、パフォーマンスを向上させるには、パフォーマンスを向上させるためにRedisを使用することをお勧めします。さまざまなオプションのパフォーマンス上の利点について詳しく知りたい場合は、こちらのすばらしい記事をご覧ください:パフォーマンスに最適なLaravelキャッシュドライバーはどれですか?
水平スケーリングと垂直スケーリングの違いについて一言:
- サーバーが1つしかない場合は、サーバーにリソースを追加することで、サーバーを垂直方向に拡張できます。たとえば、CPUコア、RAM、またはディスク容量をスケールアップに追加できます。 。
- 反対側の水平スケーリングは、スケールアウトへのリクエストの処理を担当するサーバーを追加する場合です。 。
水平スケーリングと垂直スケーリングの簡単な例を次に示します。
アプリケーションを水平方向にスケーリングする場合、ユーザーセッションを処理し、スケーラブルな方法でデータをキャッシュすることが重要です。
Upstashを使用すると、次の手順に従ってサーバーレスRedisクラスターを30秒で作成できます。
- Upstashアカウントにログインします。
- データベースの作成をクリックします ボタン。
- Redisクラスターの名前を入力し、リージョンを選択します。
- 作成をクリックします ボタン。
それでおしまい!これで、サーバーレスRedisクラスターを使用する準備が整いました。
パスワードとポートとともに、Redisクラスターのエンドポイントを書き留めてください。
サーバーレスRedisクラスターができたので、他のRedisインスタンスと同じように使用するようにLaravelを構成できます。
Predisパッケージをインストールする
以前は、PHPRedis拡張機能を使用してRedisクラスターに接続していました。ただし、代わりにPredisパッケージを使用できるようになりました。
Predisパッケージをインストールするには、次のコマンドを実行します。
composer require predis/predis
次に、Laravelプロジェクトの.env
に移動します 次の行をファイルして更新します:
REDIS_HOST=your_upstash_redis_endpoint
REDIS_PASSWORD=your_upstash_redis_password
REDIS_PORT=your_upstash_redis_port
Redisの詳細を変更するときは、キャッシュドライバーとセッションドライバーも必ずredis
に変更してください。 :
CACHE_DRIVER=redis
SESSION_DRIVER=redis
最後に、次のコマンドを実行して構成キャッシュをクリアします。
php artisan config:clear
そうすれば、LaravelアプリケーションはサーバーレスRedisクラスターを使用してキャッシュとセッションデータを保存します。
サーバーレスRedisでLaravelを使用することは、アプリケーションをスケーリングするための優れた方法です。 KubernetesクラスターでLaravelを実行している場合でも、サーバーレスRedisクラスターを使用して、ユーザーセッションを保存し、スケーラブルな方法でデータをキャッシュできます。
Upstashの詳細については、ドキュメントを確認してください。
Laravelアプリケーションをスケーリングする方法の詳細については、次の記事を確認してください。
- マネージドデータベースとオブジェクトストレージを使用してスケーラブルなLaravel6アプリケーションをセットアップする方法
-
サーバーレスRedisのパイプラインRESTAPI
Upstashは、ネイティブのRedisAPIに加えてRESTAPIをサポートしています。 REST APIは、開発者がサーバーレスおよびエッジ関数からの接続の問題なしにRedisにアクセスするのに役立ちます。ただし、同じ関数で複数のRedisコマンドを実行する場合、これはデータベースを複数回呼び出すことを意味します。コミュニティメンバーの1人(@MasterGates)が、Discordチャンネルで素晴らしい提案をしてくれました。パイプラインAPI: パイプラインAPI Pipeline APIは、RedisPIPELINEコマンドをRESTAPIに適合させたものです。 1つのhtt
-
CloudflareワーカーとのRedis@Edge
エッジでのコンピューティングは、近年最もエキサイティングな機能の1つです。 CDNを使用すると、ファイルをユーザーに近づけることができます。エッジコンピューティングを使用すると、アプリケーションをユーザーの近くで実行できます。これは、開発者がグローバルに分散されたパフォーマンスの高いアプリケーションを構築するのに役立ちます。 Cloudflare Workersは、現在この分野の主要製品です。コールドスタートのないサーバーレス処理環境を提供します。 Cloudflareのグローバルネットワークを活用して、アプリケーションのレイテンシーを最小限に抑えます。関数はJavascript、Rust、