Redis
 Computer >> コンピューター >  >> プログラミング >> Redis

サーバーレスRedisでLaravelアプリケーションをスケールさせる方法

はじめに

Laravelは、スケーラブルで高性能なWebアプリケーションの構築に広く使われている人気のPHPフレームワークです。

本記事では、LaravelのセッションデータとキャッシュデータをサーバーレスRedisインスタンスに保存することで、Laravelアプリケーションを効率的にスケールさせる方法を解説します。

前提条件

始める前に、以下のものが必要です。

  • Upstashアカウント:お持ちでない場合は、無料でサインアップできます(クレジットカードは不要)。
  • Laravelがまだインストールされていない場合は、こちらの手順に従ってワンクリックでインストールできます。

アーキテクチャの概要

単一のサーバーでLaravelを動かす代わりに、以下のような構成を想定してみましょう。

  • 2台のWebサーバー上で稼働するLaravelアプリケーション。
  • リクエストを2台のWebサーバーへ振り分ける単一のロードバランサー。
  • アプリケーションのデータを保存するMySQLデータベースサーバー。
  • データのキャッシュとユーザーセッションの保存を担うUpstashサーバーレスRedisクラスター。

構成図:

サーバーレスRedisでLaravelアプリケーションをスケールさせる方法

サーバーレスRedisとは?

サーバーレスRedisは、完全マネージド型のDatabase as a Service(DBaaS)製品で、料金はコマンド実行ごとの従量課金制になっています。そのため、実際に使用した分だけ支払えばよく、過剰なプロビジョニングは一切不要です。

この仕組みにより、サーバーのキャパシティを事前に余分に用意しておく必要がなく、アプリケーションの需要に応じて柔軟にスケールできます。

なぜサーバーレスRedisなのか?

デフォルト設定のLaravelは、ユーザーセッションをWebサーバーのディスク上のファイルに保存します。この場合、ロードバランサーがユーザーのリクエストを別のサーバーに振り向けると、セッション情報が失われてしまうという問題があります。

だからこそ、ユーザーセッションとアプリケーションキャッシュを一元管理できる場所を用意することが重要です。そうすることで、セッションやキャッシュをリクエスト間・複数サーバー間で共有でき、ロードバランサーがリクエストを別サーバーへ振り向けてもデータが失われなくなります。

もちろん、データベースを使ってセッションやキャッシュを保存することも可能ですが、パフォーマンスを重視するならRedisの利用が推奨されます。各オプションのパフォーマンス比較について詳しく知りたい方は、「Which is the best Laravel cache driver for performance?」という記事が参考になります。

水平スケーリングと垂直スケーリング

水平スケーリングと垂直スケーリングの違いについて、簡単におさらいしておきましょう。

  • サーバーが1台の場合、CPUコア、RAM、ディスク容量などのリソースを追加することでスケールアップ(垂直スケーリング)できます。
  • 一方、水平スケーリングとは、リクエストを処理するサーバーの台数を増やしてスケールアウトしていくことを指します。

水平スケーリングと垂直スケーリングのシンプルな例:

サーバーレスRedisでLaravelアプリケーションをスケールさせる方法

アプリケーションを水平スケーリングする際には、ユーザーセッションとキャッシュデータをスケーラブルな方法で扱うことが非常に重要になります。

サーバーレスRedisクラスターの作成

Upstashなら、以下の手順でわずか30秒ほどでサーバーレスRedisクラスターを作成できます。

  • Upstashアカウントにログインします。
  • Create Databaseボタンをクリックします。
  • Redisクラスターの名前を入力し、リージョンを選択します。
  • Createボタンをクリックします。

これだけです!これでサーバーレスRedisクラスターがすぐに使用可能になります。

後の設定で必要になるため、Redisクラスターのエンドポイント、パスワード、ポート番号を必ず控えておいてください。

LaravelとサーバーレスRedisの連携設定

サーバーレスRedisクラスターが用意できたら、通常のRedisインスタンスと同じ要領でLaravelから利用できるよう設定していきます。

Predisパッケージのインストール

以前はPHP Redis拡張モジュールを使って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クラスターを使ってキャッシュとセッションデータを保存するようになります。

まとめ

LaravelとサーバーレスRedisを組み合わせるのは、アプリケーションをスケールさせるための優れた手法です。Kubernetesクラスタ上でLaravelを運用している場合でも、サーバーレスRedisクラスターを活用すれば、ユーザーセッションとキャッシュデータをスケーラブルに保存できます。

Upstashの詳細については、公式ドキュメントをご覧ください。

Laravelアプリケーションのスケーリング方法については、以下の記事もぜひ参考にしてください。

  • How to Set Up a Scalable Laravel 6 Application using Managed Databases and Object Storage
  1. UpstashのPipeline APIでサーバーレスRedisを高速化:複数コマンドを1リクエストで実行

    Upstashは、ネイティブなRedis APIに加えてREST APIもサポートしており、開発者はサーバーレス関数やエッジ関数から接続の問題を気にせずRedisへアクセスできます。しかし、同じ関数内で複数のRedisコマンドを実行する場合、その回数だけデータベースへの呼び出しが発生してしまうという課題がありました。 そこで、コミュニティメンバーの一人である@MasterGates氏が、Discordチャンネルで素晴らしい提案をしてくれました。それが「Pipeline API」です。 Pipeline APIとは Pipeline APIは、RedisのPIPELINEコマンドをREST A

  2. Cloudflare WorkersとRedisで実現するエッジコンピューティング活用術

    エッジコンピューティングは、近年もっとも注目されている技術のひとつです。CDNがファイルをユーザーの近くに配置できるようにしたのと同じように、エッジコンピューティングはアプリケーションそのものをユーザーの近くで実行できるようにします。これにより、開発者はグローバルに分散され、高いパフォーマンスを発揮するアプリケーションを構築できるようになります。 Cloudflare Workersとステートレス性の課題 現在この分野をリードしている製品がCloudflare Workersです。コールドスタートのないサーバーレス実行環境を提供し、Cloudflareのグローバルネットワークを活かすことで、ア