搜索
首页后端开发php教程详谈php分布式部署

详谈php分布式部署

Jan 25, 2018 pm 02:14 PM
php分布式

本文我们接着和大家分享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_PORT'         => 11211,  


  修改数据缓存为Memcache:




[php] view plain copy


  1. 'DATA_CACHE_TYPE'       => 'Memcache',  

  修改Session为Memcache:





[php] view plain copy


  1. 'SESSION_TYPE'          => 'Memcache',  


  如下图所示:



  因为云存储各类比较多,附件存储到云存储上,就不再赘述,参数各云存储提供的sdk即可。经过以上修改,就可以将Web服务器进行分布式部署了。


  附件1:CacheMemcache.class.php



[php] view plain copy


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

  2. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]

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

  4. // | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.

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

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

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

  8. // | Author: liu21st   

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

  10.   

  11. defined('THINK_PATH'or exit();  

  12. /** 

  13.  * Memcache缓存驱动 

  14.  * @category   Extend 

  15.  * @package  Extend 

  16.  * @subpackage  Driver.Cache 

  17.  * @author    liu21st  

  18.  */  

  19. class CacheMemcache extends Cache {  

  20.   

  21.     /** 

  22.      * 架构函数 

  23.      * @param array $options 缓存参数 

  24.      * @access public 

  25.      */  

  26.     function __construct($options=array()) {  

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

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

  29.         }  

  30.   

  31.         $options = array_merge(array (  

  32.             'host'        =>  C('MEMCACHE_HOST') ? C('MEMCACHE_HOST') : '127.0.0.1',  

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

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

  35.             'persistent'  =>  false,  

  36.         ),$options);  

  37.   

  38.         $this->options      =   $options;  

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

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

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

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

  43.         $this->handler      =   new Memcache;  

  44.         $options['timeout'] === false ?  

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

  46.             $this->handler->$func($options['host'], $options['port'], $options['timeout']);  

  47.     }  

  48.   

  49.     /** 

  50.      * 读取缓存 

  51.      * @access public 

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

  53.      * @return mixed 

  54.      */  

  55.     public function get($name) {  

  56.         N('cache_read',1);  

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

  58.     }  

  59.   

  60.     /** 

  61.      * 写入缓存 

  62.      * @access public 

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

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

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

  66.      * @return boolen 

  67.      */  

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

  69.         N('cache_write',1);  

  70.         if(is_null($expire)) {  

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

  72.         }  

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

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

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

  76.                 // 记录缓存队列  

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

  78.             }  

  79.             return true;  

  80.         }  

  81.         return false;  

  82.     }  

  83.   

  84.     /** 

  85.      * 删除缓存 

  86.      * @access public 

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

  88.      * @return boolen 

  89.      */  

  90.     public function rm($name$ttl = false) {  

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

  92.         return $ttl === false ?  

  93.             $this->handler->delete($name) :  

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

  95.     }  

  96.   

  97.     /** 

  98.      * 清除缓存 

  99.      * @access public 

  100.      * @return boolen 

  101.      */  

  102.     public function clear() {  

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

  104.     }  

  105. }  

  附件2:SessionMemcache.class.php




[php] view plain copy


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

  2. // |

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

  4. // | Copyright (c) 2013-

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

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

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

  8. // | Author: richievoe   

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

  10.     /** 

  11.      * 自定义Memcache来保存session 

  12.      */  

  13. Class SessionMemcache{  

  14.     //memcache对象  

  15.     private $mem;  

  16.     //SESSION有效时间  

  17.     private $expire;  

  18.     //外部调用的函数  

  19.     public function execute(){  

  20.         session_set_save_handler(  

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

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

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

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

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

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

  27.             );  

  28.     }  

  29.     //连接memcached和初始化一些数据  

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

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

  32.         $this->mem = new Memcache;  

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

  34.     }  

  35.     //关闭memcache服务器  

  36.     public function close(){  

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

  38.     }  

  39.     //读取数据  

  40.     public function read($id){  

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

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

  43.         return $data ? $data :'';  

  44.     }  

  45.     //存入数据  

  46.     public function write($id,$data){  

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

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

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

  50.     }  

  51.     //销毁数据  

  52.     public function destroy($id){  

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

  54.         return $this->mem->delete($id);  

  55.     }  

  56.     //垃圾销毁  

  57.     public function gc(){  

  58.         return true;  

  59.     }  

  60. }  

  61. ?>  

相关推荐:

PHP分布式跟踪心得分享

PHP分布式及大量数据处理有关问题

php分布式架构

以上是详谈php分布式部署的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP中的PDO是什么?PHP中的PDO是什么?Apr 28, 2025 pm 04:51 PM

本文讨论了PHP数据对象(PDO),这是PHP中数据库访问的扩展名。它通过准备好的语句及其对MySQLI的好处,包括数据库抽象和更好的错误处理,强调了PDO在增强安全性方面的作用。

php中的memcache是​​什么?是否可以在几个PHP项目之间共享一个memcache的一个实例?php中的memcache是​​什么?是否可以在几个PHP项目之间共享一个memcache的一个实例?Apr 28, 2025 pm 04:47 PM

memcache和memcached是通过减少数据库负载加快Web应用程序的PHP缓存系统。可以在仔细的密钥管理的项目之间共享一个实例。

使用MySQL和PHP创建新数据库的步骤是什么?使用MySQL和PHP创建新数据库的步骤是什么?Apr 28, 2025 pm 04:44 PM

文章讨论了使用PHP创建和管理MySQL数据库的步骤,专注于连接,创建,常见错误和安全措施。

JavaScript是否与PHP相互作用?JavaScript是否与PHP相互作用?Apr 28, 2025 pm 04:43 PM

本文讨论了JavaScript和PHP如何通过HTTP请求间接相互作用,因为它们的环境不同。它涵盖了将数据从JavaScript发送到PHP的方法

PHP中的梨是什么?PHP中的梨是什么?Apr 28, 2025 pm 04:38 PM

梨是可重复使用组件的PHP框架,通过包装管理,编码标准和社区支持增强开发。

PHP的用途是什么?PHP的用途是什么?Apr 28, 2025 pm 04:37 PM

PHP是一种多功能的脚本语言,主要用于Web开发,创建动态页面,还可以用于命令行脚本,桌面应用程序和API开发。

PHP的旧名称是什么?PHP的旧名称是什么?Apr 28, 2025 pm 04:36 PM

文章讨论了PHP从1995年的“个人主页工具”到1998年的“ PHP:超文本预处理器”的演变,这反映了其超越个人网站的扩展使用。

如何防止会话固定攻击?如何防止会话固定攻击?Apr 28, 2025 am 12:25 AM

防止会话固定攻击的有效方法包括:1.在用户登录后重新生成会话ID;2.使用安全的会话ID生成算法;3.实施会话超时机制;4.使用HTTPS加密会话数据,这些措施能确保应用在面对会话固定攻击时坚不可摧。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中