23 123
发新话题
打印

[总结] 第7章 Zend开发环境

本主题由 PHPChina 于 2008-3-7 15:41 设置高亮

第7章 Zend开发环境

7.1 Zend公司简介
Zend是一家PHP公司,成立于1999年,由Zeev SuraskiAndi Gutma两位开源PHP的缔造者和建筑师共同创建,因此有了Zend名称的由来。由于他们的国际技术的权威性,Zend公司和他的创建者在PHP以及开源团体中持续处于领导的核心地位,对于PHP的迅猛发展起到了强力推动作用。Zend公司是一个PHP应用的企业和个人都可以寻求到专业技术解决方案的PHP领先公司。
Zend公司推动PHP进入企业级应用。Zend公司针对PHP的应用陆续发布了至关重要的PHP网络应用平台产品和服务。Zend Engine安装在1500万网站上。目前全世界范围内,使用Zend有关Web应用产品的客户超过8000家。
Zend公司的投资商是包括Azure Capital PartnersIndex VenturesPlatinumVenture Capita在内的非常有实力的投资公司,最重要的是IT行业领先的SAPIntel也是Zend公司的投资商。目前Zend公司得到了来自IBMOracleSun公司的大力支持,和IBMOracle达成了战略合作伙伴,共同推动PHP的发展。
Zend公司的产品在2004年有了新的变化,将提供的服务分为三部分:
1PHP products商业产品;
2Professional Services专业服务;
3PHP Training and Certification培训和认证。
商业产品包括开发类、安全类和应用类。另外广泛应用的优化器Optimizer属于免费产品,还有针对不同平台的中间产品,如WinEnablerZend Optimizer for IBM AIX等。开发类产品,包括Studio的不同版本(标准版,专业版和企业版);安全类包括编译器Encoder和版本的控制工具Safeguard;应用类包含Performance Suit在内的监控和性能提高应用平台Zend Platform
专业服务:Zend公司提供全方位的PHP商业关键应用的开发和调配,评估你的需求,确保应用的顺利完成。具体内容包括应用设计和评估、代码评估、迁移版本、扩张应用等。
培训和认证:通过系统的培训提高PHP技术,国际认可的Zend PHP 证书有助于提高自身价值。具体课程包括PHP A-ZendA-Zend PHP系统培训课程)、PHP EssentialsPHP基础培训课程)、Professional PHP Development(专业PHP开发课程)、PHP Certification TrainingPHP认证培训课程)。
目前Zend在中国已经建立Zend技术支持中心,其在国内的具体职责如下:
1)提供ZendPHP的相关信息。
2)对国内的PHP用户提供全方位技术支持。
3Zend公司全线产品的技术支持和当地化。
4)提供PHP的培训和教育。
5)建设PHP爱好者和使用者协会。
6)提供专业的技术交流平台。
访问Zend技术支持中心的网站是www.phpchina.com
Zend产品下载网址为http//downloads.phpchina.com/zend/

7.2 Zend Studio集成开发环境
       Zend Studio是专业开发人员在使用PHP整个开发周期中唯一的集成开发环境(ZDE),它包括了PHP所有必须的开发部件。通过一整套编辑、调试、分析、优化和数据库工具,Zend Studio加速开发周期,并简化复杂的应用方案。
Zend Studio的特点包括:
1)快速代码开发与配置本地和远程调试器;
2)数据库连通性&SQL工具团队合作环境;
3)完全PHP 4/PHP 5切换PHPDocs/PHP文档处理程序支持;
4SFTPFTP以至SSH的安全连接100个以上代码摘录;
550个以上样品数据库应用程序与Zend Platform™组合。

7.2.1 编辑文件
这个部分讲述如何在Zend Studio中编辑一个文件。
如果想要编辑一个文件,你所需要做的就是打开Zend Studio客户端并开始编写代码。而且,Studio客户端还可以轻松实现许多高级的编辑功能。下面的例子使用了Zend Studio客户端的代码补全特性——Studio客户端的一个节省时间的编辑特性。其他主要的编辑特性还包括书签、实时错误提示、括号提示、模板等。
总体来说,代码补全自动显示出已输入代码在PHP或者HTML中相关的补全选项。
这里有一个例子:
1)在主工具栏中单击打开新文件。一个新的空白文档就在编辑窗口中打开了。
2)在编辑窗口中,输入“<”字符。代码补全窗口出现了,并且显示一个HTML标记的列表。
3)从列表中选择html并且按回车键。HTML标签就出现在编辑窗口中了。
4)输入“<?php”,并且按回车键。
5)按Ctrl+space键然后输入“pri”。PHP代码补全出现了下一个匹配pri的列表。
6)从代码补全窗口选择print_r函数并按回车键。print_r出现在编辑行中,并且代码补全窗口重新显示为函数的语法提示。
7)输入“hello”并且按回车键。

7.2.2 使用项目功能
这个部分简述创建一个项目的过程。
1.使用项目功能的好处在用户打开一个项目时,Zend Studio客户端自动处理所有项目相关的文件并且增加类和函数名到代码补全列表。另外,还可以查找包含的丢失文件。
2.如何创建一个项目如果想定义一个带有独立特性的工作环境,可以创建一个新的项目。这些特性如调试配置、书签和监视点等。
注意:项目定义文件的文件扩展名标志为*.zpj

创建一个项目的操作如下:
1)从主菜单中,选择项目新项目。出现新项目对话框。
2)输入新项目的名字。更新相对应的路径。在这一步,你可以跳过所有接下来的对话框并单击完成。单击继续可以定义新项目专有的属性。
3)为了增加文件或者路径到新项目中,单击项目专区的“增加路径”并浏览将要包含到项目中的文件或者路径。
4)单击“继续”按钮继续编辑,或者单击“完成”按钮跳出。
5)接下来的窗口显示的是在用户化的调试选项窗口中定义的默认设置。如果你想在新的项目中应用专有的调试设置,取消用户系统默认的选项框的勾选并修改设置。
6)选择调试模式。对于一个远程调试来说,你可以更改服务器URL和端口,而且还可以指定临时输出文件的存放目录。
注意:这些设置可以在项目属性对话框中找到。在任何时候想看一个项目的调试设置时,打开项目并进入项目项目属性。
7)单击“完成”按钮即可。

7.2.3 Zend Studio代码补全
代码补全的两种代码类型:PHPHTML。代码补全范围包括:类、函数、变量、常量、关键字、HTML标记、HTML属性、HTML属性的值,等等。
PHP代码的补全还包括:嵌套函数的代码补全、补全函数的值(使用PHPDoc支持来实现)
代码补全提示:
1)增加@var标记来提示类定义;
2)通过一个注释,可以把一个变量赋值为一个实际的类。

模版的作用是通过缩写插入代码框架或者代码段。模版功能支持的代码类型是PHPPHPDocHTMLJavaScript or CSS。通过模板功能,可以方便地在团队中共享代码。
1.代码片段代码片段是指可以重复使用的一些代码片段。通过使用这些代码片段,我们可以推动开发流程的速度。我们可以查看和使用已经保存的代码片段,可以创建和更新自己的代码片段,并从Zend的在线数据库中更新代码片段。
2.代码导航——书签在编辑的文件里面使用书签来标记代码,这个功能可以让你很快地在许多脚本文件中找到代码进行编辑。
3.代码导航——转到源 转到源具有过滤和自动更新、快速、方便和直观、提高切换效率,如图7-1所示。

7-1 Go to Resource”对话框

7.2.4 StudioPHP的调试
ZDE的调试方式分为内部调试和服务器调试。内部调试是指使用ZDE自带的本地PHP4或者PHP5来进行调试。服务器调试使用的是远程的服务器来运行位于服务器上面的PHP脚本。内部调试是开发工程师在编写代码的时候,在上传之前的调试。服务器调试主要是以调试项目为主。
1.内部调试内部调试使用的是ZDE自带的PHP版本。在最新的ZendStudio5.1.0里面分别为PHP 4.4.1PHP5.1.1
调试的时候用到的一系列工具如下。
1)调试信息窗口:显示调试过程和语法监测等信息。
2)变量、观察窗口:查看相关变量、函数、类和表达式的信息。
3)堆栈窗口:监控堆栈的调用和参数的传递。
4)调试正在调用的或者是已经调用的函数:使用引入 、引出 、断点等进行调试。
5)控制调试的节奏:使用完全 或者逐行调试 ,并且用断点和执行到光标处 进行配合。
6查看实时的输出结果:查看Text或者浏览器输出两种调试结果。
7)查看缓冲区:如果代码里面有缓冲区应用,可以直接查看缓冲区的代码。
2.服务器调试服务器调试如图7-2所示。

7-2
服务器调试

服务器调试(远程)可以让开发人员调试上传的PHP代码,从而进行项目级的调试。也就是说远程服务器上面的ZDE Server将为你实现调试的各种功能(如果服务器已经有ZP,不用再另行安装ZDEServer)。
此外服务器调试的时候,也可以使用本地副本(Tools | Debug | Debug URL 里面选择可以使用本地副本就可以了)。这种情况下,ZDE Server在调试被调用的PHP文件的时候,查找的顺序将是:ZDE打开的文件ZDE打开的项目的文件服务器上的文件。
使用服务器进行调试也较Debug URL,但是这与传统的IE调试有着很大的不同。它具备了以下几个特点:
1ZDE内嵌的浏览器访问PHP代码,方便与ZDE Server的互通。
2调试交互数据的表单、脚本,如POST等。
3调试返回的信息可以分别体现在内嵌的浏览器和调试输出窗口。
4)自动加载调用的PHP脚本,并且在该脚本的第一行处停止,等待下一步指示。
5)调试的过程中同样可以查看参数、堆栈、监视点(用户指定的特定参数)等。

7.2.5 断点跟踪
可以在代码的任意行设置断点。设置断点的目的是,让PHP脚本运行到该断点的时候自动停止运行,以便查看变量、缓冲等数据。可以通过鼠标右键、F9快捷键来设置断点。

7.2.6 堆栈与输出缓冲
PHP的运行的堆栈基本上是指每一个PHP脚本,堆栈在调试的时候显示出的具体的信息需要配合断点调试或者逐行调试才能看到。信息显示的是运行的PHP文件、停止的行数、运行的函数等信息。
注意:如果在一个PHP文件中有引入别的PHP文件,那么堆栈的个数将等于该PHP文件本身加上所有引入的别的PHP文件的个数。

7.2.7 跳入与跳出
跳入与跳出主要是针对堆栈来说,在断点或者逐行的调试中,我们可以灵活地跳入或者跳出某个堆栈来看某个堆栈的变量和运行情况。

7.2.8 Studio的版本控制
Studio集成了CVSSubversion等版本管理工具的客户端,可以方便地进行团队开发。



7.3 Zend Optimizer优化器
Zend优化器——优化你的PHP代码。
由于旧的版本和PHP 4.3.10兼容性有问题,强烈推荐对Zend Performance SuiteZend AcceleratorZend Studio ServerZend WinEnabler使用者,更新至最新版本同样推荐将PHP升级到PHP 4.4.6 or PHP 5.2.1。运行编译过的代码文件和提高脚本程序的性能——免费。
优化器在提高PHP的运行速度的同时,可以完全免费的运行被Zend Encoder and Zend SafeGuard Suite编译过的代码。
利益:确保使用者安全运行被Zend Encoder编译过的文件,提高运行性能40%
对于企业级的性能提高,如果希望服务器的吞吐量提高25倍,请试用Zend Performance SuiteZend Performance Suite的性能提高科技是特别帮助PHP基础的大流量的网络,用于提高反应速度和程序处理的效率。对于PHP versions低于4.0.4,请使用Zend Optimizer 1.2.0.,下载前一个版本。
安装:需要指定系统Web服务器的所在目录和php.ini配置文件的目录。
Zend Optimizer优化器的系统需求如下:
1)支持的操作系统、平台和操作系统版本:
Linux x86
Linux x86-64
Linux Power
Solaris Sparc 8, 9, 10
Solaris x86 9, 10
FreeBSD x86 5.x, 6.x
Windows x86 2000, XP, 2003
OS X Mac Power
AIX pSeries 5
2)支持的Web服务器:
Apache 1.3.x
Apache 2.0.x (Prefork mode only)
Apache 2.2.x (Prefork mode only)
IIS 5, 6
3)支持的PHP版本:
4.2.x up to 4.4.x
5.0.x, 5.1.x, 5.2.x
4OS X Mac下使用的PHP版本:
4.3.x up through 5.2.x



7.4 Zend Platform集成管理平台

7.4.1概述
Zend Platform 是唯一的一个可以让你的应用持续稳定运行的PHP生产环境。
在为IT个人和企业提供企业级的高稳定性的应用的前提下,Zend Platform可以提供高性能和扩展性等特点,并让用户在你的Web上以最好的响应速度愉快地浏览。
Zend Platform 也是唯一地能够保证稳定服务的平台。它通过PHP监控和即时的错误处理系统,来代替传统的错误定位方式,让开发和维护工作轻松而愉快。
你已经花了很多时间和金钱来开发最新的PHP应用。现在就让它稳定地高效地运行起来。
1Zend Platform对于企业的价值现在是让你的应用实现稳定、高扩展性、快速响应的时候了。Zend PlatformWeb和数据库服务器根据负载和应用复杂程度的提高持续稳定运行。请加入我们众多的客户当中,他们来自于众多的企业,并从Zend Platform上获得空前的利益。
1)高扩展性:在降低生产成本的同时,响应更多的用户请求。
2)强有力的优势:确保PHP应用得到最高的性能。
3)更高的效率:无缝的运行和配置管理。
4)令用户满意的浏览:提高用户的浏览效果,令用户满意并持续对网站的浏览。
2.强大的管理和错误处理方案Zend Platform能精确地找出瓶颈问题和运行时的错误,及时发现脚本或者函数执行缓慢,发现空白或者不完整的页面,同时还能随时注意系统的负载和所有类型的PHP和数据库的错误。所有这些都可以用鼠标轻松地进行配置。另外,Zend Platform的新的Session Clustering的模块将极大地提高你的PHP应用的扩展性。
3Zend Platform 具备的特点1)中心控制台:显示PHP运行环境的各个方面。
2)综合的应用:杰出的运行概要分析和性能监控。
3)跟踪调试:
重现错误并保存完整的错误文档。
具体的警报信息自动发送至相关的IT人员。
在线调试&实时的错误修正。通过Zend Studio集成环境实现。
4)性能提高:
运行中实时的代码优化。
代码加速和预编译。
完善的缓存解决方案。
文件下载优化和加速。
PHP4PHP5完善的支持。
5)独特的功能:
PHP Session Clustering
PHP Intelligence
PHP Performance Management
PHP Configuration Control
PHP/Java Integration Bridge
6Session 跨服务器:
性能提高(up to x10)。
加锁机制保证数据的完整性。
与原来的PHP脚本无缝连接。
独立于负载均衡服务器。
线性地升级性、方便地添加服务器。
7)即装即用的解决方案:
安装&配置方便、简单。
Web服务器上面以PHP的模块安装。
较低的生产环境配置要求。
无须重新编译PHPApache
无须更改现有代码。

7.4.2  快速使用说明
1.安装注意事项ZendPlatform的安装文件解压后,运行./install就可以打开安装界面。根据安装界面的提示进行操作就可以了。在此过程中请注意以下事项:
1)请确认服务器的内存在正常运转的情况下,有足够的剩余空间(比如100M)。
2)服务器使用的php.ini的具体路径。以phpinfo()的输出为准。
3Apache的执行路径,便于ZendPlatform重起Apache
4)选择中央控制还是节点的ZendPlatform模式。如果选择节点,需要把节点注册到中央控制中心。
错误处理机制。如果安装过程中出现错误,请运行<安装目录>/Zend/bin/support_tool.sh。选择第三项“Collect information and send it by E-mail”,在“Recipient's E-mail”填入技术支持工程师的E-mail地址。系统将会自动收集相关信息并发送给技术支持工程师以便分析原因。
2.关键配置说明安装了ZendPlatform以后,为了让ZendPlatform稳定地发挥其性能。需要对以下几个关键设置做配置,关键设置集中在ZendPlatform的性能管理上。进入Performaceàsettings
Code Acceleration
Accelerator Memory:设置在3264之间,如果服务器需要可以适当调大。但是总体来说不需过大。
Dynamic Content Caching
Maximum Cache Size一般情况下设置1G500M就已经足够,但是请不要保留默认的“Unlimited”设置。
Minimum Free Diskspace:表示最小空闲空间容量,所以请确定其值是否小于现在硬盘空闲空间的大小。
3.重要功能位置说明如果您是第一次使用ZendPlatform,那么以下几个功能将会是需要的。因此,我们列出了这些选项的路径,如表7-1所示。
7-1
项目路径及说明



   


   


附加说明


用户管理Zend CentralàUser Management添加用户前先添加用户组
服务器配置克隆Zend CentralàClone Wizard在服务器之间进行配置的克隆
配置警报规则PHP IntelligenceàConfigure Alert Rules
配置监控的强度
配置性能管理PerformanceàSettings4个组件分别做管理
Cache文件PerformanceàFile View对文件做cache设置


7.4.3  Zend Platform实现Session跨服务器
1.背景
因特网或者万维网的核心是HTTP协议(超文本传输协议)。同时,因为HTTP协议的无界性,网站应用无法将浏览器访问与不同的服务器连接起来。从本质上说,这意味着用户从一个业务进入到另一个业务时,新的服务器有可能无法得到该用户的信息。
为了解决这个问题,一个新的概念“Cookies”被引入了。所谓的“Cookies”指的是一个小型数据结构,这个存放在用户本地的数据是被用来储存用户的信息。当该用户访问一个网站的时候,网站的服务器从用户本地得到用户数据后经过处理再把结果返回给用户。所以,给用户的感觉是网站似乎记住了该用户的信 息。同时,用户可以方便地在登录该网站时使用原先的设置,甚至不需要输入密码进行登录。“Cookies”使用最多的领域是记录用户的相关配置信息或者是在一个在线商店所采购的采购记录。
然而,“Cookies”数据保存在用户本地的特点容易造成两个方面的负面效果。第一是过长的“Cookies”数据的保存与传输都将是一个不小的资源消耗。第二是对于一些重要的数据,保存在用户本地容易造成数据错误,从而给用户的访问带来负面影响。为此,基于“Cookies”的HTTP Session概念产生了。代替传统的把所有的信息存储在用户本地的做法,Session 架构把用户的信息储存在服务器端,而在用户端只保存了区分布不同用户信息的唯一的“Session ID”。
PHP是通过内嵌的扩展来实现Session应用的,并且该扩展是基于地层的架构。PHPSession的支持允许网站实现大量的注册和访问量。
可是,当要在一个服务器集群实现PHP Session的应用时,问题变得复杂起来。服务器集群环境如图7-3所示。
经典的多服务器集群包含了一组服务器,在每台服务器上面加载相同的PHP应用。同时,服务器集群的出口由一个下载均衡服务器来实现,下载均衡管理器在服务器之间分配流量保证各个服务器的负载是均衡的。这种应用使得网站应用突破了单台服务器的传统模式,而由服务器集群来承载同一个PHP应用。很明显,这种集群服务器的应用提高了PHP业务的性能并减低了终端用户的访问时间。

7-3
服务器集群环境

由于HTTP协议的不确定性,同一个用户的不同HTTP请求很有可能被发送到不同的服务器。所以,将会造成用户的Session id无法及时获取正确的用户信息的问题,并最终导致用户使用上的不方便。

2Session 集群化管理
Zend之前的一些解决Session不能跨服务器的方案如下。
1)负载均衡Session方案
通过负载均衡服务器把特定的HTTP请求指定到相同的服务器。存在着一些不足:

SessionID
与服务器的对应很难成功地保持。在没有HTTP协议校验的前提下,HTTP协议很容易丢失目标。而且,因为负载均衡的性能问题使用HTTP协议进行校验是不稳定的。
如果在负载均衡服务器上面启用Session定向,将不利于负载均衡服务器本身的运行特性。尤其是在使用了流行的NAT技术后,影响更加明显。
为了达到SessionID与服务器的对应目的,负载均衡将需要花费相当昂贵的系统消耗来实现。
当负载均衡服务器为了实现Session功能的时候,它的负载将会急速上升,并逐渐地成为服务器集群升级的瓶颈。在集群服务器上添加服务器将会因为负载均衡的瓶颈问题而变得困难。
2)通过NFS系统来共享Session的方案
因为负载均衡实现Session共享的局限性,有人开始尝试用NFS来共享。通过集群中的NFS文件服务器来实现,从而来实现集群里的服务器的 Session应用。甚至有人觉得通过负载均衡服务器来实现Session共享会变得没有必要,而且可以使得网络的硬件投入得到减少,DNS轮询都能够满足Session的应用。但是这种方法同样存在着一些局限性:
数据完整性:NFS的文件加锁机制在许多场合下是不合适的。这种情况有可能导致Session的数据很容易出错。
速度缓慢:从NFS文件系统提取Session数据远远比本地提取耗时,同时网络的架构也将影响数据的传输速度。
将所有的数据都存储在一个服务器上意味着这是一个系统故障点:如果NFS服务器出现了故障,整个PHP应用系统将无法工作。为此就必须为NFS服务器配置更多的设备和更完善的电源管理。但是,这也是一个很大的资金投入,同时,他还是没有从根本上解决单一故障点的问题。因为NFS的网络接口还是一个。
系统升级:把系统所有的数据都存放在一个中心节点,伴随着的一个问题是系统的升级变得困难,而中心点就是系统升级的一个瓶颈。所以,往集群里面增加服务器所带来的效益将因为这个瓶颈问题而被降低。
安全性:NFS一直以来都被认为是一个安全性比较差的协议。许多专业的IT公司也因此放弃了NFS网络文件系统。
持续的硬件投入。
3)采用数据库来存放Session信息

第三种解决Session不能跨服务器的方法是把共享的Session放在一台相应的数据库服务器中。这种方法也有效地解决了NFS文件系统方案带来的数据完整性和有效性等问题。但是这个方案同样地存在着某些不足:
速度:相对本地存储来说,数据库服务器将需要在数据库处理上面占用整个PHP应用平台的时间。
故障点:数据库服务器还是存在着单一故障点的问题。
系统升级:使用数据库来存储Session这个方案同样存在着升级困难的问题。而这个问题在考虑数据库服务器的处理能力和负载的时候会显得尤为突出。
目前,通用的解决方案并不能满足PHP集群化应用发展的需求。总体来说,有以下几个方案的困难需要解决。
1)系统升级的瓶颈问题:目前已有的解决方案总是把问题集中在一个单一的中心节点上面。为此,限制了其方案的处理能力,为集群应用的发展造成了困难。
2)性能:目前已有的解决方案往往需要过度牺牲中心节点的系统资源,所以中心节点的硬件投入比较大。
3)故障点:目前已有的解决方案都需要一个中心节点,为此整个系统存在着单一故障点的问题。这也意味着系统在运行过程中存在着较大的风险。

3Zend的解决方案
Zend公司是应许多客户要求的情况下,开始Session clustering 模块的开发的。许多客户一直被实现Session共享而带来的系统消耗等问题而困扰。作为PHP发展的主要推动者,Zend公司强烈意识到这个问题的严重性。客户反映的问题主要是集中在Session共享的安全性和多余资源投入。在ZendSession共享的解决方案出现之前,客户往往要搭建复杂和昂贵的框架添加数据库服务器等硬件来实现Session共享。但是这样的框架还经常无法提供稳定、可靠的Session跨服务器的解决方案。而且,这种复杂的框架还经常给商业应用的稳定性带来错误和潜在的危险。
Zend新的Session clustering的模块(Zend Platform的部件之一)就是为提供一个综合的Session跨服务器的解决方而开发的。并在这个方案中,有效地解决了上述几个解决方案存在的问题。更为重要的,没有为现有客户增加成本。
Zend Session clustering的解决方案中,Sessions“居住”在它第一次被生成的服务器上。同时,这些Session可以别同一个集群服务器所共享。这意味着Zend的解决方案从根本上解决了Session不能跨服务器的问题,并提供了较高的性能。同时,它的系统升级特性也可以让客户能有效地使用现有的系统资源,并简便、迅速地升级。
如图7-4所示展示了Session集群管理的几大部件:
1Session的存储:可以选择存储在内存或者是存储在硬盘并在内存进行缓存。
2SCD守护进程:Session clustering 守护进程,把Session信息从Session被存储的地方提取出来提交给PHP engine,或是从集群里别的服务器上提取并提交给PHP engine
3mod_cluster PHP扩展:是一个PHPSession处理负责与SCD守护进程的通信。

7-4
SC
架构

ZendSession clustering模块使用了强大的加锁和数据完整性机制来实现Session数据的安全性。在使用Session clustering时,可以随时地切换两种不同的Session存储模式:硬盘或只在内存。这种存储方式也提供了错误恢复的功能,因为如果发生了不可预测的故障时,能够及时恢复Session数据。
ZendSession clustering 模块对现有的PHP的兼容性很强,同时不影响其他扩展的正常使用,也不需要修改任何代码。Zend PlatformSession clustering的解决方案就是集成了一个PHP的扩展。同时,在PHP.ini里面也可以选择是用现有的解决方案还是Session clustering式。
ZendSession clustering模块从技术上来说,比现有的几个解决方案都更加成熟,也是现今唯一的能迅速实现系统升级的解决方案。Session clustering用较低的成本来实现PHP的集群应用,并可以给客户带来无法比拟的性能、稳定性和数据完整性。
ZendSession clustering的解决方案也是目前唯一的一个能够集成到PHP的解决方案。因为实现Session clustering的设计与代码编写都是在PHP的架构下实现的。
下面列出的是Session clustering与其他方案的比较:
1)线性系统升级:在系统架构中不再存在瓶颈问题。新加入的服务器能有效地发挥出应有的性能效益。同时,Session clustering 也不会给现有的网络架构和设备增加额外的负担。
2)速度优势:经过压力测试,Session clustering 模块是现有的Session跨服务器解决方案的4~6倍的速度。
3)无故障点:如果因为不可预测的原因,有一台服务器停止服务了,损失的也只是那一台服务器的Session数据,而不是整个系统。损失的数据可以迅速在其他的服务器上重新建立。
4)安全性:Session clustering’s内在的数据完整性和加锁机制可以实现强大的Session应用。并允许高用户负载下的商业应用。
5)错误矫正:Session clustering可以选择把Session数据存储在硬盘当中。从而可以从系统或者内存的出错中恢复过来。
6Session clustering试你的资金投入均匀分布在服务器机群中:Session clustering可以与任何的负载均衡技术环境运行(包括DNS轮询)。
7强大的兼容性:ZendSession clustering解决方案提供了强大的集成特性,可以兼容现有的代码和PHP应用。现有的PHP项目可以直接移植到Session clustering解决方案当中应用。

7.4.4 Zend Platform 做缓存处理
作为ZendPlatform中性能管理的强大组件,动态内容缓存能为大幅度地提高网站的性能。同时,为了更好地让这个组件发挥它的强大作用,在对文件做Cache的时候,需要注意以下几个方面:
1Cache的配置。
2)如何对PHP文件做Cache
3PHP文件的Cache条件。
4ZendPlatform API
1Cache的配置如图7-5所示列出的是动态缓存的配置选项。这里需要注意的是Maximum Cache Size配置选项,默认的设置是“unlimited”,这里建议改为一个固定值,如图7-5中设定的是1G。同时对“Minimum Free Diskspace”的设置是表示当磁盘空闲空间少于设定值时,不再进行Cache操作,这个设置需要根据磁盘的具体应用而定。

7-5
动态缓存的配置选项

图中最重要的设置是“Default Dynamic Caching Conditions”,这个设置表示对一个文件做cache的时候,默认的Cache设置。具体的设置在下图7-6中表示。

7-6
cache
条件的设置界面

7-6中列出了对PHP文件做Cache的时候,Cache的条件。包含了数据传输方式和参数值及Cache的条件,详细设置在PHP文件的Cache条件中说明。
2.如何对PHP文件做CacheCache做了配置之后,如何对文件进行Cache呢,或者在哪里对文件做Cache呢?在Performance功能里的File View组件可以实现此项功能。“File View”选项,列出了服务器各个域名的发布目录下的所有文件。在这里,我们可以对文件进行Cache。默认的文件状态是加速状态。单击文件名前面的选项框,选中后单击列表顶部的“Cache”按钮就可以完成对一个文件的Cache。当然,可以对多个文件和文件目录做整体Cache。只需要注意文件是否满足Cache的默认设置要求。如图7-7所示表示的是“File View”界面。

7-7 File View”界面
3PHP文件的Cache条件作为一门动态的Web应用语言,PHP具备了许多种数据传递方式。例如,GETCOOKIESession等都是数据交互的方式。当一个文件通过ZendPlatformGUI界面被Cache的时候,它的执行结果将会被保存在指定的缓存区,如果第二个访问该文件的请求到达时,ZendPlatform将根据Cache条件进行判断,看时候需要重新执行文件。如果根据Cache条件被缓存的文件已经达到访问的要求,ZendPlatform将直接把缓存区中该文件的执行结果返回给用户。所以Cache的条件在Cache处理的过程中,起到了至关重要的作用。
那么如何对不同的PHP文件进行Cache的条件设置呢?在前面介绍的“File View”选项中单击文件名将弹出Cache条件的设置界面,如图7-8所示。
图中列出了对PHP文件Cache的时候,设置的条件选项。每一行的第一格表示数据传递的类型,第二格填入控制的变量名,第三格表示状态控制。下面就状态控制的选项进行说明,如表7-2所示。
7-2
状态控制选项说明


   


   


   


None
当缓存中没有相应数据版本的时候,重新执行文件
Except
除了指定的变量其他的变量变化时,重新执行文件
Exist
当缓存中有相应的变量存在,重新执行文件
Not Exist
当缓存中没有相应的变量存在,重新执行文件
Equal
当缓存中有相应的变量存在并等于某值时,重新执行文件
Not Equal
当缓存中有相应的变量存在并不等于某值时,重新执行文件

除了特殊的应用以外,在一般情况下建议使用默认的“None”设置。下面以COOKIE为例,介绍对PHP文件做Cache的条件控制,如图7-8所示。

7-8
Cache
的条件控制

图中列出了两个Cache的条件,第一个是AllGET选项,表示当访问请求包含的变量包含新的值时重新执行文件,并保存到缓存区。第二个是COOKIE选项,图7-8举例的是以“username”这个变量为Cache条件,当Cache中的COOKIE中的“username”变量出现新的值的时候,重新执行文件,并保存到缓存区。
4ZendPlatform APIZendPlatformGUI界面为用户提供的是“out-of-the-box”的功能,属于即装即用的功能,不需要对程序本身进行修改。同时,为了最大限度地发挥PHP的性能,ZendPlatform还提供了一系列API编程接口。该API接口把Cache的范围缩小到单个函数,以代替整个文件的输出。ZendPlatfromAPI是直接内嵌在PHP代码里面的,可以实现函数输出值或数据库访问值的缓存和缓存控制。最常见的ZendPlatformAPI是数据缓存(Data Caching),使用数据缓存最大的应用是社区、论坛系统。
Data Caching数据缓存)获取的是PHP或者用户定义的函数的执行结果,并以字符串的形式进行缓存。通过使用serializeunserialize这两个函数还可以对数列和对象进行缓存。对于直接产生文件输出的函数,我们不建议对它进行缓存,因为如果它被缓存了将不会再被执行,从而导致文件没有输出。数据缓存中使用的函数包括output_cache_fetchoutput_cache_putoutput_cache_get
为了更好地应用Zend提供的API函数,这里提供了5条建议:
1)产生输出的循环,常见的产生内容的循环有<select>菜单中的选项,或者是数据库重新提取的网站新闻列表。
2)通常情况下,数据库的访问占用了绝大部分的时间。可以使用数据缓存方式实现数据库访问的缓存。但是这里要注意的是,数据库访问的返回结果只是数据地址,而并不是地址本身,所以在缓冲之前,需要对数据库的返回结果进行转换变成真实数据的处理。
3)可以使用缓存段里面的ID里的变量来建立不同的代码执行的不同数据。例如,不同参数经过函数执行后返回的不同执行结果。
4)给不同的函数定义不同的cache周期。
5)可以实现不同代码之间,或者不同用户之间的文档或数据共享,在很多情况下,这个功能可以代替include文件。
举例说明数据缓存的使用。下面是一段PHP的代码,实现select菜单:
复制PHP内容到剪贴板
PHP代码:

<?php
  $forums 
listForums();[/size][/font]
[
font=宋体][size=2]put[/size][/font]
[
font=宋体][size=2]// Generate a <select> tag from $forums[/size][/font]
[font=宋体][size=2]foreach ($forums as $forum)
  {
echo 
"...";
  }
?>


使用ZendPlatformAPI可以将此代码修改为:
复制PHP内容到剪贴板
PHP代码:

<?php
  $forums 
unserialize(output_cache_fetch("ForumsList""serialize(listForums())"600));
?>


如果在缓存中有“ForumsList”的数据,将直接从缓存中提取,从而绕过了执行程序并从数据库提取的环节。



7.5 Zend Guard安全卫士
1Zend Guard概述Zend Guard可以实现对PHP应用的脚本进行加密保护和对PHP应用的产品进行商业许可证管理。
Zend Guard可以为许多软件生产商和IT服务提供商提供安全的完善的加密和安全的产品发布系统。可以轻松实现产品发布的管理。
Zend Guard由两个关键的组件组成:Zend Guard’s encoderZend Guard’s license manager,如图7-9所示。

7-9
2.产品特点1PHP应用的脚本进行加密保护和对PHP应用的产品进行商业许可证管理。
2)增加IP的使用限制(可以防护复制应用)。这样可以防止PHP脚本被配置在其他的服务器而运行。
3)可以为IT服务提供商提供解决方案。这样,他们的代码就不会被轻易地修改,以便他们进行技术支持工作。
4)可以让软件发布商业的PHP产品进行灵活多样的许可证管理。
5)多样的许可证管理包括用户并发数、时间控制、网络分段控制、服务器硬件控制等。
3.用Zend Guard来保护PHP1)发布加密以后的PHP应用产品。
2)保护PHP代码的知识产权。
3)防护代码的反编译,代码经过模糊处理和加密的双重处理。
4)几秒钟时间迅速地模糊处理和加密整个PHP项目。
5)用最新的代码优化技术在加密的过程中对代码进行优化。
在各种各样的平台中使用加密过后的PHP脚本,包括LinuxWindowsMac OS XFreeBSDSolarisAIX等。



本章总结
本章介绍了Zend公司的创立与发展,详细讲解了Zend公司主要的产品Zend Studio集成开发环境、Zend Optimizer优化器、Zend Plateform集成管理平台和Zend Guard安全卫士的使用,这些产品极大地方便了项目的开发、管理和产品的维护。

附件: 您所在的用户组无法下载或查看附件
技术不分高低,只分了解先后!PHPChina是个互助友爱的大家庭,谁都可以参与!
谁最笨?我?对是我,不信?真的是我,我最笨了?交有思路的朋友谈思路。qq:274393407
自在的风,自在的PHPer~
http://luzhou.blog.phpchina.com
编码和字符的详细探讨
第一时间阅读我的分享,点此订阅