ホームページ > バックエンド開発 > PHPチュートリアル > 大規模 Web サイトの最適化 - memcache テクノロジー、最適化 - memcache テクノロジー_PHP チュートリアル

大規模 Web サイトの最適化 - memcache テクノロジー、最適化 - memcache テクノロジー_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:55:00
オリジナル
1050 人が閲覧しました

大規模ウェブサイトの最適化 - memcache テクノロジー、最適化 - memcache テクノロジー

大規模ウェブサイトの最適化 - memcache テクノロジー

メモリ+キャッシュメモリキャッシュ

memcache の紹介

memcache は、LiveJournal の Brad Fitzpatrick によって開発された 分散型 高速 キャッシング システム のセットで、現在多くの Web サイト、特に頻繁なアクセスを必要とする大規模な Web サイトで使用されています。データベースへのアクセス速度の向上効果は非常に大きいです。これは、BSD ライセンスに基づいてリリースされた オープン ソース ソフトウェア のセットです。 [百度百科事典より抜粋]

公式ウェブサイト: http://memcached.org/

分散: 複数の Memcache サーバーがデータ アーキテクチャを管理します。

キャッシュ システム: ユーザーがクエリしたデータをメモリにキャッシュし、次回からメモリから直接取得できるようにします。ディスク IO オーバーヘッドを削減します。

nosqlとは何ですか? (SQLリレーショナルデータベース)

回答: MySQL はリレーショナル データベースと呼ばれます (主な特徴は、2 次元のテーブル構造 (テーブル内の行と列) を持ち、テーブル間にリレーションシップがあることです) (oracle (Java)、db2、sqlserver) )

非リレーショナルデータ: SQL文をクエリとして使用しないデータベース(データを保存するシステム)であり、厳密な意味での2次元テーブルの概念はありません。そのデータ構造はすべて巨大なハッシュテーブル(キー-バリュー)です

ハッシュ テーブルの利点: 時間計算量は 0 (1) です。データが増加しても、クエリ時間は 1 桁 (1 秒) 変化しません。

ハッシュテーブルの欠点: ハッシュの衝突 異なるキーが同じ値に対応する

key1 ===MD5(sql)

アシオン

キー2

12

キー3

深セン

key4

iPhone

  • selinuxがシャットダウンしない

    selinux をすぐに有効にします

  • 2.1 環境の準備

    Linux 環境では、gcc、g-c++、make (makefile)、cmake、autoconfig (configure)、libtool などのツールが必要です

    Linuxでインターネットに接続している場合は、次のコマンドを使用します

    # yum install -y gcc make cmake autoconfig libtool

    -y 確認インタラクティブを使用する必要はありません

    2.2 memcachedをコンパイルしてインストールします

    memcached は libevent ライブラリに依存しているため、最初にインストールし、それぞれの公式 Web サイトから安定バージョンをダウンロードする必要があります

    libeventnt公式ウェブサイト: http://libevent.org/

    memcache 公式ウェブサイト: http://memcached.org/

    まず libevent をコンパイルしてインストールし、次に memcached をコンパイルしてインストールします。同時に、memcached をインストールするときに libevent のインストール パスを指定する必要があります。

    具体的な手順:

    アップロード

    まず libevent をダウンロードし、解凍してインストールします (通常、Linux でのソフトウェアのインストールは /usr/local/src ディレクトリに配置され、インストールされたソフトウェアは通常 /usr/local/NAME に配置されます)。
  • # ./configure --prefix=/usr/local/libevent && make && make install

    b. memcache をインストールし、解凍し、コンパイルしてインストールします

    # ./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent && make && make install

    2.3 memcached の起動

    # /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nothing -vv

    : この時点で Memcached は正常に起動しますが、情報はコンソールに出力されます。

    memcached を

    バックグラウンド でサービスとして開始したい場合は、 -d オプション (デーモン バックグラウンド) を追加するだけです

    # /usr/local/memcached/bin/memcached -m 64 -p 11211 -u nothing -d

    サーバーが正常に起動したかどうかを確認するには?

    # ps axu

    d

    パラメータ情報を表示する必要がある場合は、memcached -h を使用してヘルプを表示します:

    memcache オペレーション

    memcached クライアントとサーバー間の通信は非常にシンプルで、

    テキストベースのプロトコル、http プロトコルと同様、対話に Telnet を直接使用できます

    Telnet 操作を使用します (終了するには終了します)

    #テレントサーバーIP 11211

  • Windows の下で
  • 接続後、Ctrl +

    ]を使用して Telnet エコーを開きます

  • Linux の場合
  • 2. 基本的なコマンド:

    memcache の追加、削除、変更、検索コマンドを学習します:

    キーフラグの有効期限の長さを追加します

    キー: 名前

    フラグ: 1 つの memcache が文字列として保存されます

    expire: 有効期限、memcache 時間

    length: データ長(B)

    ※追加増加

    # add name 1 0 2 # memcache サーバー上のキーを持つ名前の値を追加します。長さは 2 バイトで、有効期間は長期です

    有効期限を理解する方法

    キャッシュの有効期間を設定します。3つの形式があります

  • 秒数を設定します。設定から開始して、n 秒後に期限切れになります
  • タイムスタンプ、指定されたタイムスタンプの後に期限切れになります
  • 0 に設定すると、自動的に期限切れになりません (永続的に有効ではないことに注意してください。 a. memcache がインストールされている場合、最大有効期間が指定されます。デフォルトは 30 日 (ソース コード) b. 30 日未満になる場合があります。 、絞り出されます)

    最近使用されていない原則

    ※削除削除

    #キーを削除

    ※交換交換

    # キーフラグの有効期限の長さを置き換えます

    ※ゲットゲット

    #キーを取得します

    ※set データに replace がある場合、ない場合は追加

    # キーフラグの有効期限の長さを設定します

    の名前が存在します:

    年齢は存在しません:

    ※増額増加

    # 年齢 NUMBER 増加

    ※減少

    #decr 年齢番号

    ※stats 統計情報 memcache サーバー情報

    #統計

    ※flush_all すべてのデータを消去します

    #flush_all

    phpを使用してmemcacheを操作します

  • Windows の下で
  • (http://downloads.php.net/pierre/) に移動して、拡張 DLL ファイルをダウンロードします。
  • このファイルをphpのextension_dirに対応するディレクトリに配置します。
  • php.ini ファイルを変更し、extension=php_memcache.dll を追加し、ファイルを導入します。
  • Apacheを再起動する

  • Linux の場合 (Linux で php の拡​​張機能を開く方法、一般的な解決策について話しましょう)

    ベータ版: テスト版: 通常、小さなバグがいくつかありますが、問題がある場合はユーザーが使用して確認する必要があります。それでは修理です

    アルファ: 内部ベータ版: 開発中に内部で使用されるバージョン。一般に、このバージョンには多くのバグがあります。ただし、このバージョンには新しい機能が追加されることがよくあります。 (通常、新しい企業のみがそれを試行します。) アルファ版にはいくつかの補償があります。

    stable: 安定版: 基本的にバグがなく、安定して実行できます。

    FTP 使用上の注意:

  • vsftpd サービス vsftpd のステータスは正常に起動していますか?
  • 通常、FTP に接続するには一般ユーザーのみが使用でき (root として FTP に接続することはできません)、sudo を使用します
  • ホームディレクトリのサイズとスペースが十分ではありません(ファイルは正常にアップロードされましたが、表示されるサイズは0です)
  • ファイアウォールがオフになっているかどうか (iptables -F off) (iptables -L)

    #cls

    # CD

    # vim .bashrc

    Linux ダウンロードラストラインモード

    # :x 小文字で終了 wq

    編集モードの Linux

    #Zキャピタル

    # /usr/local/php/bin/phpize 絶対パス phpize

    d. 上記で生成された構成ファイルを使用してシステム情報を収集します。インストール パスを指定する必要はありません。

    # ./configure --with-php-config=/usr/local/php/bin/php-config は、php 設定ファイルの検索方法を示します

    e.コンパイルとインストールを実行します

    #メイク&&メイクインストール

    注: 上記のコマンドを実行すると、構造を表示できます

    # ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    注: Linux で php.ini 設定ファイルの場所を確認するにはどうすればよいですか?

    解決策: phpinfo();

    注: Linux では、設定ファイルを変更する前に必ずバックアップしてください

    php.ini-backup-2016-1-12

    注: .so ファイルとは何ですか?

    .so は Linux では共有オブジェクトであり、Windows では .dll ファイルの一種です

    注: Linux では、これを使用してサービスを閉じることができます

    # pkill -9 httpd

    #ps grep httpd |

    #ps grep httpd |

    次のように、上で生成したアドレスをphp.ini設定ファイルに追加します

    extension_dir=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    extension=memcacahe.so

    test.php ファイルを作成して、php に memcache モジュールがあるかどうかをテストします

    phpはmemcacheを操作し、値を保存および取得します

    memcached のメモリ管理と削除メカニズム

    注: Memcache の最大値は 1M スペースのみです。

    注: メモリの断片化は常に存在します。それは、メモリの断片化を最小限に抑えることができる方法によって異なります。

    1. 記憶の断片化とは何ですか?

    この種のメモリ キャッシュ システムを使用すると、継続的に適用と解放が行われるため、使用できない小さなメモリの断片が形成されます。この現象はメモリの断片化と呼ばれます。この小さな赤いブロックは、オペレーティング システムが使用できない領域です。

    の解き方?
  • memcacheはスラブアロケータを使用して管理されます(
  • 各スラブクラスのサイズは1M) 最小単位はチャンクと呼ばれ、データを保存するための倉庫です

    複数の小さなユニットがチャンクを形成します: 複数の小さなブロックで構成されます (すべての小さなブロックは同じサイズです)

    各スラブクラスのサイズは1Mです

    memcache の適切なサイズを選択するにはどうすればよいですか?
  • 注: 122 バイトのスラブがいっぱいで、100 バイトのデータが来た場合、どこに保存する必要がありますか? 回答: 144 は間違いなく存在しません。チャンク 122 にまだ存在しており、データ ストレージの実装には LRU アルゴリズムが使用されています。

    固定チャンクによるメモリの無駄、22B
  • 係数調整
  • memcached が開始されると、-f で指定できる特定のサイズに従ってスラブ クラスが編成されます
  • デフォルトは 1.25 で、隣接するチャンク間の比率が増加係数となります。 Web サイトのビジネスに応じてキャッシュ係数のサイズを調整できます。

    それぞれのビジネスが異なり、必要な最小チャンクも異なるためです。データは独自のサイズを設定できるため、このパラメーターを使用すると、システムが自社のビジネスにさらに適応できるようになります。

    memcache の
  • 遅延削除
  • Memcached は、レコードの有効期限が切れているかどうかを内部的に監視しません。代わりに、レコードを取得するときにレコードのタイムスタンプをチェックして、レコードの有効期限が切れているかどうかを確認します。この動作は遅延有効期限と呼ばれます。したがって、memcached は有効期限の監視時に CPU 時間を消費しないという利点があります。

    例: set(name, asion, 0, 3600) は 3600 秒後に期限切れになります。get がクエリされた場合にのみ、期限切れかどうかが検出され、期限切れの場合は削除されます。 。

    例 # add name 1 8 2 8秒経過すると無効になるのか、存在しないのか?統計による分析

    分析: 存在しないのではなく、無効です。次回取得するときにのみ、memcache が期限切れかどうかを確認し、期限切れの場合は削除します

    memcache の LRU アルゴリズム
  • memcached は期限切れのレコードのスペースを優先的に使用しますが、それでも新しいレコードを追加するときにスペースが不足する場合は、LRU (Least Recently Used) と呼ばれるメカニズムを使用してスペースを割り当てる必要があります。
  • 名前が示すように、これは「最も最近使用されていない」レコードを削除するメカニズムです。そのため、memcachedのメモリ容量が不足した場合(スラブクラスから新しい容量が取得できない場合)、最近使用されていないレコードから検索して空にします

    時間が新しいレコードに割り当てられます。キャッシュの実用的な観点から見ると、このモデルは理想的です。

    mecache のデータスペース (デフォルトは 64M) がいっぱいになった場合、データを保存し続けることができますか?

    回答: 保存できます。有効期限が切れていない場合は、最もアクティブでないデータを削除して、後でデータを追加するためのスペースを確保する必要があります。

    例: 122Bytesのスラブを例にとると、データがいっぱいになったときに100Bytesのデータが来た場合、どう対処すればよいでしょうか? (永続効果があってもキックされます)

    分析: メモリ管理 LRU アルゴリズム、FIFO アルゴリズム

  • memcache のいくつかのパラメータ Ctrl+C

    注: vim で ctrl+s を入力すると、ctrl+q を使用して終了できます

    -p リスニングポート

    -l 接続の IP アドレス、デフォルトはローカルマシンです

    -d start は memcached サービスを開始します

    -d restart memcached サービスを再起動します

    -d stop|shutdown 実行中の memcached サービスをシャットダウンします

    -d install memcached サービスをインストールします

    -d アンインストール memcached サービスをアンインストールします

    -u Run as (root として実行する場合のみ有効)

    -m 最大メモリ使用量 (MB)。デフォルトは 64MB

    注: システムが 32 ビットの場合、最大制限は 2G ですが、システムが 64 ビットの場合、制限はありません。

    -M メモリが枯渇した場合、アイテムを削除する代わりにエラーを返します

    -c 同時接続の最大数、デフォルトは 1024 です

    -f ブロック サイズ増加係数、デフォルトは 1.25 です

    -n 最小割り当てスペース、キー + 値 + フラグのデフォルトは 48 です

    -h ヘルプを表示

    -v 警告メッセージとエラーメッセージを出力します

    -vv はクライアントのリクエストと戻り情報を出力します

    -i memcached と libevent の著作権情報を出力します

    実際の使用シナリオ

    保存: 1. ファイル 2. mysql

    質問: フォルダー内のセッション ファイルが多すぎて取得が遅くなる場合、どう対処すればよいですか?

    答え: 階層化処理

    Memcache を使用して保存します。Memcache は分散ストレージを使用します (ストレージに複数の Memcache を使用します)

    memcache を使用してセッションを保存する

    1. php.iniファイルを変更します。設定情報は次のとおりです

    Session.save_handler = memcache #memcache を使用してセッションを保存することを表します

    Session.save_path ="tcp://127.0.0.1:11211" # memcache サーバーのアドレスとポートを指定します

  • テスト

    1. セッションを開いてセッションを保存します

  • Memcache からセッションを取得する

    高度な機能

    分散memcache構成

    配信とは何ですか?

    単一の memcache のサービス機能には限界があるため、複数の memcache を使用してキャッシュ機能を提供できます。このアーキテクチャは、memcache の 分散キャッシュ (クラスター) ストレージ システム

    と呼ばれます。

    実装方法は?

    このようにして、さまざまな Memcache サーバーにデータを分散する方法が理解できます。

    分散はクライアント上で実装されており、データは一定のアルゴリズムに従ってそのmemcacheサーバーに保存されます データを取得する際には、以前と同じアルゴリズムに従って、対応するmemcacheサーバーからデータが取得されます。

    分散アルゴリズム

  • タッチアルゴリズム
  • キー値の残りをサーバーの数にして、その残りを対応する memcache サーバーに保存します。一般に、このハッシュ関数は

    crc32( key ) % 3 です。 crc32() この関数は文字列を 32 ビット整数に変換できます

    短所: 特定のサーバーがダウンしたり、サーバーを追加する必要がある場合、除数が変更されているため、基本的にその時点ではキャッシュされたデータはすべて無効になります。 ゆるい計算式、ヒット率=取得データ/総数1/N Nはサーバー数を表します

    原因による問題: memcache がダウンすると、キャッシュされたデータが無効になります。このとき、MySQL への負荷が急激に増加します。

    このとき、MySQL はクラッシュし、MySQL を再起動すると、短期間で再びクラッシュし、その後、わずかな遅延 (キャッシュの一部が再確立される) で再びクラッシュします。時間が経つにつれて、MySQL は基本的に安定し、キャッシュ システムが正常に確立されました。キャッシュされたデータが存在しないため、すべてのリクエストを MySQL に転送する必要があります。この現象は memcache 雪崩現象と呼ばれます。

    概要:

    一貫性のあるハッシュによる分散の実装

  • 0 から 2^32 までの非常に多くの正の整数が分散されたリングがあると想像してください。

  • 次に、ハッシュ関数(crc32())でサーバのノード数を計算した後、時計回りに上記リングにマッピングします。

  • 上記のハッシュ関数に従って保存する必要のあるデータのキーを計算した後、それを時計回りにそれ自身と同じ大きさのノードに保存します。

  • 注: memcache がダウンしている限り、データは確実に失われます。ただし、データ損失を最小限に抑え、一貫性のあるハッシュを使用する方法を見つけてください。たとえ 1 台のサーバーがダウンしても、影響を受けるのは 1 台のサーバー上のデータだけです。

    仮想ノード: タスクを共有する

    キャッシュ雪崩現象

    雪崩の原因は何ですか?

  • 不適切なアルゴリズムとタッチ アルゴリズムにより、大量のキャッシュ エラーが発生し、雪崩が発生します。

    解決策: 一貫したハッシュアルゴリズム

  • キャッシュ時間はすべて同時に発生し、キャッシュ システムはすべて同時に失敗し、これも雪崩を引き起こします。

    解決策: キャッシュ時間を範囲内 (3 ~ 9 時間) のランダムな時間に設定します

    特定の memcache ノードのキャッシュ データの障害により、他の memcache ノードのキャッシュ ヒット率が低下し、キャッシュ内の欠落したデータが短期間で MySQL データベースにクエリされることになり、大きな負荷がかかります。これは、キャッシュ雪崩現象と呼ばれるダウンタイムを引き起こします。

    MySQLを再起動すると、また短時間でクラッシュしましたが、MySQLを繰り返し起動したところ、キャッシュされたデータの一部が確立され、キャッシュが完全に再構築され、MySQLがクラッシュすることはなくなりました。

    解決策: キャッシュ時間を範囲 (3 ~ 9 時間) 内のランダムな値に設定して、異なる期間で期限切れになり、再構築作業が異なる時間に割り当てられるようにします。

    memcache の可用性を高める方法

  • repcachedを使用して実装される、レプリケーションキャッシュの正式名は、日本人が発明したmemcachedの高可用性テクノロジであり、レプリケーションバッファテクノロジと呼ばれます。

  • MemcacheDB は、分散型のキー値永続ストレージ システムです。 sinaスタッフによって開発されました。これはキャッシュ コンポーネントではなく、オブジェクト アクセスに基づいた、信頼性が高く、高速かつ永続的なストレージ エンジンです。このプロトコルは memcache (不完全) と一致しているため、多くの memcached クライアントが接続できます。 MemcacheDB は永続ストレージ コンポーネントとして Berkeley DB を使用するため、Berkeley DB の多くの機能をサポートします。拡大する
  • Linux で PHP に拡張機能を追加し、一般的な手順を説明するにはどうすればよいですか?

    答え:

  • memcache のセキュリティを解決するにはどうすればよいですか?

    答え:

    memcache 自体の設計は非常にシンプルであるため、権限の設定にまったく制限がありません。なぜ権限を設定しないのでしょうか? シンプルにするためにキャッシュ機能のみを提供します

  • イントラネット 192.168.1.110 に配置します。イントラネット IP には外部ネットワークからアクセスできません。
  • ファイアウォール検証ルールを作成します。これは、指定した IP を持つパケットのみの転送を許可し、その他はすべて破棄します。

    192.168.1.221 ---224

    3. ファイルを使用してセッションファイルを保存する場合、ファイルが多すぎる場合はどうすればよいですか?

    一般的に、セッション ファイルの数が 65535 を超えると、この時点でセッションの取得が非常に遅くなります。これは、PHP コードの実行が非常に遅いことを意味します。

    答え:

    階層化処理: 1つのフォルダーの下にA-Zで始まるフォルダーを作成し、その後にA_Zが作成されます

    処理に memcache を使用する: 単一の memcache の処理能力が制限されている場合は、分散された memcache を使用して処理します

  • ロード バランシング クラスターは高可用性クラスターでもありますが、そうではないことをどのように理解しますか?

    回答: ロード バランシング クラスターは高可用性機能を提供します。特定のマシンがダウンしても、通常のサービスを提供できますが、サービスの提供は少し難しくなります。

    負荷分散クラスターはキープアライブメカニズムを提供していないためです。監視メカニズム

    ケース:

    プロジェクトで Memcache を使用するにはどうすればよいですか?

    Memcache の目的は、データをキャッシュし、MySQL への負荷を軽減することです。

  • リストページを書く

  • 詳細ページ

    拡張機能

  • Linux に php 拡張機能をインストールする一般的な方法

    答え:

  • 対応する拡張機能のソース コードをダウンロードします http://pecl.php.net/package/memcache
  • 拡張機能を Linux サーバーにアップロードし、(/usr/local/src/) の下に配置します。
  • tar -zxvf NAME.tar.gz を実行します。
  • CD名
  • phpize 命名は拡張パッケージのディレクトリに絶対パス (/usr/local/php/bin/phpize) が存在する必要がありますので実行してください。
  • ./configure --with-php-config=/usr/local/php/bin/php-config (--with-php-config=php-config のパスを絶対パスで指定します。これを実行する必要はありません)インストールパスを指定します)
  • メイク&&メイクインストール
  • ディレクトリが生成されます、その中に対応するNAME.soファイルがあります
  • php.iniの設定ファイルを変更し、2行の情報を追加します。

    extension_dir='上で生成されたディレクトリ'

    拡張子='NAME.so'

  • Apache を再起動し、phpinfo() 関数を使用してテストします。検索結果に Memcache があれば、拡張機能が正常に開かれたことを意味します。

  • www.bkjia.com本当http://www.bkjia.com/PHPjc/1117896.html技術記事大規模な Web サイトの最適化 - memcache テクノロジー、最適化 - memcache テクノロジー 大規模な Web サイトの最適化 - memcache テクノロジー メモリ + キャッシュ メモリ キャッシュ memcache の概要 memcache は分散キャッシュ システムです...
    関連ラベル:
    ソース:php.cn
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート