この記事では、PHP 分散デプロイメントについて皆さんに共有し、誰もが PHP 分散デプロイメントについてより明確に理解できるようにしたいと考えています。
通常の Web 開発では、ユーザーがログインした後、ログイン ステータス情報がセッションに保存され、ユーザーがよく使用するホット データの一部がファイル キャッシュに保存され、添付ファイル情報がファイル キャッシュに保存されるのが一般的なモードです。ユーザーは Web サーバー上のディレクトリに保存されます。この方法は非常に使いやすく、一般的な Web アプリケーションに完全に対応します。しかし、同時実行性の高いエンタープライズレベルの Web サイトの場合は、それを処理できません。負荷分散を実現するには、Web クラスターを使用する必要があります。
Webクラスター方式でデプロイした後、最初に調整するのはユーザーのステータス情報と添付ファイル情報です。ユーザー ステータスをセッションに保存できなくなり、キャッシュでローカル Web サーバーのファイル キャッシュを使用できなくなり、添付ファイルを Web サーバーに保存できなくなります。クラスター内の各 Web サーバーのステータスが完全に一貫していることを確認する必要があるためです。そのため、ユーザーステータスやキャッシュなどをMemcacheなどの専用キャッシュサーバーに保存する必要があります。添付ファイルは、Qiniu Cloud Storage、Alibaba Cloud Storage、Tencent Cloud Storage などのクラウド ストレージに保存する必要があります。
この記事では、ThinkPHP 開発フレームワークを例として、セッションやキャッシュなどを設定して Memcache キャッシュ サーバーに保存する方法を説明します。
以下に示すように、キャッシュされた Memcache 処理クラスをダウンロードして ThinkphpExtendDriverCache ディレクトリに配置します。Session Memcache 処理クラスをダウンロードして ThinkphpExtendDriverSession ディレクトリに配置します。
構成を変更するファイルを作成し、セッションとキャッシュを調整し、Memcache サーバーに記録します。 ThinkPHPConfconvention.PHP を開き、構成項目を追加します: ビュー
プレーンコピー
/* Memcache キャッシュ設定 */
'MEMCACHE_HOST' =&g ; '192.168.202.20'
、'MEMCACHE_PORT' => 11211,
データ キャッシュを Memcache に変更します:
[php]ビュー プレーンコピー
'DATA_CACHE_TYPE' => ’Memcache’,
セッションを Memcache に変更:
[php]ビュー 以下の図に示すように、プレーン Copye'SESSION_TYPE'
= & GT;
種類がたくさんあるので、クラウド ストレージの場合、添付ファイルはクラウド ストレージに保存されるため、詳細については説明しません。各クラウド ストレージが提供する SDK をパラメータ化するだけです。上記の変更を行うと、Web サーバーを分散方式で導入できるようになります。
添付ファイル1: CacheMemcache.class.php
[php]
ビュー
普通のコピー
// +---------------------------- ----------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +---------------- -------------------------------------------
// | 著作権 (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +-------- -------------------------------------------------- -
// | ライセンス済み ( http://www.apache.org/licenses/LICENSE-2.0 )
// +-------- -------------------------------------------------- -
// | 著者: liu21st
// +-------------------------- ----------------------------------------
定義('THINK_PATH') or exit();
/**
* Memcache キャッシュドライバー
* @category Extend
* @package Extend
* @subpackage Driver.Cache
* @author liu21st
*/
クラス CacheMemcache extends キャッシュ {
* アーキテクチャ関数
* @param array $optionsキャッシュパラメータ
* @access public
*/
function __construct($options=array ()) {
if ( !extension_loaded('memcache') ) {
throw_Exception(L('_NOT_SUPPERT_') ).':memcache');
}
$options = array_merge(array (
'ホスト' => C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',
'ポート' => C('MEMCACHE_PORT') ? C('MEMCACHE_PORT') : 11211,
'タイムアウト' => C('DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,
'persistent' => false、
)、$options);
$this->オプション = $オプション;
$this->options['expire'] = isset($options['expire'])? $options['expire'] : C('DATA_CACHE_TIME');
$this->options['prefix'] = isset($options['prefix' ])? $options['プレフィックス'] : C('DATA_CACHE_PREFIX');
$this->options['length'] = isset($options['length'])? $オプション['長さ'] : 0;
$func = $options['永続的'] ? '接続' : '接続';
$this->ハンドラー = 新しい Memcache;
$options['タイムアウト'] === false ?
$options['ポート']): 'ホスト']、 $options['ポート'
]、['タイムアウト']); * @param string $name キャッシュ変数名
get($name ) {
N('cache_read',1); return
->handler->get($this->options['prefix'
$name); / ** @param mixed $value ストレージ データ
*/
set($name,
, $expire = null) { N('cache_write'
'期限切れ']; }
$name $this->ハンドラー->set($name, $value, 0,
$expire$this->オプション['長さ']>0) {
-> ;キュー(); return true;
}
return false;
}
/**
* @param string $name キャッシュ変数名
* @ return boolen
*/
公開
関数 rm( $name,
= false) { $name = $this ->オプション['接頭語'].
;
return $ttl === false ?
$this->ハンドラー->削除($name) :
$this->ハンドラー- >削除($name, $ttl);
}
/**
* @return boolen
*/
public
function clear() {
return $this->handler->flush();
}
}
添付ファイル2:SessionMemcache.class.php
[php] ビュー plain copy
// +------------- ----------------------------------------
// |
// +------------------------------------- ---------------------------------
// | Copyright (c) 2013-
// +---------------------------- ---------------------------------------
/ / | ライセンス済み ( http://www.apache.org/licenses/LICENSE-2.0 )
// +------------------------------------------ --- ----------------------------
// 著者: richievoe
$mem;
//セッション有効時間private
$expire; //外部から呼び出される関数
public function execute(){
session_set_save_handler(
array(&$this,'open' )、
配列(&$this,'close')、
配列(&$this : )、
'); 関数open($path,$name
'SESSION_EXPIRE') ? C( 「SESSION_EXPIRE」) : ini_get
'session.gc_maxlifetime'
);これ $this->mem->connect(C( 'MEMCACHE_HOST'
'MEMCACHE_PORT')); /memcache サーバーを閉じる public
function
}
public
read($id ){
$ ID c = c ('SESSION_PREFIX') . $ ID
= $ This - & GT メム; ->get($id);
:} //データを保存
function
$id,$data
) {$ ID c = c ('SESSION_PREFIX') . $ ID
️ Return
$this$id,$data,0, $this->期限切れ); }
関数
$id){
$id = C( 'SESSION_PREFIX').$id;️ Return
$this->mem-> delete($id); }
public
functionreturn 本当です
} ) PHP分散トレーシングに関する経験の共有
PHP分散と大量のデータ処理に関連する問題
以上がPHP 分散デプロイメントの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。