Maison >développement back-end >tutoriel php >Une discussion détaillée du déploiement distribué php
Dans cet article, nous partagerons avec vous le déploiement distribué PHP, en espérant que tout le monde aura une idée plus claire du déploiement distribué PHP.
Dans le développement Web ordinaire, le mode courant est qu'une fois que l'utilisateur s'est connecté, les informations sur l'état de connexion sont stockées dans la session, certaines des données chaudes couramment utilisées par l'utilisateur sont stockées dans le cache de fichiers et la pièce jointe les informations téléchargées par l'utilisateur sont stockées dans un certain emplacement du répertoire du serveur Web. Cette méthode est très pratique à utiliser et entièrement adaptée aux applications Web générales. Mais pour les sites Web d’entreprise à haute concurrence, il ne peut pas le gérer. Les clusters Web doivent être utilisés pour réaliser l'équilibrage de charge.
Après le déploiement à l'aide de la méthode du cluster Web, la première chose à ajuster est les informations sur l'état de l'utilisateur et les informations sur les pièces jointes. Le statut de l'utilisateur ne peut plus être enregistré dans la session, le cache ne peut pas utiliser le cache de fichiers du serveur Web local et les pièces jointes ne peuvent pas être enregistrées sur le serveur Web. Car il faut s’assurer que l’état de chaque serveur web du cluster est totalement cohérent. Par conséquent, le statut de l'utilisateur, le cache, etc. doivent être enregistrés sur un serveur de cache dédié, tel que Memcache. Les pièces jointes doivent être enregistrées sur le stockage cloud, tel que Qiniu Cloud Storage, Alibaba Cloud Storage, Tencent Cloud Storage, etc.
Cet article prend le framework de développement ThinkPHP comme exemple pour expliquer comment configurer et enregistrer la session, le cache, etc. sur le serveur de cache Memcache.
Téléchargez la classe de traitement Memcache mise en cache et placez-la dans le répertoire ThinkphpExtendDriverCache ; téléchargez la classe de traitement Session Memcache et placez-la dans le répertoire ThinkphpExtendDriverSession, comme indiqué ci-dessous :
Modifiez le fichier de configuration, ajustez la session et le cache, et enregistrez-les sur le serveur Memcache. Ouvrez ThinkPHPConfconvention.PHP et ajoutez des éléments de configuration :
[php] voir copie simple
/* Paramètres du cache Memcache */
'MEMCACHE_HOST' => '192.168.202.20',
'MEMCACHE_PORT' => 11211,
Modifier le cache de données vers Memcache :
[php] vue copie simple
'DATA_CACHE_TYPE' => ,
voir copie simple
'SESSION_TYPE' => 'Memcache' ,
Comme indiqué ci-dessous :
Comme il existe de nombreux types de stockage cloud, les pièces jointes sont stockées sur le stockage cloud, je n'entrerai donc pas dans les détails. Paramétrez simplement le SDK fourni par chaque stockage cloud. Après les modifications ci-dessus, le serveur Web peut être déployé de manière distribuée.
Pièce jointe 1 : CacheMemcache.class.php
vue copie simple
// +---- -------------------------------------------------- ----------------
// | ThinkPHP [ NOUS POUVONS LE FAIRE JUST PENSEZ-LE ]
// +------- -------------------------------------------------- -------------
// | Copyright (c) 2006-2012 http://thinkphp.cn Tous droits réservés.
// +------------------------------------------------- ---------------------
// | Sous licence ( http://www.apache.org/licenses/LICENSE-2.0 )
// +------------------------------------------------- ---------------------
// | Auteur : liu21st
// +------ -------------------------------------------------- ----------
défini('THINK_PATH') ou sortie ();
class CacheMemcache étend
/**
* Fonction architecturale
* @param array $options Cache paramètres
* @access public
*/
fonction __construct($options=array()) {
if ( !extension_loaded('memcache' ) ) {
throw_exception(L('_NOT_SUPPERT_').' : memcache');
}
$options = array_merge(array (
'hôte' => C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',
'port' => C('MEMCACHE_PORT') ? C('MEMCACHE_PORT') : 11211,
'timeout' => C('DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,
'persistant' => faux,
),$options);
$this -> options = $options;
$this->options['expire'] = isset( $options['expire']) ? $options['expire'] : C('DATA_CACHE_TIME') ;
$this->options['préfixe'] = isset($options['prefix']) ? $options['préfixe'] : C('DATA_CACHE_PREFIX') ;
$this->options['longueur'] = isset( $options['longueur']) ? $options['longueur'] : 0 ;
$func = $options['persistant'] ? 'pconnect' : 'connect' ;
$this->handler = nouveau Cache mémoire ;
$options['timeout'] = == faux ?
$this->handler->$func($options['hôte'], $options['port ']) :
🎜>$func ($options['hôte'], $options['port '], $options['timeout']
} >Lire le cache
* @retour mixte
*/
public fonction get( $name) {
N('cache_read',1 );
retour $this->handler- >get($this->options['prefix'].$name);
}
/**
* 写入缓存
* @access public
* @param string $name缓存变量名
* @param mixed $value 存储数据
* @param integer $expire 有效时间(秒)
* @return boolen
*/
public function set($name, $value, $expire = null) {
N('cache_write',1);
if(is_null($expire)) {
$expire = $this->options['expire'];
}
$name = $this->options[' préfixe'].$name;
if($this->handler ->set($name, $value, 0, $expire)) {
if($this ->options['longueur']>0) {
// 记录缓存队列
$this->queue($nom);
}
retour vrai;
}
retour faux ;
}
/**
* Supprimer le cache
* @access public
* @param string $name Nom de la variable cache
* @return boolen
*/
public fonction rm($name, $ttl = false) {
$name = $this->options['préfixe'].$name;
return $ttl === false ?
$this->handler->supprimer($name) :
$this->handler->supprimer($name, $ttl);
}
/**
* Vider le cache
* @access public
* @return boolen
*/
public fonction clear() {
retour $this->handler->flush ();
}
}
附件2:SessionMemcache.class.php
[php] voir copie simple
// +--------------------------------------------- -------------------------------
// |
// +----------------- -------------------------------------------------- ---
// | Copyright (c) 2013-
// +----------- -------------------------------------------------- ---------
// | Sous licence ( http://www.apache.org/licenses/LICENSE-2.0 )
// +-------------------------------- ---------------------------------------------
// | Auteur : richievoe
// +--------------------------------- -- ----------------------------------
/**
* Personnalisez Memcache pour enregistrer la session
*/
Session de coursMemcache{
//objet memcache 🎜> privé
$mem; //heure de validité de la SESSION
privé
$expire
public fonction execute(){
session_set_save_handler(
array(&$this ,'ouvrir'),
tableau(&$this,'fermer'),
array(&$this,'lire'),
array(&$this,'écrire'),
tableau(&$this,'détruire'),
tableau(&$this ,'gc')
🎜>
fonction ouvert($ chemin,$name){
->expire = C('SESSION_EXPIRE') ? 🎜>'session.gc_maxlifetime');
$this->mem = nouveau Memcache
return $this->mem->connect(C('MEMCACHE_HOST'), C('MEMCACHE_PORT')); > }
//Fermer le serveur Memcache
public
fonction fermer(){
retour$this->mem->close( }
//Lire les données
public
fonction lire( $ identifiant){
$id = C('SESSION_PREFIX').$ identifiant;
$data = $this-> mem->get($id);
retour $data ? $data :'';
}
//存入数据
public fonction écrire( $id,$data){
$id = C('SESSION_PREFIX').$ identifiant;
//$data = addslashes($data);
retour $this->mem->set($id,$data,0,$this->expire);
}
//销毁数据
public fonction détruire($id){
$id = C( 'SESSION_PREFIX').$id;
retourner $this->mem->supprimer ($id); >
public
fonction🎜> vrai >
Recommandations associées :
architecture distribuée PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!