Heim > Artikel > Backend-Entwicklung > Eine ausführliche Diskussion der verteilten PHP-Bereitstellung
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
/* Memcache-Cache-Einstellungen */
'MEMCACHE_HOST' => '192.168.202.20',
'MEMCACHE_PORT' => 11211,
Ändern Sie den Datencache in Memcache:
[php] Ansicht einfache Kopie
'DATA_CACHE_TYPE' => 'Memcache' ,
Sitzung in Memcache ändern:
[php] Ansicht einfache Kopie
'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
Ansicht einfache Kopie
// +---- -------------------------------------------------- -
// | ThinkPHP [ WIR KÖNNEN ES NUR DENKEN ES ]
// +------- -------------------------------------------------- -------------
// | Copyright (c) 2006-2012 http://thinkphp.cn Alle Rechte vorbehalten.
// +------------------------------------------------- -------
// | Lizenziert ( http://www.apache.org/licenses/LICENSE-2.0 )
// +------------------------------------------------- -------
// | Autor: liu21st
// +------ -------------------------------------------------- --------------
definiert('THINK_PATH') oder Beenden ();
Klasse CacheMemcache erweitert
/**
* Architekturfunktion
* @param array $options Cache Parameter
* @access public
*/
Funktion __construct($options=array()) {
if ( !extension_loaded('memcache' ) ) {
throw_Exception(L('_NOT_SUPPERT_').': memcache');
}
$options = array_merge(array (
'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,
'persistent' => false,
),$options);
$this ->options = $options;
$this->options['expire'] = isset( $options['expire'])? $options['expire'] : C('DATA_CACHE_TIME') ;
$this->options['prefix'] = isset($options['prefix'])? $options['prefix'] : C('DATA_CACHE_PREFIX') ;
$this->options['length'] = isset( $options['length'])? $options['length'] : 0;
$func = $options['persistent'] ? 'pconnect' : 'connect';
$this->handler = neu Memcache;
$options['timeout'] = == falsch ?
$this->handler->$func($options['host'], $options['port ']):
🎜>$func($options['host'], $options['port '], $options[' timeout']
} >Cache lesen
* @return mixed
*/
öffentlich Funktion get( $name) {
N('cache_read',1 );
return $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äfix'].$name;
if($this->handler ->set($name, $value, 0, $expire)) {
if($this ->options['length']>0) {
// 记录缓存队列
$this->queue($name);
}
zurück WAHR;
}
return false;
}
/**
* Cache löschen
* @access public
* @param string $name Cache-Variablenname
* @return boolen
*/
öffentlich Funktion rm($name, $ttl = falsch) {
$name = $this->options['prefix'].$name;
return $ttl === false ?
$this->handler->löschen($name) :
$this->handler->delete($name, $ttl);
}
/**
* Cache leeren
* @access public
* @return boolen
*/
öffentlich Funktion clear() {
return $this->handler->flush ();
}
}
附件2:SessionMemcache.class.php
[php] Ansicht einfache Kopie
// +---------------------------------------- ---------------
// |
// +----------------- -------------------------------------------------- ---
// | Copyright (c) 2013-
// +----------- -------------------------------------------------- ---------
// | Lizenziert ( http://www.apache.org/licenses/LICENSE-2.0 )
// +-------------------------------- ---------------------------------------
// |. Autor: richievoe
// +--------------------------------- ------------------------------------
/**
* Memcache anpassen, um Sitzung zu speichern
*/
Class SessionMemcache{
//memcache-Objekt 🎜> privat
$mem; //SESSION gültige Zeit
privat
$expire; 🎜>
öffentlich Funktion execute(){
session_set_save_handler(
array(&$this ,'open'),
Array(&$this,'close'),
array(&$this,'read'),
array(&$this,'schreiben'),
array(&$this,'destroy'),
array(&$this ,'gc')
);
}
//Memcached verbinden und einige Daten initialisieren
öffentlich Funktionoffen($ Pfad,$name){
->expire = C('SESSION_EXPIRE') ? C('SESSION_EXPIRE') : ini_get('session.gc_maxlifetime');
$this->mem = new Memcache; 🎜>
$this->mem->connect(C('MEMCACHE_HOST'), C('MEMCACHE_PORT'));
function
return
$this->mem->close(); }
//Daten lesen
Funktion
$id){
$id = C('SESSION_PREFIX').$ id;
$data = $this-> mem->get($id);
Zurück $data ? $data :'';
}
//存入数据
öffentlich Funktion write( $id,$data){
$id = C('SESSION_PREFIX').$ id;
//$data = addslashes($data);
return $this->mem->set($id,$data,0,$this->expire);
}
//销毁数据
öffentlich Funktion zerstören($id){
$id = C( 'SESSION_PREFIX').$id;
zurück $this->mem->löschen ($id); >
public
function🎜> wahr >
Verwandte Empfehlungen:
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!