Memcache API and Integration

Drupalのキャッシュシステム向けに、memcacheまたはmemcached PECL拡張を使用した高性能キャッシュバックエンド統合を提供します。

memcache
44,499 sites
58
drupal.org

インストール

Drupal 11, 10, 9 v8.x-2.7
composer require 'drupal/memcache:8.x-2.7'
Drupal 8 v8.x-2.3
composer require 'drupal/memcache:8.x-2.3'

概要

Memcache API and Integrationモジュールは、キャッシュデータをデータベースではなくmemcacheサーバーに保存する高性能キャッシュバックエンドをDrupalに提供します。これにより、キャッシュ操作をデータベースから専用のメモリベースキャッシュサーバーにオフロードし、サイトパフォーマンスを大幅に向上させます。

このモジュールはPECL memcacheとmemcached PHP拡張の両方をサポートし、自動検出と選択を行います。DrupalのCacheBackendInterfaceを実装してDrupalのキャッシュシステムとシームレスに統合し、複数のWebサーバー間での分散ロック用のロックバックエンド実装も含まれています。

主要なアーキテクチャ機能には、クラスタに編成された複数のmemcacheサーバーのサポート、大きなキャッシュアイテム(470KB超)の自動チャンク分割、memcacheに保存されたタイムスタンプを使用したキャッシュタグの無効化、memcacheインスタンスを共有するマルチサイトデプロイメント用の設定可能なキープレフィックスが含まれます。

付属のMemcache Adminサブモジュールは、ヒット/ミス率、メモリ使用量、接続情報、リクエストごとのキャッシュ操作詳細など、memcacheサーバー統計を監視するための包括的なUIを提供します。

Features

  • シームレスなキャッシュバックエンド置換のためのDrupal CacheBackendInterfaceを実装
  • 自動検出機能付きでPECL memcacheとmemcached PHP拡張の両方をサポート
  • キャッシュbin分離のためのサーバークラスタリングによるマルチサーバーサポート
  • 470KBを超えるキャッシュアイテムの自動分割
  • memcacheに保存されたタイムスタンプベースのキャッシュタグ無効化(オプションでデータベース不要モード)
  • memcacheを使用した分散ロック用のロックバックエンド実装
  • memcacheサーバーを共有する複数のDrupalサイト用のキープレフィックス設定
  • 250バイトを超えるキー用の設定可能なキーハッシュアルゴリズム(デフォルト: sha1)
  • memcacheサーバーへのUnixソケット接続のサポート
  • memcache拡張用の永続接続サポート
  • セキュアなmemcached接続用のSASL認証サポート
  • Drupalの早期ブートストラップ中にmemcacheを使用するためのブートストラップコンテナオーバーライド
  • すべてのmemcache操作をログ記録するデバッグモード
  • 統計収集用のMcrouterプロキシサポート
  • キャッシュ操作、ヒット、ミスを表示するページごとの統計表示
  • スラブ検査機能を備えた詳細なサーバー統計レポート

Use Cases

高トラフィックWebサイトのキャッシング

高トラフィックのDrupalサイトでデータベースキャッシングをmemcacheに置き換えます。memcacheをデフォルトのキャッシュバックエンドとして設定し、データベースのボトルネックを排除します。settings.phpで$settings['cache']['default'] = 'cache.backend.memcache'を設定します。これにより、すべてのキャッシュの読み取りと書き込みがデータベースから専用のmemcacheサーバーにオフロードされ、データベース負荷が大幅に削減され、応答時間が改善されます。

マルチサーバーロードバランス環境

ロードバランサーの背後で複数のWebサーバー上で実行されるDrupalサイトにmemcacheをデプロイします。すべてのWebサーバーが共有memcacheサーバーに接続し、クラスタ全体でキャッシュの一貫性を確保します。example.services.ymlからロックサービスオーバーライドを追加して、分散ロック用にロックバックエンドをmemcacheを使用するように設定し、キャッシュ再構築中の競合状態を防止します。

重要度によるキャッシュbinの分離

重要度とアクセスパターンに基づいて、異なるキャッシュbinを専用のmemcacheクラスタにルーティングします。たとえば、'render'と'page' binをより大きな専用クラスタにルーティングし、重要度の低いbinをより小さなクラスタに保持します。$settings['memcache']['bins'] = ['render' => 'cluster_render', 'page' => 'cluster_render', 'default' => 'default']を使用して設定します。

共有Memcacheを使用したマルチサイトDrupal

キャッシュ分離を維持しながら、複数のDrupalサイト間でmemcacheサーバーを共有します。各サイトに一意のキープレフィックスを設定します: $settings['memcache']['key_prefix'] = 'site1'; これにより、各サイトのキャッシュキーが名前空間化され、同じmemcacheインフラストラクチャを共有する他のサイトと衝突しません。

データベース不要のブートストラップ

データベースが利用可能になる前の早期ブートストラップ中にmemcacheを使用するようにDrupalを設定します。これにより、キャッシュコンテナ初期化中のデータベースクエリが排除されます。settings.phpでREADME.mdのブートストラップコンテナ定義を実装し、データベースバックのキャッシュタグ無効化(ハイブリッドモード)またはTimestampCacheTagsChecksumサービスオーバーライドを使用した純粋なmemcacheモードを使用します。

パフォーマンス監視とデバッグ

memcache_adminサブモジュールを有効にして、キャッシュパフォーマンスを監視し、キャッシュの問題をデバッグします。管理設定でページごとの統計を有効にして、各リクエストのヒット、ミス、タイミングを含むリアルタイムのキャッシュ操作を確認します。/admin/reports/memcacheのレポートを使用して、設定されたすべてのサーバー全体のサーバーの健全性、メモリ使用量、ヒット率を表示します。

Tips

  • 本番デプロイメントでは、より多くの機能をサポートし、積極的にメンテナンスされているため、memcacheよりもmemcached PECL拡張を使用してください。
  • 利用可能なメモリにより多くのデータを保存するには、Memcached::OPT_COMPRESSION => TRUEで圧縮を有効にしてください。
  • サーバーの追加または削除時のキャッシュ無効化を最小限に抑えるため、一貫性のあるハッシング(Memcached::OPT_DISTRIBUTION => Memcached::DISTRIBUTION_CONSISTENT)を使用してください。
  • 異なるアクセスパターンに対してメモリ割り当てを最適化するため、render/pageキャッシュ用と他のbin用に別々のmemcacheクラスタを設定してください。
  • 複数のDrupalサイトを使用する場合は、キャッシュキーの衝突を防ぐために常に一意のkey_prefix値を設定してください。
  • 管理統計でエビクション率を監視してください - 高いエビクションはメモリ割り当てが不十分であることを示します。
  • 最大のパフォーマンスを得るには、Drupalの早期ブートストラップ中にmemcacheを使用するためにブートストラップコンテナ定義を実装してください。
  • ネットワークオーバーヘッドを削減するため、ローカルのmemcached接続にはTCPの代わりにUnixソケットを使用してください。

Technical Details

Admin Pages 5
Memcache Admin設定 /admin/config/system/memcache

Memcache Adminモジュールの設定ページ。適切な権限を持つユーザーに対して、各ページの下部にページごとのmemcache統計を表示するかどうかを制御します。

Memcache統計 /admin/reports/memcache

設定されたすべてのmemcacheサーバーの包括的な統計を表示します。使用中のPECLドライバーバージョン、割り当てられたキャッシュbinを持つすべての設定済みサーバーエンドポイントのリスト、アップタイム、メモリ使用量、接続数、キャッシュヒット/ミス率、エビクション、パフォーマンスメトリクスを含む詳細な統計テーブルを提供します。より詳細な分析のための個別サーバー統計へのリンクがあります。

Memcache統計 - クラスタ /admin/reports/memcache/{cluster}

特定のmemcacheクラスタの統計を表示し、そのクラスタ内のすべてのサーバーのデータを表示します。

Memcache統計 - サーバー /admin/reports/memcache/{cluster}/{server}

特定のmemcacheサーバーの生の統計を表示します。Memcache拡張使用時は、異なる統計タイプ(default、slabs、items、sizes)を表示するためのナビゲーションを提供します。すべてのサーバーメトリクスのプロパティ/値ペアを表示します。

Memcache統計 - スラブキャッシュダンプ /admin/reports/memcache/{cluster}/{server}/{type}/cachedump/{slab}

特定のmemcacheスラブの内容を表示し、キャッシュされたキーとそのサイズおよび有効期限を表示します。'access slab cachedump'権限が必要です。Memcache拡張でのみ利用可能。

権限 2
memcache統計へのアクセス

ユーザーがレポートページでmemcache統計を表示し、有効な場合はページごとの統計を見ることを許可します。これは特別なセキュリティ制限のない標準的な権限です。

memcacheスラブのキャッシュダンプへのアクセス

ユーザーが個別のmemcacheスラブの内容(キャッシュされたキーとそのメタデータを含む)を表示することを許可します。潜在的に機密性の高いキャッシュデータを公開する可能性があるため、これは制限された権限です。

Troubleshooting 6
キーの設定に失敗したエラーメッセージ

PECL memcacheライブラリをバージョン2.2.1以上にアップグレードしてください。また、php.iniレベルのzlib圧縮がmemcacheと競合していないか確認してください(http://drupal.org/node/273824を参照)。

SERVER_ERROR オブジェクトがキャッシュに対して大きすぎる

memcached設定ファイル(/etc/memcached.conf)を変更して最大アイテムサイズを増やします: --max-item-size=5M。デフォルトは1MBで、一部のキャッシュアイテムには不十分な場合があります。

memcache拡張が見つからないエラー

PECL memcacheまたはmemcached PHP拡張のいずれかをインストールしてください。ほとんどのシステムでは: pecl install memcacheまたはpecl install memcached。php.iniで拡張が有効になっていることを確認してください。

複数サーバーでのキャッシュ不整合

一貫性のあるハッシュ分散を有効にします。PECL memcacheの場合: php.iniでmemcache.hash_strategy=consistentを設定。PECL memcachedの場合: これがデフォルトですが、$settings['memcache']['options'][Memcached::OPT_DISTRIBUTION] = Memcached::DISTRIBUTION_CONSISTENTで明示的に設定できます。

接続拒否またはタイムアウトエラー

memcachedデーモンが実行中であることを確認します(systemctl status memcached)。memcachedがリモートサーバーにある場合はファイアウォールルールを確認します。設定されたhost:portがmemcachedデーモンの設定と一致していることを確認します。

管理画面に統計が表示されない

'access memcache statistics'権限があることを確認してください。ページごとの統計を表示する場合は、/admin/config/system/memcacheでオプションを有効にしてください。匿名ユーザーには統計が表示されないことに注意してください。

Security Notes 4
  • 'access slab cachedump'権限は、セッション情報やユーザーデータを含む機密性の高いキャッシュデータを公開する可能性があります。この権限は高度に信頼された管理者にのみ付与してください。
  • 不正アクセスを防止するため、信頼されていないネットワーク経由でアクセス可能なmemcachedサーバーにはSASL認証を有効にする必要があります。
  • Memcachedにはネットワークレベルのセキュリティ以外の組み込みアクセス制御がありません。memcachedポートが適切にファイアウォールで保護されていることを確認してください。
  • キャッシュデータはメモリに暗号化されずに保存されます。追加の暗号化なしに、高度に機密性の高いデータをキャッシュbinに保存しないでください。