ホームページ >バックエンド開発 >PHPチュートリアル >PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

Lisa Kudrow
Lisa Kudrowオリジナル
2025-02-25 10:05:09430ブラウズ

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

この記事は、姉妹サイトの1つであるCloudSpringから共有されています。役立つ場合は、必ず訪問してください!

このチュートリアルでは、Amazon DynamodbをPHPセッションのストレージ機能として使用する方法を示します。この方法は、アプリケーションが弾性負荷分散と自動焦点サービスを利用する場合に非常に役立ちます。 EC2、Elastic Load Balancer、およびDynamoDBをチュートリアルに沿って再生するために使用するためにAmazon AWSアカウントが有効になっている必要があります。

キーテイクアウト

  • Amazon Dynamodbは、PHPセッションのストレージ機能として使用できます。これは、アプリケーションが弾性負荷分散と自動化サービスを利用する場合に特に役立ちます。
  • 弾性ロードバランサーは、1つまたは多くの仮想サーバーのフロントエンドとして機能し、それらの間にリクエストを配布します。 Autoscalingを使用すると、トラフィックが高いときにシステムがより多くのWebサーバーのクローンを開始し、トラフィックが低下したときに一部をシャットダウンできます。
  • PHPセッションデータは、仮想サーバーの外側に保存する必要があります。 1つのオプションは、Amazonが管理する強力で高速なNOSQLデータベースであるDynamoDBのようなデータベースにセッションを保存することです。
  • 公式PHP SDKのAmazondynamodbクラスは、セッションマネージャーとして登録するように装備されています。 PHP向けのAWS SDKにより、開発者は費用対効果が高く、スケーラブルで信頼性の高いAWSクラウドを活用するアプリケーションを簡単に構築できます。
  • 弾性ロードバランサーとは
  • 弾性ロードバランサーは、仮想サーバーの1つまたは多くのフロントエンドとして機能します。リクエストを受け入れ、仮想サーバー間でそれらを配布します。仮想サーバーは、マシンテンプレート(AMI)をクローン化することで作成することも、必要に応じて破壊することもできます。仮想サーバーを動的に追加または削減することにより、アプリケーションを変化させることができる場合の処理​​能力。
  • および自動化されていますか?
Autoscalingがゲームに参加する場合、システムは次のこともできます。

トラフィックが多いときに、Webサーバーのより多くのクローンを開始

トラフィックが事前定義されたしきい値を下回ったときにそれらのいくつかをシャットダウン
  • 不健康なインスタンスを終了し、必要に応じてそれらを交換します
  • どうすればよいですか?
  • この環境であなたのアプリケーションが機能する可能性はありますか?はい、2つの重要な要件を満たしている場合は、
仮想サーバーは動的に作成されるため、サーバーにはアプリケーションコードのみを含む必要があり、データは含まれていません。これは、DBサービスで簡単に実行できます

ユーザーセッションの状態は、仮想サーバーの外側に持続する必要があります。 PHPモジュールはこれらのデータをCHE Webサーバーのファイルシステムに保存するため、これはもう少し注意が必要です。 そして、これは私たちがこれで解決しようとする問題です…うーん、セッション。

何をしないか:粘着性セッション

Stickyセッションは、ユーザーのセッションを特定のアプリケーションインスタンスに結合するElastic Load Balancerサービスの機能であるため、セッション中にユーザーからのすべてのリクエストが同じ仮想サーバーに送信されます。セッションクッキーは、ロードバランサーまたはアプリケーションのいずれかによって生成できますが、これは悪い練習と見なされます。理想的なことは、アプリケーションをステートレスとして設計することですが、これが常に可能であるとは限りません。

データベースにセッションを保存します

その他のオプションは次のとおりです。データベース内にセッションを保存します。アプリケーションまたはMEMCACHEインスタンス、または別のNOSQLデータベースで使用される外部SQLデータベースと同じかもしれません。この場合、DynamoDBは強力で高速なNOSQLデータベースであり、Amazon自体が管理しており、仮想サーバーから簡単にアクセスできるため、非常に興味深いようです。また、公式PHP SDKのAmazondynamodbクラスは、セッションマネージャーとして登録するためにすでに装備されています。 Dynamodbのことを聞いたことがない場合は、この入門ビデオを見ることをお勧めします。

デモアプリケーション

メカニズム全体をテストするための簡単なアプリケーションをまとめました。GitHubリポジトリからソースコードをダウンロードできます。弾性ロードバランサーと少なくとも2つのインスタンスを使用して、このアプリケーションを実行します。とりあえずオートスケーリングは使用しません。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

アプリケーションは、ユーザーに現在のセッションに保存され、「ログイン」として機能するユーザー名を選択するように求めます。セッションにユーザー名が存在する場合、アプリケーションでは、ユーザーが一種の「プロファイル」、つまり名前、姓、電子メールなどの一連のキー/値情報(キーと値の両方が文字列です)を挿入できます。このすべてのロジックは、index.phpファイルに含まれています。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

session.php ファイルには、簡単なセッションライブラリが含まれています。このライブラリを使用すると、$ session-> read( 'some_var')や$ session-> write( 'some_key'、 'some_value')などのフレンドリーな方法でセッションデータを管理できます。このセッションオブジェクトは、デフォルトのPHPセッションメカニズム(ローカルテストサーバーの場合)またはカスタムクラスを使用するように構成できます。アプリケーションファイルの最初のステップはセッションの起動です。
<span>require_once 'lib/session.php';
</span><span>try {
</span> <span>// Engine can be PHP or AmazonDynamoDB
</span> <span>$session = new Session($config['session']['engine'], $config['session']['params']);
</span><span>} catch (Exception $e) {
</span> <span>exit($e->getMessage());
</span><span>} // end try</span>
デフォルトのエンジン値はPHPで、パラメーターは必要ありません。 「Amazondynamodb」エンジンを選択すると、セッションコンストラクターが追加のコードを実行します。
<span>switch ($engine) {
</span><span>case 'AmazonDynamoDB':
</span><span>// Load AWS SDK
</span><span>require_once 'AWSSDKforPHP/sdk.class.php';
</span><span>// Create a list of credential sets that can be used with the SDK.
</span><span>CFCredentials<span>::</span>set($params['credentials']);
</span><span>// Instantiate a DynamoDB client
</span><span>$dynamodb = new AmazonDynamoDB();
</span><span>$dynamodb->set_region($params['region']);
</span><span>// Instantiate, configure, and register the session handler
</span><span>$this->handler = $dynamodb->register_session_handler(array(
</span><span>'table_name'       => $params['table_name'],
</span><span>'lifetime'         => $params['lifetime'],
</span><span>));
</span><span>break;</span>
最初に、すでにインストールして到達可能なAWS SDKをロードし、次に資格情報がAWS環境にロードされます。この時点からAWSクラスを使用できるため、Amazondynamodbの新しいインスタンスが作成され、テーブルが存在する正しい領域でセットアップされます。最後に、DynamoDBオブジェクトに、使用するテーブルの名前を渡すセッションマネージャーとして自分自身を登録するように指示します。それは本当に必要なことです。 config.phpファイルは、アプリケーションにどのエンジンを使用したいかを伝える場所であり、AWS資格情報とDynamoDB設定もここに保存されます。 index.phpには、ローカルサーバーにいない場合、現在実行中のインスタンスの名前を取得する小さなユーティリティ関数も含めました。これは、セッションがサーバー全体で一貫していることを確認するのに役立ちます。
<span>function getServerName() {
</span> <span>$host = $_SERVER['SERVER_NAME'];
</span> <span>if ('localhost' != $host) {
</span> <span>// Maybe we are on EC2, trying to catch the current instance ID
</span> <span>$ch = curl_init('http://169.254.169.254/latest/meta-data/instance-id');
</span> <span>curl_setopt($ch, CURLOPT_FAILONERROR, true);
</span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</span> <span>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
</span> <span>if ($ret = curl_exec($ch)) {
</span> <span>$host .= ' (instance ' . $ret . ')';
</span> <span>} // end if
</span> <span>curl_close($ch);
</span> <span>} // end if
</span> <span>return $host;
</span><span>} // end function</span>
関数GetServername()は、EC2メタデータAPIを使用してインスタンスの名前を見つけます。 艦隊でアプリを実行します このアプリケーションをテストするには、ロードバランサーの背後に少なくとも2つのWebサーバーの艦隊が必要です。私が使用したサーバーは、以下を装備したUbuntu GNU/Linuxインスタンスです。
  • apache webサーバー、
  • php 5.3(コマンドラインとApacheモジュールの両方)、
  • CurlプログラムとPHP拡張機能、
  • 梨パッケージマネージャー(SDKを簡単にインストールするために必要です)、
  • PHP用のAWS SDK(洋ナシによるインストールをお勧めします)。
  • AMIの構築方法を知っている場合は、ゼロから構築できます。しかし、私が準備して公開したものを使用することもできます:AMI-4B42443F。このマシンには、アプリケーションと他のすべての依存関係のPHPソースコードが既に含まれています。 AMIの準備ができたら…行きましょう!
セッションストレージを初期化

AWSコンソールに移動し、DynamoDBサービスとお気に入りの地域を選択します(Mine Is Eu West - Areland)。 [テーブルの作成]ボタンをクリックします。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します 「test_sessions」をテーブル名として入力し、「id」と呼ばれる文字列プライマリキーを選択します。キータイプは「ハッシュ」でなければなりません。別の名前を選択した場合、後でconfig.phpファイルにコピーする必要があります。読み取り容量ユニットフィールドの両方に「10」を入力します(たとえば、テーブルの速度)、これでテストするのに十分です。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存しますこれで、各行には必須のIDフィールドがありますが、型文字列、番号、文字列セット、または数値の他の異なるフィールドの数が可変的な数字を持つことができます。セッションマネージャーオブジェクトは、「データ」という名前の文字列フィールドを使用して、セッションの変数を保存し、セッションの有効期限のあるタイムスタンプの「有効期限が切れる」という名前のフィールドを保存します。

サーバーの起動と構成

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

次に、DynamoDBテーブルで選択したEC2サービスと同じ領域を選択します。ダッシュボードまたは「インスタンス」セクションのいずれかから[インスタンスの起動]ボタンをクリックします。カスタムAMIを選択するか、クラシックウィザードを使用して、「コミュニティAMIS」タブに移動し、「AMI – 4B42443F」を入力します。 次の画面で、インスタンス数の少なくとも「2」を入力し、インスタンスタイプを選択すると、Micro(T1.Micro)を選択しました。可用性ゾーンのドロップダウンには「好みのない」を残すことができますが、生産環境では、同じ地域内の2つ以上のゾーンの間にさまざまなインスタンスが分散されている場合が優れています。 「インスタンスの詳細」と「ストレージデバイス」構成パネルの両方のデフォルト設定を受け入れ、続行します。必要に応じて、1つ以上のオプションのタグを入力します。キーペアを選択するか、新しいものを作成します また、ポート80で少なくともHTTPとポート22でSSHを許可するセキュリティグループを選択します。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

設定を確認し、インスタンスを起動します。インスタンス状態が「実行」されている場合、SSHを介して構成できます。各インスタンスには、EC2-XXX-XXX-XX-XX.region.compute.amazonaws.comに似た公開DNS名があります。作成した各インスタンスでconfig.phpファイルを編集する必要があります。 SSHまたはSFTPクライアントを使用してSFTPクライアントを使用してインスタンスに接続します。 $ ssh -i/path/to/key.pem ubuntu@ec2-x-x-x-x.region.compute.amazonaws.com 現在のディレクトリをテストアプリケーションが配置されている /var /wwwに変更します。 config.phpファイルを編集して、AWSキーとシークレットを挿入します。次に、DynamoDBテーブルの設定が一致するかどうかを確認します。このリファレンスにある適切な値で地域を編集する必要があります。 次に、Ping.html内部 /var /wwwという空のファイルを作成します。このファイルは、各インスタンスの到達可能性をテストするためにロードバランサーによって使用されます。 ロードバランサーのセットアップ

データベースとすべてのインスタンスを配置すると、FrontEndロードバランサーをセットアップできます。 EC2ナビゲーションメニューでは、「ネットワークとセキュリティ」の下で「ロードバランサー」を選択し、[ロードバランサーの作成]ボタンをクリックします。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

ロードバランサーの名前を選択し、リスナーの構成がスクリーンショットの構成と一致していることを確認します。基本的に次のように述べています。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

ヘルスチェックパネルでは、Ping Pathフィールドに /ping.htmlを入力し、他の設定をデフォルトとして残します。つまり、30秒ごとに各インスタンスの /ping.htmlリソースを呼び出します。応答時間が長い場合は5秒よりも長い場合、インスタンスが2つの連続したヘルスチェックに障害が発生した場合、それは不健康です。健康。ロードバランサーは不健康なインスタンスにトラフィックを転送せず、Autoscaleが整備されている場合、不健康なインスタンスを終了して新しい新鮮なインスタンスに置き換えることができます。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

次の画面では、現在実行中のインスタンスのどれをロードバランサーに追加できるかを選択できます。以前に作成された2つのインスタンスを選択して続行します。最終的な構成を確認し、それが問題ないかどうかを確認してください。これで、ロードバランサーの詳細と接続されたすべてのインスタンスのステータスを確認できるはずです。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

ロードバランサーのDNS名(yourname-12345678.region.elb.amazonaws.comのようなもの)をブラウザに入れることで、アプリケーションをテストできます。また、ロードバランサーURLを指すDNSパネルにCNAMEを追加して、ドメインまたはサブドメイン(例:Dynamo.YourDomain.com)を構成することもできます。 IPが残業を変更できるため、AレコードでIPを使用することはお勧めしません。

PHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存します

フォームを送信したり、リクエストしたページを更新するたびに、別のインスタンスで処理できます。 GetServername()ユーティリティを介して表示される名前で、どのインスタンスが提供しているかを確認できます。

要約

そして今のところそれはすべてです。 AWSエコシステムで重要なトピックについて説明しましたが、これはほんの始まりに過ぎません。たとえば、これらすべてのものは完全にプログラム可能です。たとえば、自動焦点を追加して、インスタンスを自己構成できるように設計し、信頼できる場所からAWS資格情報やその他のデータをダウンロードできます。または、クラウドフォーメーションを使用して、インフラストラクチャ全体に再利用可能なテンプレートを作成することもできます。 確認する出発点は、AWSホームページです。そして今、あなたがテストを終えたならば、あなたのすべてのものを終了することを忘れないでください、ハッピーコーディングではないにしても! Fotoliaを介した画像 Amazon DynamodbおよびPHPセッションに関するよくある質問(FAQ) Amazon DynamoDBおよびPHPセッションでのロードバランスを実装するにはどうすればよいですか?

ロードバランシングは、サーバーの負荷を管理し、最適なパフォーマンスを確保するための重要な側面です。 Amazon DynamoDBおよびPHPセッションを使用すると、AmazonのElastic Load Balancing(ELB)サービスを使用してこれを達成できます。 ELBは、Amazon EC2インスタンス、コンテナ、IPアドレスなど、複数のターゲットに着信アプリケーショントラフィックを自動的に配布します。単一の可用性ゾーンまたは複数の可用性ゾーンにわたってアプリケーショントラフィックのさまざまな負荷を処理できます。 PHPセッション用。シームレスなスケーラビリティを備えた高速で予測可能なパフォーマンスを提供します。ダウンタイムやパフォーマンスの劣化なしに、テーブルを上下にスケーリングしてトラフィックを調整できます。また、インターネットスケールのアプリケーション用に組み込みのセキュリティ、バックアップ、復元、およびメモリ内キャッシングが組み込まれています。 PHPの場合、開発者は、費用対効果が高く、スケーラブルで信頼性の高いAWSクラウドを活用するアプリケーションを簡単に構築できます。 SDKには、AWS SDKを使用する方法を示すAWS PHPライブラリとコードサンプルが含まれています。 PHPコードの例を備えた一般的なDynamoDBはありますか?

PHPでDynamoDBを使用するための一般的なコード例がいくつかあります。これらには、テーブルの作成、テーブルへのアイテムの書き込み、テーブルのアイテムの読み取り、テーブル内のアイテムの更新、テーブルからアイテムの削除が含まれます。これらの各操作は、PHPのAWS SDKを使用して実行できます。

AmazonストアのPHPスクリプトはどこにありますか?

CodecanyonなどのさまざまなオンラインプラットフォームでAmazonストアのPHPスクリプトを見つけることができます。これらのスクリプトを使用すると、AmazonのサービスをPHPアプリケーションに統合し、製品検索とディスプレイ、ショッピングカート管理、注文処理などの機能を提供します。はい、PHPでDynamoDBを使用するための完全な例があります。これらの例には、通常、テーブルの作成、テーブルへのアイテムの書き込み、テーブルのアイテムの読み取り、テーブル内のアイテムの更新、テーブルからアイテムの削除のためのコードが含まれます。また、多くの場合、エラーや例外を処理する方法の例が含まれています。

PHPでdynamodbでエラーと例外を処理するにはどうすればよいですか?トライキャッチブロックを使用します。 PHPのAWS SDKは、操作が失敗したときに例外をスローします。これらの例外をキャッチして、アプリケーションに適した方法でそれらを処理できます。 DynamoDBとPHPでパフォーマンスを最適化する方法はいくつかあります。これらには、プロビジョニング付きスループットを使用して容量を管理し、グローバルセカンダリインデックスを使用してクエリを高速化し、DynamoDBアクセラレータ(DAX)を使用してメモリのキャッシングを提供します。

DynamoDBは、データを保護するためのいくつかのセキュリティ機能を提供します。これらには、基礎となるストレージへの不正アクセスからデータを保護する安静時の暗号化と、アプリケーションとDynamoDBの間を移動する際のデータを保護する輸送中の暗号化が含まれます。 dynamodb?

dynamodbは、データのバックアップと復元のサポートを組み込んでいます。いつでもオンデマンドバックアップを作成し、必要に応じてこれらのバックアップからテーブルデータを復元できます。これにより、偶発的な削除または変更からデータを保護し、障害が発生した場合でもアプリケーションをスムーズに実行し続けることができます。

以上がPHPマスター| Amazon dynamodb:ロードバランサーとのPHPセッションを保存しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:不気味な怖いPHP次の記事:不気味な怖いPHP