本文我們接著跟大家分享php分散式部署,希望大家對php分散式部署有更清楚的思路。
普通的Web開發,常用的模式就是用戶登入之後,登入狀態資訊保存在Session中,用戶一些常用的熱數據保存在文件緩存中,用戶上傳的附件資訊保存在Web伺服器的某個目錄上。這種方式對於一般的Web應用,使用很方便,完全能夠勝任。但是對於高併發的企業級網站,就應付不了了。需採用Web叢集實現負載平衡。
使用Web叢集方式部署之後,首要調整的就是使用者狀態資訊與附件資訊。使用者狀態不能再儲存到Session中,快取也不能用本機Web伺服器的檔案緩存,以及附件,也不能儲存在Web伺服器上了。因為要確保叢集裡面的各個Web伺服器,狀態完全一致。因此,需要將使用者狀態、快取等保存到專用的快取伺服器,例如Memcache。附件需要保存到雲端儲存中,例如七牛雲端儲存、阿里雲端儲存、騰訊雲端儲存等。
本文以ThinkPHP開發框架為例,說明如何設置,能夠將Session、快取等保存到Memcache快取伺服器上。
下載快取的Memcache處理類,放到Thinkphp\Extend\Driver\Cache目錄中;下載Session的Memcache處理類,放到Thinkphp\Extend\Driver\Session目錄中,如下圖所示:
# 修改設定文件,調整Session與緩存,都記錄到Memcache伺服器上。開啟ThinkPHP\Conf\convention.PHP,增加配置項目:
##[ php] view plain copy
#/* Memcache快取設定 */
#'MEMCACHE_HOST' => #'192.168.202.20',
# 修改資料快取為Memcache:
#[php] view plain copy
#'DATA_CACHE_TYPE' => #'Memcache' ,
# 修改Session為Memcache:
view plain copy'SESSION_TYPE'
=>
,
# 如下圖:
// +--- ------------------------------------------------- -----------------
##/ / | ThinkPHP [我們能做,只要想就可以]
#//+------ ------------------------------------------------- - -------------
// | 版權所有(c) 2006-2012 http://thinkphp.cn 保留所有權利。 / +------------------------------------------------ ----------------------
# #//| 已授權(http://www.apache.org/licenses/LICENSE-2.0)
/ / +------------------------------------------------ ----------------------
# #//| 作者: liu21st
##// +------- ------------------------------------------------- - --------------
##
defined('THINK_PATH'#) or #exit ();
#/**
* Memcache快取驅動程式
* @category Extend
* @package Extend
## * @subpackage Driver.Cache
## * @author liu21st
class CacheMemcache extends
Cache {
#
########## ###/**###o################################################################### ########## * 架構函數### ##################### * @param ######## * @參數################### * @access public### ##################$options=#array()) {
# #if ( !extension_loaded('memcache'
throw_exception(L('_NOT_SUPPERT_'
);
}
#
# $選項# = array_merge#(array## ( ##(array## (
#################"###################"chey##### ( ################### ###'主機'###### => ) ? C(######'MEMCACHE_HOST'######) : ######'127.0.0.1'#######, ##########################################'連接埠' => C('MEMCACHE_PORT')? C('MEMCACHE_PORT'##) : 11211,
# # => C('DATA_CACHE_TIMEOUT')? C('DATA_CACHE_TIMEOUT') : false,
),
$選項
################################## ##### ->選項 = #######$選項#######; ##########
$this->選項['過期'#] = isset('過期'#] = isset( $選項['過期'])? $選項['過期'] : C('DATA_CACHE_TIME'
## $this->選項['前綴' ] = isset($選項[#'前綴'])? $選項['前綴'] : C('DATA_CACHE_PREFIX'
#) ; ##########$this->選項['長度'#] = isset( $選項['長度'])? $選項['長度'] : 0;
## $func # ###'執著的'######] ? 'pconnect' : '連接'; ## $this-> 處理程序 =
合適內存快取; ## $選項[
'逾時'#
$this->handler->$func#(((((##(((
》(#(##((##((##func) #$options['host'],
'port '
]) :-> ##$func(
['host'##],
#$options'port'],
$options' timeout']);
############# } ######################################################################################### # ################## ###/**### ##################### *讀取快取### ##################### * @access public### ############################################################################################################ ##### * @param string $name 快取變數名稱### ######* @return mixed
*/## */
## */## */## #
function get( $name
N('cache_read',1 ); ## $this##-> handler->get(
$this'prefix'##].
);
# }
## * 寫入快取
* @access public
################################################################################################################################ ## * @param string $name 快取變數名稱### ##################### * ############# * #為##
* @param integer $expire 有效時間(秒)
# * @return boolen
# */
# #> public #function set($name, $value
$expire# = null) {
'cache_write',1); ## if(##is_null(
#) ##$過期# $1 $this->選項['過期'];
} ##################################################################################################################################################################################### #
$名稱 = $這個->選項['前綴'].$name;
## if($this->處理程序- >set($name, $value, 0, $expire) ) {
# #if#$thisthis##(##$thisthis >選項['長度'
]>0) {# 記錄佇列隊列
# $1# #$名稱); ################真的; #
}
函數
rm(, $ttl
# = false) {## $name
$this ->選項['前綴'
$name;
##return $ttl === 假?
## $this##->處理程序->#刪除$this##->處理程序->
# ($name) :
## $this->處理程序->
刪除$name#, $ttl);
######### } ################## ########### ###########/**&#&*/###### ###### ######函數###### clear() { #########return $this##->handler->#flush #$this##->handler->#flush #$this
##->handler->();
}
}
## [php] 查看 純文字副本
##
################# # #######// +--------------------------------------- - ------------------------------###### ############# # ##########// | ###### #########################// +----------------- -------------------------------------------------- ---###### ###########################// | 版權所有(c) 2013- ###### ##########################//+-------- ---- ---------------------------------------------- ---- ---------###### ###########################// | 授權 (http://www.apache.org/licenses/LICENSE-2.0)###### #########
// +-------------------------------- --------------------------------------
// | Author: richievoe
# /**
## */
# //memcache物件
###############################C合適##### ###private###### #######$mem######; ########################################################################### # ###//SESSION有效時間###### ##################### ###private###### #####> ##$expire######; ###################### ###//外部呼叫的函數####### #### ######public function execute(){
## execute(){
session_set_save_handler( ,'打開'##),
## array(&$this,'關閉'),
array(&$this#,#'
), # 數組(&$this# # #,######'寫'#####),###
array(&$this,'destroy'),
array(&$this ,'gc'##)
);
## }#
//連接memcached與初始化一些資料
public function open($ path,$name){
$this ->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 close(){ ## close(){
return $this->mem->close();
}
#//讀取資料#
public function read( $id){
####$id = C('SESSION_PREFIX'#).#$ ID######;
= #$this-> mem- = #$this-> >get($id);
## return $data ? $data :'';
}
//存入資料
# public function write ( $id,$data){
###$id = C('SESSION_PREFIX'#).#$ ID######;
$this##->mem->set( #$id ,$data,0,$this##->過期); ## }
//研究資料
# public
函數 銷毀(##$id){ # #$id
# = C().$id; #
#return $this##->mem->deleteete ($id);
}
# //垃圾銷毀
public function gc(){
# # true;
# }
#}
}
?>
########相關推薦:###############PHP分散式追蹤心得分享############### PHP分散式及大量資料處理有關問題############php分散式架構#######
以上是詳談php分散式部署的詳細內容。更多資訊請關注PHP中文網其他相關文章!