Maison  >  Article  >  développement back-end  >  Une discussion détaillée du déploiement distribué php

Une discussion détaillée du déploiement distribué php

小云云
小云云original
2018-01-25 14:14:006796parcourir

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


  1. /* Paramètres du cache Memcache */

  2. 'MEMCACHE_HOST' => '192.168.202.20',

  3. 'MEMCACHE_PORT'     => 11211, 


Modifier le cache de données vers Memcache :




[php] vue copie simple


  1. 'DATA_CACHE_TYPE' => ,

Modifier la session vers Memcache :





[php]

voir copie simple


  1. '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



[php]

vue copie simple

  1. // +---- -------------------------------------------------- ----------------  

  2. // | ThinkPHP [ NOUS POUVONS LE FAIRE JUST PENSEZ-LE ]  

  3. // +------- -------------------------------------------------- -------------  

  4. // | Copyright (c) 2006-2012 http://thinkphp.cn Tous droits réservés.  

  5. // +------------------------------------------------- ---------------------  

  6. // | Sous licence ( http://www.apache.org/licenses/LICENSE-2.0 )  

  7. // +------------------------------------------------- ---------------------  

  8. // | Auteur : liu21st   

  9. // +------ -------------------------------------------------- ----------  

  10.   

  11. défini('THINK_PATH') ou sortie ();

  12. class CacheMemcache étend

  13. Cache { 
  14. /**

  15. * Fonction architecturale

  16. * @param array $options Cache paramètres

  17. * @access public

  18.      */  

  19.     fonction __construct($options=array()) {  

  20.         if ( !extension_loaded('memcache' ) ) {  

  21.             throw_exception(L('_NOT_SUPPERT_').' : memcache');  

  22.         }  

  23.   

  24.         $options = array_merge(array (  

  25.             'hôte'        =>   C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',  

  26.             'port'        =>  C('MEMCACHE_PORT') ? C('MEMCACHE_PORT') : 11211,  

  27.             'timeout'     =>  C('DATA_CACHE_TIMEOUT') ? C('DATA_CACHE_TIMEOUT') : false,  

  28.             'persistant'  =>  faux,  

  29.         ),$options);  

  30.   

  31.         $this -> options      =   $options;  

  32.         $this->options['expire'] =  isset( $options['expire']) ?  $options['expire']   :   C('DATA_CACHE_TIME') ;  

  33.         $this->options['préfixe'] =  isset($options['prefix']) ?  $options['préfixe']   :   C('DATA_CACHE_PREFIX') ;          

  34.         $this->options['longueur'] =  isset( $options['longueur']) ?  $options['longueur']   :   0 ;          

  35.         $func               =   $options['persistant'] ? 'pconnect' : 'connect' ;  

  36.         $this->handler      =   nouveau Cache mémoire ;  

  37.         $options['timeout'] = == faux ?  

  38.  $this->handler->$func($options['hôte'], $options['port ']) :

  39.                                             🎜>$func ($options['hôte'], $options['port '], $options['timeout']

    } >
  40. Lire le cache
  41. 🎜>
  42. * @param string $name cache nom de la variable

  43.      * @retour mixte 

  44.      */  

  45.     public fonction get( $name) {  

  46.         N('cache_read',1 );  

  47.         retour $this->handler- >get($this->options['prefix'].$name);  

  48.     }  

  49.   

  50.     /** 

  51.      * 写入缓存 

  52.      * @access public 

  53.      * @param string $name缓存变量名 

  54.      * @param mixed $value  存储数据 

  55.      * @param integer $expire  有效时间(秒) 

  56. * @return boolen 

  57.      */  

  58.     public function set($name $value$expire = null) {  

  59.         N('cache_write',1);  

  60.         if(is_null($expire)) {  

  61.             $expire  =  $this->options['expire'];  

  62.         }  

  63.         $name   =   $this->options[' préfixe'].$name;  

  64.         if($this->handler ->set($name$value, 0, $expire)) {  

  65.             if($this ->options['longueur']>0) {  

  66.                   // 记录缓存队列  

  67.                $this->queue($nom);  

  68.              }  

  69.              retour vrai;  

  70.         }  

  71.         retour faux ;  

  72.     }  

  73.   

  74.     /**

  75. * Supprimer le cache

  76. * @access public

  77. * @param string $name Nom de la variable cache

  78. * @return boolen

  79. */  

  80.     public  fonction rm($name$ttl = false) {  

  81.         $name   =   $this->options['préfixe'].$name;  

  82.         return $ttl === false ?  

  83.             $this->handler->supprimer($name) :  

  84.             $this->handler->supprimer($name$ttl);  

  85.     }  

  86.   

  87.     /**

  88. * Vider le cache

  89. * @access public

  90. * @return boolen

  91. */  

  92.     public  fonction clear() {  

  93.         retour $this->handler->flush ();  

  94.     }  

  95. }  

  附件2:SessionMemcache.class.php




[php] voir copie simple


  1. // +--------------------------------------------- -------------------------------  

  2. // |   

  3. // +----------------- -------------------------------------------------- ---  

  4. // | Copyright (c) 2013-   

  5. // +----------- -------------------------------------------------- ---------  

  6. // | Sous licence ( http://www.apache.org/licenses/LICENSE-2.0 )  

  7. // +-------------------------------- ---------------------------------------------

  8. // | Auteur : richievoe

  9. // +--------------------------------- -- ----------------------------------

  10.  /**

  11. * Personnalisez Memcache pour enregistrer la session

  12. */ 

  13. Session de coursMemcache{

  14. //objet memcache 🎜> privé

  15. $mem //heure de validité de la SESSION

  16. privé

  17. $expire

  18.     public fonction execute(){  

  19.         session_set_save_handler(  

  20.             array(&$this ,'ouvrir'),   

  21.             tableau(&$this,'fermer'),   

  22.             array(&$this,'lire'),   

  23.             array(&$this,'écrire'),   

  24.  tableau(&$this,'détruire'), 

  25.  tableau(&$this ,'gc')

  26. 🎜>

  27.  
  28. //Connectez memcached et initialisez certaines données

     

  29. public

    fonction ouvert($ chemin,$name){

  30. ->expire = C('SESSION_EXPIRE') ? 🎜>'session.gc_maxlifetime');

  31.  $this->mem = nouveau Memcache

  32.  return $this->mem->connect(C('MEMCACHE_HOST'), C('MEMCACHE_PORT')); > }

  33. //Fermer le serveur Memcache
  34. public
  35. fonction fermer(){

    retour
  36. $this->mem->close(

  37.  

    //Lire les données
  38.  

    public
  39. fonction lire( $ identifiant){

  40.         $id = C('SESSION_PREFIX').$ identifiant;  

  41.         $data = $this-> mem->get($id);  

  42.         retour $data ? $data :'';  

  43.     }  

  44.     //存入数据  

  45.     public fonction écrire( $id,$data){  

  46.         $id = C('SESSION_PREFIX').$ identifiant;  

  47.         //$data = addslashes($data);  

  48.         retour $this->mem->set($id,$data,0,$this->expire);  

  49.     }  

  50.     //销毁数据   

  51.     public fonction détruire($id){  

  52.         $id = C( 'SESSION_PREFIX').$id;  

  53.  retourner $this->mem->supprimer ($id); >

  54.  
  55. //Destruction des déchets

     

  56.   public

    fonction
  57. gc(){

    🎜> vrai >

  58. ?>
  59. Recommandations associées :

  60. Partage d'expérience de traçage distribué PHP

  61. Problèmes liés à la distribution PHP et au traitement des données à grande échelle
  62. 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn