Heim  >  Artikel  >  Backend-Entwicklung  >  Eine ausführliche Diskussion der verteilten PHP-Bereitstellung

Eine ausführliche Diskussion der verteilten PHP-Bereitstellung

小云云
小云云Original
2018-01-25 14:14:006798Durchsuche

In diesem Artikel werden wir die verteilte PHP-Bereitstellung mit Ihnen teilen, in der Hoffnung, dass jeder eine klarere Vorstellung von der verteilten PHP-Bereitstellung hat.

Bei der normalen Webentwicklung besteht der übliche Modus darin, dass nach der Anmeldung des Benutzers die Anmeldestatusinformationen in der Sitzung gespeichert werden und einige der häufig verwendeten Hot-Daten des Benutzers im Dateicache und im Anhang gespeichert werden Vom Benutzer hochgeladene Informationen werden an einem bestimmten Ort des Webservers in einem Verzeichnis gespeichert. Diese Methode ist sehr komfortabel zu verwenden und für allgemeine Webanwendungen voll geeignet. Bei Websites auf Unternehmensebene mit hoher Parallelität ist dies jedoch nicht möglich. Um einen Lastausgleich zu erreichen, müssen Webcluster verwendet werden.

Nach der Bereitstellung mit der Web-Cluster-Methode müssen zunächst die Benutzerstatusinformationen und Anhangsinformationen angepasst werden. Der Benutzerstatus kann nicht mehr in der Sitzung gespeichert werden, der Cache kann nicht den Dateicache des lokalen Webservers verwenden und die Anhänge können nicht auf dem Webserver gespeichert werden. Denn es muss sichergestellt werden, dass der Status jedes Webservers im Cluster vollständig konsistent ist. Daher müssen Benutzerstatus, Cache usw. auf einem dedizierten Cache-Server wie Memcache gespeichert werden. Anhänge müssen im Cloud-Speicher gespeichert werden, z. B. Qiniu Cloud Storage, Alibaba Cloud Storage, Tencent Cloud Storage usw.

In diesem Artikel wird am Beispiel des ThinkPHP-Entwicklungsframeworks erläutert, wie Sitzung, Cache usw. eingerichtet und auf dem Memcache-Cache-Server gespeichert werden.

Laden Sie die zwischengespeicherte Memcache-Verarbeitungsklasse herunter und platzieren Sie sie im ThinkphpExtendDriverCache-Verzeichnis. Laden Sie die Session Memcache-Verarbeitungsklasse herunter und platzieren Sie sie im ThinkphpExtendDriverSession-Verzeichnis, wie unten gezeigt:




Ändern Sie die Konfigurationsdatei, passen Sie die Sitzung und den Cache an und zeichnen Sie sie auf dem Memcache-Server auf. Öffnen Sie ThinkPHPConfconvention.PHP und fügen Sie Konfigurationselemente hinzu:




[php] ansehen einfache Kopie


  1. /* Memcache-Cache-Einstellungen */

  2. 'MEMCACHE_HOST' => '192.168.202.20',

  3. 'MEMCACHE_PORT'     => 11211, 


Ändern Sie den Datencache in Memcache:




[php] Ansicht einfache Kopie


  1. 'DATA_CACHE_TYPE' => 'Memcache' ,

Sitzung in Memcache ändern:





[php] Ansicht einfache Kopie


  1. 'SESSION_TYPE' => ,


Wie unten gezeigt:



Da es viele Arten von Cloud-Speicher gibt, werden Anhänge im Cloud-Speicher gespeichert, daher werde ich nicht auf Details eingehen. Parametrisieren Sie einfach das von jedem Cloud-Speicher bereitgestellte SDK. Nach den oben genannten Änderungen kann der Webserver verteilt bereitgestellt werden.


Anhang 1: CacheMemcache.class.php



[php]

Ansicht einfache Kopie

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

  2. // | ThinkPHP [ WIR KÖNNEN ES NUR DENKEN ES ]  

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

  4. // | Copyright (c) 2006-2012 http://thinkphp.cn Alle Rechte vorbehalten.  

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

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

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

  8. // | Autor: liu21st   

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

  10.   

  11. definiert('THINK_PATH') oder Beenden ();

  12. Klasse CacheMemcache erweitert

  13. Cache { 
  14. /**

  15. * Architekturfunktion

  16. * @param array $options Cache Parameter

  17. * @access public

  18.      */  

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

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

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

  22.         }  

  23.   

  24.         $options = array_merge(array (  

  25.             '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.             'persistent'  =>  false,  

  29.         ),$options);  

  30.   

  31.         $this ->options      =   $options;  

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

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

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

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

  36.         $this->handler      =   neu Memcache;  

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

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

  39.                                             🎜>$func($options['host'], $options['port '], $options[' timeout']

    } >
  40. Cache lesen
  41. 🎜>
  42. * @param string $name Cache Variablenname

  43.      * @return mixed 

  44.      */  

  45.     öffentlich Funktion get( $name) {  

  46.         N('cache_read',1 );  

  47.         return $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äfix'].$name;  

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

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

  66.                  // 记录缓存队列  

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

  68.             }  

  69.             zurück WAHR;  

  70.         }  

  71.         return false;  

  72.     }  

  73.   

  74.     /**

  75. * Cache löschen

  76. * @access public

  77. * @param string $name Cache-Variablenname

  78. * @return boolen

  79. */  

  80.     öffentlich  Funktion rm($name$ttl = falsch) {  

  81.         $name   =   $this->options['prefix'].$name;  

  82.         return $ttl === false ?  

  83.             $this->handler->löschen($name) :  

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

  85.     }  

  86.   

  87.     /**

  88. * Cache leeren

  89. * @access public

  90. * @return boolen

  91. */  

  92.     öffentlich  Funktion clear() {  

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

  94.     }  

  95. }  

  附件2:SessionMemcache.class.php




[php] Ansicht einfache Kopie


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

  2. // |   

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

  4. // | Copyright (c) 2013-   

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

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

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

  8. // |. Autor: richievoe

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

  10.  /**

  11. * Memcache anpassen, um Sitzung zu speichern

  12. */ 

  13. Class SessionMemcache{

  14. //memcache-Objekt 🎜> privat

  15. $mem //SESSION gültige Zeit

  16. privat

  17. $expire; 🎜>

  18.     öffentlich Funktion execute(){  

  19.         session_set_save_handler(  

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

  21.             Array(&$this,'close'),   

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

  23.             array(&$this,'schreiben'),   

  24.  array(&$this,'destroy'), 

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

  26. );

  27.  //Memcached verbinden und einige Daten initialisieren 

  28. öffentlich Funktionoffen($ Pfad,$name){

  29. ->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');

  30.  $this->mem = new Memcache; 🎜>

  31.  
  32. return

    $this->mem->connect(C('MEMCACHE_HOST'), C('MEMCACHE_PORT'));

  33. public

    function
  34. close(){

    return
  35. $this->mem->close();

  36.  //Daten lesen 

  37. öffentlich

    Funktion
  38. read(

    $id){

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

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

  41.         Zurück $data ? $data :'';  

  42.     }  

  43.     //存入数据  

  44.     öffentlich Funktion write( $id,$data){  

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

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

  47.         return $this->mem->set($id,$data,0,$this->expire);  

  48.     }  

  49.     //销毁数据   

  50.     öffentlich Funktion zerstören($id){  

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

  52.  zurück $this->mem->löschen ($id); >

  53.  
  54. //Müllvernichtung

     

  55.  public

    function
  56. gc(){

    🎜> wahr >

  57. ?>
  58. Verwandte Empfehlungen:

  59. Erfahrungsaustausch mit verteilter PHP-Ablaufverfolgung

  60. Probleme im Zusammenhang mit der verteilten PHP- und umfangreichen Datenverarbeitung
  61. verteilte PHP-Architektur

Das obige ist der detaillierte Inhalt vonEine ausführliche Diskussion der verteilten PHP-Bereitstellung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn