首頁 >後端開發 >php教程 >詳談php分散式部署

詳談php分散式部署

小云云
小云云原創
2018-01-25 14:14:006862瀏覽

本文我們接著跟大家分享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


  1. #/* Memcache快取設定 */  

  2. #'MEMCACHE_HOST'         => #'192.168.202.20'

  3. #  修改資料快取為Memcache:

    #



    [php] view plain copy


    1. #'DATA_CACHE_TYPE'       => #'Memcache' ,  

    #  修改Session為Memcache:






    1. [php]

       view plain copy'SESSION_TYPE'

                => 
    'Memcache'


    ,  



    #  如下圖:


      因為雲端儲存各類別比較多,附件儲存到雲端儲存上,就不再贅述,參數各雲端儲存提供的sdk即可。經過以上修改,就可以將Web伺服器進行分散部署了。


      附件1:CacheMemcache.class.php


    ####################################################################### [php]### view plain copy############
    1. // +--- ------------------------------------------------- -----------------  

    2. ##/ / | ThinkPHP [我們能做,只要想就可以]

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

    4. // | 版權所有(c) 2006-2012 http://thinkphp.cn 保留所有權利。 / +------------------------------------------------ ----------------------  

    5. # #//| 已授權(http://www.apache.org/licenses/LICENSE-2.0)  

    6. / / +------------------------------------------------ ----------------------  

    7. # #//| 作者: liu21st   

    8. ##// +------- ------------------------------------------------- - --------------  

    9. ##

    10. defined('THINK_PATH'#) or #exit ();  

    11. #/** 

    12.  * Memcache快取驅動程式 

    13.  * @category   Extend 

    14.  * @package  Extend

    15. #'

      ## * @subpackage  Driver.Cache 

    16. ## * @author    liu21st   

    17.  */
    18.   

    19. class CacheMemcache extends

    20.  Cache {  
    21.  Cache {  

    22. #  

      ##########    ###/**###o################################################################### ##########     * 架構函數### #####################     * @param ########     * @參數###################     * @access public### ##################
    23. # __construct(
    24. $options=#array()) {  

    25. #        #if ( !extension_loaded('memcache'

    26. ) ) {  
    27.             throw_exception(L('_NOT_SUPPERT_'

    28. 硬硬體快取'

      );  

    29.         }  

    30.   #  

    31. #  
    32. #        $選項# = array_merge#(array## (  ##(array## (  

      #################"###################"chey##### ( ###################            ###'主機'######        => ) ? C(######'MEMCACHE_HOST'######) : ######'127.0.0.1'#######,  ##########################################
    33.             '連接埠'        =>  C('MEMCACHE_PORT')? C('MEMCACHE_PORT'##) : 11211,  

    34.       #   #     =>  C('DATA_CACHE_TIMEOUT')? C('DATA_CACHE_TIMEOUT') : false,  

    35. #       
    36. ##=>  false,  

              ),

      $選項
    37. #);  

    38. ################################## ##### ->選項      =   #######$選項#######;  ##########
    39.         $this->選項['過期'#] =  isset('過期'#] =  isset( $選項['過期'])?  $選項['過期']  :   C('DATA_CACHE_TIME'

    40. #) ;  
    41. ##        $this->選項['前綴' ] =  isset($選項[#'前綴'])?  $選項['前綴']  :   C('DATA_CACHE_PREFIX'

      #) ;          ##########
    42.         $this->選項['長度'#] =  isset( $選項['長度'])?  $選項['長度']  :   0;          

    43. ##        $func           #  ###'執著的'######] ? 'pconnect' : '連接';  ##        $this-> 處理程序      =   

    44. 合適內存快取;  ##        $選項[

      '逾時'
    45. ] = = =假?  

      #

    46.             $this->handler->$func#(((((##(((

    47. (
    48. 》(#(##((##((##func) #$options['host'], 

    49. $options
    50. ##[

      'port '

      ]) :  
    51.              
    52. $this

      -> ##$func(

    53. $options
    54. ['host'##], 

      #$options
    55. [

      'port'], 

      $options
    56. ##[
    57. ' timeout']);  

      #############    }  ######################################################################################### #  ##################    ###/**### #####################     *讀取快取### #####################     * @access public### ############################################################################################################ #####     * @param string $name 快取變數名稱### ######
    58.      * @return mixed 

    59.      */##     */

    60. ##     */##     */##    #  

          
    61. public
    62.  function get( $name

    63. ) {  
    64.         N('cache_read',1 );          ## $this##-> handler->get(

      $this
    65. ->options[

      'prefix'##].

    66. $name
    67. );  

    68. #    }  

    69.   

          
    70. /**
    71. ##     * 寫入快取
    72.  
    73.      * @access public
    74. ################################################################################################################################ ##     * @param string $name 快取變數名稱### #####################     * #############     * #為##
    75.      * @param integer $expire  有效時間(秒) 

    76. # * @return boolen 

    77. #     */  

    78. #  #>     public #function set($name $value

    79. $expire# = null) {  

    80. #        N(

      'cache_write',1);  ##        if(##is_null(

      #) ##$過期
    81. )) {  

      #            $1 $this->選項['過期'];  

    82.         }  ##################################################################################################################################################################################### #
    83.         $名稱   =   $這個->選項['前綴'].$name;  

    84. ##        if($this->處理程序- >set($name$value, 0, $expire) ) {  

    85. #            #if#$thisthis##(##$thisthis >選項['長度'

      ]>0) {  
    86. #            記錄佇列隊列  

    87. #               $1# #$名稱);  ################真的;  #

    88.           

    89.            

    90.     }  

    91.   

    92. ## ###########/**&#&*/######

       函數

      rm(
    93. $name

      $ttl

      # = false) {  
    94. ##        $name

    95.    =   
    96. $this ->選項['前綴'

    97. ].
    98. $name;  

      #
    99.         #return $ttl === 假?  

    100. ##            $this##->處理程序->#刪除$this##->處理程序->

    101. # ($name) :  

    102. ##            $this->處理程序->

      刪除
    103. (

      $name#, $ttl);  

      #########    }  ##################  ########### ###########/**&#&*/###### ###### ######函數###### clear() {  #########
    104.         return $this##->handler->#flush #$this##->handler->#flush #$this

      ##->handler->
    105. #flush

      ();  

    106.     }  

    }  


    ##附件2:SessionMemcache.class.php



    1. ## [php] 查看 純文字副本

    2. ##

    3. ################# # #######// +--------------------------------------- - ------------------------------######  ############# # ##########// | ######  #########################// +----------------- -------------------------------------------------- ---######  ###########################// | 版權所有(c) 2013- ######  ##########################//+-------- ---- ---------------------------------------------- ---- ---------######  ###########################// | 授權 (http://www.apache.org/licenses/LICENSE-2.0)######  #########
    4. // +-------------------------------- --------------------------------------  

    5. // | Author: richievoe #  

    6. #  

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

        

    8. #    /** 

    9.      * 自訂Memcache以保存session

       

    10. ##     */

        
    11. Class SessionMemcache{  
    12. #    //memcache物件

        ###############################C合適#####    ###private###### #######$mem######;  ########################################################################### #    ###//SESSION有效時間######  #####################    ###private###### #####> ##$expire######;  ######################    ###//外部呼叫的函數#######  #### ######
    13.     public function execute(){  

    14. ## execute(){  
    15. ## execute(){  

    16.         session_set_save_handler(          ,'打開'##),   

    17. ##            array(&$this,'關閉'),   

    18.             array(&$this#,#'

    19. ,
    20. ),   #            數組(&$this# # #,######'寫'#####),###

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

    22.             array(&$this ,'gc'##)  

    23.             );

      ##    }  
    24. #    
    25. //連接memcached與初始化一些資料
    26.    //連接memcached與初始化一些資料  

    27.     public function open($ path,$name){  

    28. ##        

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

    29.         $this->mem = new Memcache;  

    30. ##        
    31. return

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

    32. ##    }  
    33.     
    34. //關閉memcache服務器

        

    35.     
    36. public

       function close(){  ## close(){  

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

    38.     }  

    39.     #//讀取資料#  

    40.     public function read( $id){  

      ####
    41.         $id = C('SESSION_PREFIX'#).#$ ID######;  

    42. ##        
    43. $data

       = #$this-> mem- = #$this-> >get($id);  

    44. ##        return $data ? $data :'';  

    45.     }  

    46.     //存入資料  

    47. #    public function write ( $id,$data){  

      ###
    48.         $id = C('SESSION_PREFIX'#).#$ ID######;  

    49. ##        
    50. //$data = addslashes($data);

        

    51. #        
    52. return

       $this##->mem->set( #$id ,$data,0,$this##->過期);  ##    }  

    53.     //研究資料

    54.   
    55. #    public

    56. o
    57. 函數 銷毀(##$id){  #        #$id

      # = C(
    58. 'SESSION_PREFIX'

      ).$id;  #

    59.         #return $this##->mem->deleteete ($id);  

    60.     }  

    61. #    //垃圾銷毀  

    62.      public function gc(){  

    63.         #        # true;  

    64. #    }  
    65. #}  
    66. }  

      ?>  

    ########相關推薦:###############PHP分散式追蹤心得分享############### PHP分散式及大量資料處理有關問題############php分散式架構#######

以上是詳談php分散式部署的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn