PHP 平台终极堡垒 - Zend Platform
视觉·编程 十一月 27th, 2008目录
(一) ZendPlatform综述
(二) 性能优化连载
(三) PHP监控系统连载
(四) Web服务器集群管理连载
(五) Session Clustering
(六) Java桥
(一) ZendPlatform综述
一、PHP 在中国
近年来,随着开源潮流的不断兴起与繁荣,越来越多的 WEB 开发者转向 PHP 语言环境和优质高效的 L.A.M.P 平台架构,同时也有越来越多的商业、政府、电信等企业部门使用PHP 构建关键性 WEB 应用系统。PHP 以其开源、高效、稳定、简洁等诸多优势迅速在中国和全球范围蔓延开来。据NetCraft提供的调查报告显示,PHP已经超越ASP而成为WEB应用最流行的开发语言,全世界有超过2000万的网站在使用PHP,PHP语言也因此被NetCraft称为互联网最流行的开发语言。随着以 Discuz! 为代表的一批以 PHP 应用开发为主的公司的出现也迅速带动了国内学习研究 PHP 的热潮,同时作为开源领域和 PHP 在中国的门户性网站,PHPChina.Com 也受到越来越多 PHP 爱好者和业内人士的关注。

二、Zend 与 PHP - 你不可不知的故事!
PHP 在业界和广大开发者中几乎是家喻户晓,但提起 Zend 却很少有人了解,在我国,Zend 似乎总给人一种“犹抱琵琶半遮面”的感觉,那么下面我就将为你解开这层神秘的面纱,带你走近 Zend !
Zend 公司创建于 1999 年,之所以命名为 Zend,是取其公司两位始创者Zeev Suraski 和Andi Gutmans 姓名的近似合成发音(Zeev & Andi),而 Zeev 正是PHP语言核心的缔造者,他和其他PHP贡献者以早期的PHP雏形代码为蓝本,编写出了官方发布的PHP3.0版本。随着PHP3.0的出现,PHP技术得到了迅速的发展。其强大的可延展性的特点也吸引了大量的开发工程师。随后,Zeev带领Zend成功地开发了Zend Engine I并推出了PHP4.0, 并相应开发出了PHP4.0的许多组件。 PHP4.0 因为Zend Engine得到了革命性地发展并极大地增强了性能和可靠性,随后,Zend 公司又在他的带领下成功开发了Zend Engine II,实现了PHP5.0版本的发布和普及。Zend 作为 PHP 语言的缔造者和延续着在 PHP 社区中发挥着极为重要的作用,Zend公司一直具备PHP技术的设想和创新能力,并因此保持PHP独一无二的技术领先地位!

三、Zend Platform - PHP 平台的终极堡垒!
作为 PHP 站点的开发者或者维护者,你一定深知 PHP 的优点和便捷。但当 PHP 站点应用被你巧夺天工的思想开发出来后,你也许依然被一些问题所困扰着,如果你正为以下的一个或多个问题感到迷茫,那么我建议你读完这篇文章,也许这就是你一直在寻找的答案:)
1、 如何才能使我的 PHP 网站跑的更快,效率更高?
Zend Platform - 为 PHP 程序运行效率成功加速 3 - 80 倍!
2、 如何才能快速发现程序中存在的 BUG 和问题,而不是每次都被用户或老板告知?
Zend Platform - 具备全球独家的强大 PHP 程序监测系统,洞悉程序运行点滴,明察秋毫!
3、 我的 PHP 站点很大,拥有一个多台 WEB 服务器组成的集群,如何才能快速监控整个WEB 集群的工作状态?
Zend Platform - 拥有全球独家完备的集群监测体系,一目了然的从容掌控服务器运行状态,节省维护成本,服务器再多也不怕!
4、 我的 PHP 站点很大,拥有一个多台 WEB 服务器组成的集群,跨服务器 Session 问题把我搞的焦头烂额走投无路,我该怎么办?
Zend Platform - 完美的全球独家跨服务器 Session 解决方案,无需改动你精心编写的代码,Session Clustering技术帮你轻松搞定!
5、 我的 PHP 网站同时包含 JAVA 应用,有没有让我轻松满意的办法来实现整合?
Zend Platform - 强大专业的 PHP <-> JAVA 连接桥技术,稳定、高效、安全的 PHP/JAVA 全球独家解决之道!
6、 Zend Plaform 还能做什么?
也许,你的提问应该改成:Zend Platform 不能做什么?才更恰当一些 :)
看到这里,你是否已经开始为 Zend Platform 这个如此神奇的产品感到惊叹进而跃跃欲试了呢?别急,下面你将了解到有关 Zend Platform 更加详细的信息。
Zend Platform是由 Zend 公司研制开发的全球第一套为PHP应用提供安全,可扩展性和通用性的动态平台。Zend Platform提供关键性服务监控系统以及产品运行速度的提升。通过Zend Platform 可以使PHP的应用更加高效,扩展性更强。PHP的很多特性也许天生就是为WEB而诞生的,比如提供动态内容缓冲、与数据库的紧密结合实现了无缝的连接。除了网站,很多的企业也在使用PHP,例如政府部门,他们对PHP提出了更高的安全、可扩展性以及通用性等方面的需求。Zend 将 Zend Platform 产品设计开发为一套适用从基础性应用网站到企业级关键性业务应用的强大 PHP 运行保障监控平台。

Zend Platform 是目前为止唯一提供从开发到测试,直到生产服务器的智能应用分析监控平台。通过监控,可以监测 PHP 的运行错误,保留现场,甚至还可以对问题进行重现,并将问题归类,将信息自动发送给相关人员,这样即节约了开发人员、测试人员和系统管理员的时间,能够将更多精力投入在企业的业务运营方面。另外Zend Platform中整合了Zend Studio集成开发环境,代码可以直接在Zend Studio中进行调试,并且可以通过Zend Platform进行中心性能分析以找到影响整体业务效能的瓶颈点。
在性能加速方面 Zend Platform 提供了性能提升组件,能够最大程度的优化提升应用程序的执行效率高达 3 - 80倍之多!在大访问量情况下,可以有效减少 WEB 服务器进程数量,降低服务器整体负载,通过性能的提高,可以节省服务器硬件投入以及系统管理员的维护成本。
在 PHP/JAVA 连接整合方面,Zend Platform提供的PHP/JAVA连接桥可以高效稳定的调用基于JAVA/J2EE开发的应用程序。通过该功能可以节省您的开发时间并且能有效利用现有的资源,避免造成已经投入的成本浪费。
在跨服务器 Session 共享方面,经过大量的压力测,Session Clustering 模块是现有的 Session 跨服务器解决方案效率的 4 到 6 倍。 在系统架构中不再存在 Session 瓶颈问题。良好的设计架构使得 Zend Platform 中的 Session Clustering 组件具备极佳的可扩展性,能够轻松快速的加入新服务器以有效地发挥出更大的应用性能和效益。在高可用性 HA 方面,如果因为不可预测的原因,集群中的某一台或某几台服务器停止服务,损失的也仅限于故障服务器的 Session 数据,而不是整个系统。 Session Clustering 内在的数据完整性和加锁机制可以实现强大的 Session 集群应用。
对于 Zend Platform 暂且先介绍到这里,相信各位朋友对她已经有了一个初步的了解,在今后的文章中,将会对 Zend Platform 中的主要功能模块逐一进行详细的介绍和评测。请大家关注下一篇介绍《PHP 高速公路-Zend Platform PHP性能加速详细评测》。
一、 概述
在上一篇《PHP 平台终极堡垒 - Zend Platform》文章中,我们已经向大家介绍了Zend Platform强大的功能和特性,相信各位对Zend Platform也已经有了初步的认识。从这篇文章开始我们将会对 Zend Platform 中的主要功能模块和特性进行详细的评测以及介绍。
这次我们将为您介绍站长以及网站管理员最关心的问题之一:提升网站运行速度以及代码运行效率。服务器网站的性能通常是大家最为关注的焦点!本章我们将对Zend Platform的PHP代价加速、动态缓存功能进行深入的评测和对比介绍,通过对真实网站进行模拟仿真的压力测试,来领略 Zend Platform 强大高效的代码加速特性!下面让我们一起期待Zend Platform为我们带来的惊喜!
二、 性能加速介绍
Zend Platform具备多种对 PHP 代码的加速、性能提升方式和策略,可以灵活的设置加速方式以达到最佳的加速效果。通过良好的运用 Zend Plartform 性能提升特性,网站 PHP 代码执行效率可以获得 3 – 80 倍的提升!目前很多知名网站正在使用 Zend Platform 加速他们的网站运行效率,并且获得了巨大的性能提升和良好稳定的运行表现,如:腾讯网、Tom.com等。
Zend Platform拥有以下性能提升模式:代码加速、动态页面缓存、页面局部缓存、下载服务器下载性能加速以及输出页面特殊压缩。Zend Platform采用了非常人性化的设计,提供强大的图形控制台,对于最终用户或者管理员,只需轻点几下鼠标便可以从中修改各项性能参数,并且针对不同的平台和需求进行不同等级的设置和策略。Zend Platform内置的性能测试工具和性能参数统计图表也能帮助您清晰了解到网站整体性能的提升指数。
OK,下面就让我们看看 Zend Platform 在“实战”中的表现吧。测试开始!
三、 测试环境
我们选择在一台真实服务器以及网站上安装 Zend Platform 对网站进行性能提升测试。我们选择了一款目前主流的 Intel 架构服务器来进行测试,以便各位对Zend Platform有更近距离的接触!
服务器硬件配置以及系统软件环境
环境参数
服务器 CPU: 两颗 Intel Xeon 2.4 GHz L2/2M
内存: 2GB DDR RAM
网卡: 1000Mbps NIC
硬盘: 146GB SCSI Ultra-320
操作系统 CentOS 4.4 Linux (Kernel 2.6.9)
软件环境 Zend Platform 3.0.0
Web 服务器软件: Apache 2.2.4
PHP 版本: 5.2.2
MySQL 版本: 5.0.27
PHP 程序: 康盛创想 SupeSite/X-Space 5.0 正式版
四、 代码加速
使用 Zend Platform 内置的PHP代码加速测试系统从站点中随机抽取10个页面进行随机模拟访问。以下是测试结果以及数据图表分析:
从中我们可以清晰看到,使用 Zend Platform 对刚才随机抽取的 10 个站点PHP程序进行加速,根据PHP文件代码的不同其加速效果也是不同的,PHP程序执行效率最高提升了3.02倍,最低也有1.1倍的提升。此次测试的平均效率提升结果为:2.38倍。
五、 页面压缩测试(Compressions Test)
Zend Platform 提供的页面 gzip 压缩功能可以将网页输出代码进行压缩以节省传输带宽提升数据传输速度。当我们开启gzip页面压缩功能时,服务器会把客户端的请求页面打包成gzip格式后传递给客户端,随后在客户端解压呈现给访问者。接下来,我们来看看Zend Platform对压缩能起到怎样的效果。
图形数据如下:

从中我们可以清晰看到,使用 Zend Platform 对刚才随机抽取的 10 个站点PHP程序进行加速,根据PHP文件代码的不同其加速效果也是不同的,PHP程序执行效率最高提升了3.02倍,最低也有1.1倍的提升。此次测试的平均效率提升结果为:2.38倍。
五、 页面压缩测试(Compressions Test)
Zend Platform 提供的页面 gzip 压缩功能可以将网页输出代码进行压缩以节省传输带宽提升数据传输速度。当我们开启gzip页面压缩功能时,服务器会把客户端的请求页面打包成gzip格式后传递给客户端,随后在客户端解压呈现给访问者。接下来,我们来看看Zend Platform对压缩能起到怎样的效果。
图形数据如下:

上述图表中,橘红色条目代表压缩前的程序数据总量(字节);绿色条目代码经由Zend Platform 压缩后的程序数据总量(字节)。测试结果表明,使用Zend Platform压缩后的数据平均为普通压缩文件的71.87%,也就是说在传输过程中可以节省将近 71.87%的带宽资源,如此以来,客户端与服务端的数据传输就能在更短的时间内完成,也起到了提高访问速度的效果!
六、 下载速度测试(Zend Download Server Test)
如果您的服务器提供WEB访问的同时也同样提供下载,那么下载的速度和最大连接数也一定是您所关注的问题。
下载速度的快慢除了与带宽有很大的联系外,服务器响应请求的速度与处理请求的合理性也大大的限制了文件下载速度。我们选择一个大小为301K的文件,限定每个连接的速度为64K/S,并发100个连接进行测试。
图形数据如下:

七、 动态页面测试
对于动态页面的测试,为了获得更加可信并且更加准确的测试数据和效果,我们决定使用第三方专业测试工具来进行,因为Zend Platform在测试过程中对服务器资源进行了一定程度的保留,所以只作为理想条件下的标准,为了能在真正的压力测试中体现出Platform的优势,这里我们选择了Siege 这个专业的压力测试工具来进行。
Siege是一个多线程的WEB性能测试工具,被设计成可以让WEB开发人员了解代码在长时间压力下的性能.可以模拟很多用户同时访问WEB服务器,此数量可以自由定义.这就相当于web server被围攻(siege)了。
我们使用Siege模拟保持100个并发连接,对Discuz!5.0.0论坛的viewthread.php页面进行5分钟的模拟访问,分别得出未安装Platform和安装并开启Cache后的结果并对两者进行比较。
注:为了更趋于真实,测试过程中我们从viewthread.php这个动态页面中随机抽取10个不同的地址进行访问。
测试结果如下:
No Platform Platform & Cache
总请求次数(次) 47995 372919
传输数据大小(兆) 156.32 2336.23
响应时间(秒/次) 0.62 0.06
每秒请求次数(次/秒) 159.74 1244.10
吞吐量(兆/秒) 0.52 7.79
可以看到,装了Platform并开启动态Cache后,网站的整体性能比之前提高了大约7.76倍,如此以来,服务器将能承受更多数量的访问,也提高了整个的访问速度。大家也可以选择仅仅对访问频繁的某个页面进行缓存,这样更能节省服务器的资源。
从上述测试结果中,我们进一步了解到Zend Platform在PHP的性能加速上为我们带来的诸多变化,也对性能的控制提供了方便的管理方式。
“为什么网站的错误和问题总是用户最先发现?”
“为什么面对突如其来的程序错误却束手无策?”
“为什么老板总是一再要我加强对程序的检查?”
“可是,我已经尽力了……”
也许,这正是你该试试 Zend Platform 的时候了!
在上篇《PHP高速公路》我们向大家展示了Zend Platform强劲优质的性能加速特性,想必各位还沉浸在它所带来的极速体验中吧:)不过很抱歉不得不打扰您喜悦的心情和回忆,因为如果您此刻正在驾驶一辆名贵的跑车风驰电掣般的狂奔在高速公路上,享受着极致的速度快感,那么作为您的朋友,我想我有必要提醒您另一个不容忽视的问题——车辆的可靠性!在您享受极速快感的同时,您一定也希望时刻洞悉爱车的点滴变化,及时发现潜在的问题以保障旅行的畅快。对于网站而言道理也是如出一辙的,在程序高效运行的时候,在客户享受流畅访问体验的同时,您也一定希望时刻发现程序中可能存在的问题以及性能瓶颈。那么在这篇文章中,我们将带您领略Zend Platform的另一大亮点—-程序以及系统智能监控,作为几大特性之一,Zend Platform强大的监控特性足以让每个管理员为之倾倒,每一个使用并且领略过 Zend Platform 智能监控系统的管理员也都再也无法离开她!在某天一定会发生下面的这场对话……
“为什么别的站点管理员那么忙碌,而你却如此悠闲?”
“很简单,因为我用 Zend Platform!”
一、程序代码监控
Zend Platform加入了经数年潜心研发的PHP智能监控技术,使您能够及时(甚至是实时!)发现程序中的错误、问题、性能瓶颈点,并且快速的从故障中恢复,将故障成本降至最低,甚至完全避免和预防一些故障事件。Zend Platform智能监控的范围包括了PHP脚本本身、数据库系统状态以及服务器(甚至是网络中的其他服务器)系统自身。
当您的网站开始运行并对外提供访问服务的时候,Zend Platform就已经开始忠实的并且一丝不苟的对程序运行进行监控检查,洞悉程序运行的点滴,并及时对发现的问题和事件进行分类、记录、分析…… 更重要的时候它能够为您自动找出可能发生问题的代码,告诉您是哪个文件中的哪一行代码导致了这次问题!省去大量的排错时间,让您的客户和您的老板对您刮目相看!
从下面的截图中能够清晰的看到Zend Platform 程序代码监控的分析结果:

(图1)
图1所示中,Zend Platform 监控并记录“执行效率缓慢的脚本”、“PHP程序错误”、“数据库错误”、“数据库慢查询”等事件,并且对事件进行分析统计,以清晰易懂的图表展现在您的眼前,使您一目了然!

(图2)
图2所表示的则是以小时为单位进行的事件统计,这样使管理员更好的了解网站在高峰期与空闲期错误发生的频率。Zend Platform的图形统计非常的全面,除以上两种外,它还能分别以主机(主要应用于集群环境)、脚本文件、月、周等为单位生成详细的图形报告,管理人员可根据需要进行选择,真正明了的对程序进行随心所欲的监控检查!
程序运行信息的图形分析统计还仅仅是对程序整体的分析,可以说只是一个总体的概览。相信对于很多管理员和程序员来说,概括往往是不够的,您一定希望了解更多有关程序问题的更具体的信息。那么就让我们继续,进一步来了解领略Zend Platform更强大的事件智能分析特性!
当我们了解程序整体状况后,如何对环境做进一步的修正和优化呢?我们可以方便的调出事件列表,在事件列表中可以看到关于每条错误事件的详细信息,我们可以通过发生频率或者事件严重程度等条件对事件列表进行排序,以便更高效的解决问题(图3)。

(图3)

(图4)
点击一条错误信息事件,则会弹出该事件的详细信息(图4)。图中列出了发生错误的脚本以及错误语法的具体位置,Zend Platform还能帮我们分析造成错误的原因。在Event Occurrences Info提示栏中,Platform帮我们统计了相同错误发生的频率和错误发生的位置。了解错误代码后,我们还能通过Zend Studio Diagnostics栏中的Debug URL连接Zend Studio直接对代码进行调试,Test URL还能对错误或者问题进行重现。在Event Context中,列出了脚本中调用的函数、页面传递接收和Cookie的所有信息,使我们更清晰的了解到脚本执行的所有动作,真正做到明察秋毫,洞悉点滴!
二、服务器监控
除了程序可能发生错误和问题,服务器也是出错的一个重要因素。而当服务器出现问题的时候,我们最渴望的就是快速准确的获取相关信息以及锁定问题出现的原因,而Zend Platform能即时帮我们将所需要的信息收集起来,以至于发生问题后我们能够从容应对,将事故率、损失减少到最低。Zend Platform的监控系统可以使服务器更稳定、管理更方便!

(图5)
Zend Platform提供了系统健康报告(System Health),代码、数据库、网络的状态,让您尽收眼底(图5)。在图中,可以清晰的看到每台服务器各个项目的监控状态,使您能够及时快速的发现故障锁定故障原因!更重要的是,当您拥有一个服务器集群时,利用 Zend Platform 可以使您在安装有中心控制系统的服务器上对集群中所有机器进行统一的集中化管理监控!您甚至还可以在中心服务器中统一修改PHP的相关环境配置,而无需登录到每台服务器上执行枯燥重复并且易错的修改操作!
通过以上的介绍,相信您已经对Zend Platform强劲灵活的检测系统有了比较深入的了解。使用Zend Platform管理监控您的站点程序以及服务器将会是一种前所未有的享受,在降低站点系统故障率的同时也节省了大量因故障而引发的运营成本增加等重要的问题!最后引用一句俗语:“要想知道梨子的味道,最好还是自己去尝尝!”,当然,当您开始品尝 Zend Platform 这颗梨子的时候,您不会感觉到一点的酸涩,相反,更多的是回味于心中的甘甜与兴奋!
Zend Platform是一个Web服务器行为的管理环境。
对于只由一台服务器组成的环境,Zend Platform运行在该台服务器当中,并提供系统的稳定性支持和信息分析。
而对于那些由多台服务器组成的环境而言,Zend Platform就不太相同了。它既是一个单独的系统稳定的控制中心,又是一个集群管理的工具。
下面是Zend Platform系统的图示,它从总体上形象地体现了Zend Platform的集群管理解决方案。

Zend Platform 系统架构图
上图体现以下几点具体的特点:
1.Zend Platform的独立的集群服务器是安装在一台Web服务器上面的
2.系统管理员管理着所有的服务器节点。管理员通过在工作站使用标准的Web浏览器进行管理。
3.每个服务器节点都使用了基于PHP的服务来为用户进行响应。
4. 负载均衡服务器根据特定的规则,把用户的访问请求分发到不同的服务器当中。
Zend Platform 包含了两个配置组件,中控(包含服务器和接点)和节点服务器。
Zend的中心服务器是一个中心管理组件,提供节点配置和脚本性能的管理。中心服务器可以是以集成的方式和节点安装在同一台服务器。不过,这通常都是一台服务器的网站的做法。但是,经典的Web应用都是面向多台服务器的环境。
Zend中控提供单点访问,但是控制整个集群的功能。
我们所说的节点服务器是指运行着Apache和PHP服务的Web服务器。Zend Platform如果是安装在节点上,它就负责提供脚本,数据库,系统运行状态的报告给中控服务器。
每个节点安装的时候,还会安装调试服务器。这个是为Zend Studio服务的服务器组件,包括了性能分析,调试,代码直接修正等代码管理方法。
从本质上说,中控服务器和节点服务器安装的性能组件是相似的。因中控服务器本身也包含了一个节点服务器,只是中控服务器和节点服务器使用的功能不是一致的。
中心控制服务器
中心控制服务器提供了不可缺少的功能,包括处理事件信息,节点管理和性能监控。
不管集群中注册了多少台节点,从用户在GUI里查看服务器的时候,Zend Central提供的都是简单便捷的统一入口。Zend Central是运行在中心控制服务器的,它最主要负责提供中控服务器和节点服务器配置管理的GUI界面。Zend Central包含了一些从节点收集信息、存储信息、配置和接受信息的通信组件。在这里,中心服务器与节点服务器的通信主要是通过常规的TCP/IP通信实现的,而事件信息都是统一放置在中心控制服务器的专用数据库当中。总之,Zend Central管理着PHP应用的性能和监控特性,具体包括了节点的配置,PHP的配置,还有事件收集。
下面的图示体现了Zend Platform 服务器的组件:

Zend Platform 服务器组件
中心服务器是专门用来管理节点的。所以它的安装包括三个主要的部分:
1. Zend Central 组件。包括了信息收集和性能管理,PHP智能和Java Bridge等功能。
2. 数据库组件。一个专门存放从节点传递过来的事件信息的存储仓库。
3. 收集组件,Collector,运行在后台的守护进程。通过它信息可以从集群中其它节点收集过来,然后进行聚合以后,放在Zend Platform 的PHP智能模块当中。Collector收集和聚合信息依据的规则在服务器之间是可以不同的。
节点必须注册到中心服务器中去,以便在节点和中心服务器之间进行通信。有两种方法把节点这册到中心服务器当中去:安装程序或者手动运行注册程序。ZendPlatform的节点包含了一些组件来实现把信息汇报到中心服务器当中去,并且提供调试功能。
中控—节点之间的通信
中控和节点之间的通信通常都是由节点首先发起的,因为节点会通过collector组件汇报事件信息给中控服务器。
但是,Zend Platform 还具备一个状态查看的机制可以周期性查看每个节点是否工作正常,并且收集节点服务器的各个组件的状态信息。
集群配置
Zend Platform 通过中控服务器对服务器集群进行管理,以便管理员可以通过统一的接口对整个集群的服务器进行查看和管理。因此集群的概念就被定义为一个监控和管理为主的整体。
集群管理的分为几个概念。比如,管理员只能同时进入一台节点进行设置,但是从不同的服务器收集事件信息过来的时候,是有聚合处理的。只不过,在聚合处理的时候,会按照节点不同进行划分。
把服务器加到Zend Platform当中去是通过安装Zend Platform的过程实现的。一旦服务器被添加进去了,你就可以的对它进行设置了。
1.管理服务器 – 配置,删除,定义
2.管理组 – 对组进行事件报告和配置
3.管理Virtual Hosts – 手动地删除和增加Virtual Hosts

集群管理对话框
一旦服务器被配置并且分组,该服务器将自动启动相对应的事件监控规则
管理服务器
管理服务器功能的选项提供了配置,定义设置用节点安装过程注册进来的服务器。只有用Zend Platform安装并注册成功的服务器才可以在这里看到。
把服务器增加到,并在这个选项中可以看到,可以通过以下步骤:
1. 运行Zend Platform的节点安装或功能启动程序 。
2. Zend Platform 将自动确认注册的服务器,并把它在列表中显示出来。
3. 安装脚本会设置服务器的名字。
现在你就可以配置该服务器了
服务器配置具体的内容包括如下:
1.服务器地址 – 真实的地址(不可编辑)
2.服务器名称 – 服务器名称用于标识该服务器,是指该服务器在Zend Platform中的名字
3.组 – 把服务器划分到组里面去(在管理组的选项增加新的组)
4.GUI 路径 – 标识出每台服务器的GUI安装的路径
5.SSL – 查看服务器是否使用SSL
6.Port – 设置服务器通信的端口
7.Remove – 从数据库当中把服务器注销掉并把该服务器所有的历史事件删除。
一旦节点服务器注册上以后,更改这里的设置将马上更改服务器在集群中的配置。
管理服务器组
组功能选项提供的是把服务器划分到某个特定的组里面的功能,以便进行事件的报告和配置。
一般会因为以下三个原因而创建服务器组:
1.节点之间需要聚合事件报告(比如说节点之间运行同样的 Web应用).
2.让同组的服务器的配置是相同的。(使用克隆配置).
3.改善集群服务器的管理方式。
如何创建一个新组
1. 在”Add a new group field” 区域写入组的名字然后点击Add按钮。新加的组就被增加了,并在列表中显示。
2. 如果想对服务器的事件报告按照组做聚合处理的话,你就使用组功能。
管理Virtual Hosts
管理Virtual Hosts的选项提供手动定义服务器Virtual Hosts的途径。总体上来说,Virtual Hosts是按照事件记录的需求分布的。现在只能看到服务器配置的真正存在的Virtual Hosts,那么为了更有效地方便管理。Zend Platform允许你增加Virtual Hosts(不去更改httpd.conf)。
Virtual Hosts可以在每台服务器上增加。而且,你可以通过两种方式来删除Virtual Hosts:
1. 直接点击Virtual Hosts – 不去选择该台特定的服务器i。
2. 点击服务器的Virtual Hosts列表 – 选择一台特定的服务器,然后增加或者删除Virtual Hosts。当删除一个Virtual Hosts的时候,所有与该Virtual Hosts相关联的事件都将被删除。
Virtual Hosts的权限管理
Virtual Hosts的权限管理可以对用户是否能查看该Virtual Hosts相对应的事件报告进行权限控制。这是一个附加的权限控制系统,而且在对每个用户做更深入的权限控制的时候更有帮助。
总之,当您拥有一个服务器集群时,利用 Zend Platform 可以使您在安装有中心控制系统的服务器上对集群中所有机器进行统一的集中化管理监控!您甚至还可以在中心服务器中统一修改PHP的相关环境配置,而无需登录到每台服务器上执行枯燥重复并且易错的修改处理!
介绍
这篇白皮书介绍的是Zend Platform 关于session clustering的新的模块。Zend的解决方案是唯一能为不断增加的集群提供线性升级的方案,同时它还提供空前的性能和数据完整性。
在这里,我们首先介绍目前可选的几种方案。然后,将它们与Zend提供的方案做对比,并且对Zend的Session集成模块的设计理念和架构做下阐述。
背景
因特网或者万维网的核心是HTTP协议(超文本传输协议)。同时,因为HTTP协议的无界性,网站应用无法将浏览器访问与不同的服务器连接起来。从本质上说,这意味着用户从一个业务进入到另一个业务时,新的服务器有可能无法得到该用户的信息。
为了解决这个问题,一个新的概念“Cookies”被引入了。所谓的“Cookies”指的是一个小型数据结构,这个存放在用户本地的数据是被用来储存用户的信息。当该用户访问一个网站的时候,网站的服务器从用户本地得到用户数据后经过处理再把结果返回给用户。所以,给用户的感觉是网站似乎记住了该用户的信息。同时,用户可以方便地在登陆该网站时使用原先的设置,甚至不需要输入密码进行登陆。“Cookies”使用最多的领域是记录用户的相关配置信息或者是在一个在线商店所采购的采购记录。
然而,“Cookies”数据保存在用户本地的特点容易造成两个方面的负面效果。第一、过长的“Cookies”数据的保存与传输都将是一个不小的资源消耗。第二、对于一些重要的数据,保存在用户本地容易造成数据错误,从而给用户的访问带来负面影响。为此,基于“Cookies”的HTTP Session 概念产生了。代替传统的把所有的信息存储在用户本地的做法,Session 架构把用户的信息储存在服务器端,而在用户端只保存了区分布不同用户信息的唯一的“Session ID”。
PHP是通过内嵌的扩展来实现Session应用的,并且该扩展是基于地层的架构。PHP对Session的支持允许网站实现大量的注册和访问量。
可是,当要在一个服务器集群实现PHP Session 的应用时,问题变得复杂起来。
Figure: 1 - 服务器集群环境

经典的多服务器集群包含了一组服务器,在每台服务器上面加载相同的PHP应用。同时,服务器集群的出口由一个下载均衡服务器来实现,下载均衡管理器在服务器之间分配流量保证各个服务器的负载是均衡的。这种应用使得网站应用突破了单台服务器的传统模式,而由服务器集群来承载同一个PHP应用。很明显,这种集群服务器的应用提高了PHP业务的性能并减低了终端用户的访问时间。
由于HTTP协议的不确定性,同一个用户的不同HTTP请求很有可能被发送到不同的服务器。所以,将会造成用户的session id 无法及时获取正确的用户信息的问题,并最终导致用户使用上的不方便。
Session 集群化管理
Zend之前的一些解决方案:
负载均衡Session方案
通过负载均衡服务器把特定的HTTP请求指定到相同的服务器。存在着一些不足:
? SessionID与服务器的对应很难成功地保持。在没有HTTP协议校验的前提下,HTTP协议很容易丢失目标。而且,因为负载均衡的性能问题使用HTTP协议进行校验是不稳定的。
? 如果在负载均衡服务器上面启用Session定向,将不利于负载均衡服务器本身的运行特性。尤其是在使用了了流行的NAT技术后,影响更加明显。
? 为了达到SessionID与服务器的对应的目的,负载均衡将需要花费相当昂贵的系统消耗来实现。
? 当负载均衡服务器的为了实现Session功能的时候,它的负载将会急速上升,并逐渐地成为了服务器集群升级的的瓶颈。在集群服务器上添加服务器将会因为负载均衡的的瓶颈问题而变得困难。
通过NFS系统来共享Session的方案
因为负载均衡实现Session共享的局限性,有人开始尝试用NFS来共享。通过集群中的NFS文件服务器来实现,从而来实现集群里的服务器的Session应用。甚至有人觉得通过负载均衡服务器来实现Session共享会变得没有必要,而且可以使得网络的硬件投入得到减少,DNS轮询都能够满足Session的应用。
但是这种方法同样存在着一些局限性:
? 数据完整性: NFS的文件加锁机制在许多场合下是不合适的。这种情况有可能导致Session的数据很容易出错。
? 速度缓慢:从NFS文件系统提取Session数据远远比本地提取耗时,同时网络的架构也将影响数据的传输速度。
? 将所有的数据都存储在一个服务器上意味着这是一个系统故障点:如果NFS服务器出现了故障,整个PHP应用系统将无法工作。为此就必须为NFS服务器配置更多的设备和更完善的电源管理。但是,这也是一个很大的资金投入,同时,他还是没有从根本上解决单一故障点的问题。因为NFS的网络接口还是一个。
? 系统升级: 把系统所有的数据都存放在一个中心节点伴随着的一个问题是系统的升级变得困难,而中心点就是系统升级的一个瓶颈。所以,往集群里面增加服务器所带来的效益将为因为这个瓶颈问题而被降低。
? 安全性: NFS 一直以来都被认为是一个安全性比较差的协议。许多专业的IT公司也因此放弃了NFS网络文件系统。
? 持续的硬件投入
采用数据库来存放Session信息
第三种解决Session不能跨服务器的方法是把共享的Session放在一台相应的数据库服务器中。这种方法也有效地解决了NFS文件系统方案带来的数据完整性和有效性等问题。但是这个方案同样地存在着某些不足:
? 速度:相对本地存储来说,数据库服务器将需要在数据库处理上面占用整个PHP应用平台的时间。
? 故障点:数据库服务器还是存在着单一故障点的问题。
? 系统升级:使用数据库来存储Session这个方案同样存在着升级困难的问题。而这个问题在考虑数据库服务器的处理能力和负载的时候会显得尤为突出。
小结
目前,通用的解决方案并不能满足PHP集群化应用发展的需求。总体来说,有一下几个方案的困难需要解决:
? 系统升级的瓶颈问题:目前已有的解决方案总是把问题集中在一个单一的中心节点上面。为此 ,限制了其方案的处理能力,为集群应用的发展造成了困难。
? 性能:目前已有的解决方案往往需要过度牺牲中心节点的系统资源,所以中心节点的硬件投入比较大。
? 故障点:目前已有的解决方案都需要一个中心节点,为此整个系统存在着单一故障点的问题。这也意味着系统在运行过程中存在着较大的风险。
Zend 的解决方案
Zend 公司是应许多客户的要求的情况下,开始Session clustering 模块的开发的。这么客户一直被实现Session共享而带来的系统消耗等问题而困扰。作为PHP发展的主要推动者,Zend公司强烈意识到这个问题的严重性。客户放映的问题主要是集中在Session共享的安全性和多余资源投入。在Zend的Session共享的解决方案出现之前,客户往往要搭建复杂和昂贵的框架添加数据库服务器等硬件来实现Session共享。但是这样的框架还经常无法提供稳定、可靠的Session跨服务器的解决方案。而且,这种复杂的框架还经常给商业应用的稳定性带来错误和潜在的危险。
Zend的新的Session Clustering 的模块(Zend Platform 的部件之一) 就为提供一个综合的Session跨服务器的解决方而开发的。并在这个方案中,有效地解决了上述几个解决方案存在的问题了。更为重要地,没有为现有客户增加成本。
在Zend session clustering 的解决方案中, sessions “居住” 在它第一次被生成的服务器上。同时,这些Session可以别同一个集群服务器所共享。这意味着Zend的解决方案从根本上解决了Session不能跨服务器的问题,并提供了较高的性能。同时,它的系统升级特性也可以让客户呢功能有效地使用现有的系统资源,并简便、迅速地升级。
Figure: 2 - SC 架构

图 2 给我们展示了Session集群管理的几大部件:
Session 的存储 : 可以选择存储在内存或者是存储在硬盘并在内存进行缓存。
SCD守护进程: Session clustering 守护进程, 把Session信息从Session被存储的地方提取出来提交 给PHP engine,或是从集群里别的服务器上提取并提交给PHP engine。
mod_cluster PHP扩展: 是一个PHP的session处理负责与SCD守护进程的通信。
Zend的session clustering 模块使用了强大的加锁和数据完整性机制来实现session 数据的安全性。在使用Session clustering 时,可以随时地切换两种不同的session存储模式:硬盘或只在内存。这种存储方式也提供了错误恢复的功能,因为如果发生了不可预测的故障时,能够及时恢复Session数据。
Zend的session clustering 模块对现有的PHP的兼容性很强,同时不影响其它的扩展的正常使用,也不需要修改任何代码。Zend Platform的session clustering 的解决方案就是集成了一个PHP的扩展。同时,在PHP.ini里面也可以选择是用现有的解决方案还是session clustering 模式。
结论
Zend的session clustering 模块从技术上来说,比现有的几个解决方案都更加成熟,也是现今唯一的能迅速实现系统升级的解决方案。Session clustering用较低的成本来实现PHPde 集群应用,并可以给客户带来无法比拟的性能、稳定性和数据完整性。
Zend的 session clustering 的解决方案也是目前唯一的一个能够集成到PHP的解决方案。因为实现session clustering的设计与代码编写都是在PHP的架构下实现的。
下面列出的是session clustering与其它方案的比较:
? 线性系统升级:在系统架构中不再存在瓶颈问题。新加入的服务器能有效地发挥出应有的性能效益。同时,Session clustering 也不会给现有的网络架构和设备增加额外的负担。
? 速度优势:经过压力测试,session clustering 模块是现有的Session跨服务器解决方案的4到6倍的速度。
? 无故障点:如果因为不可预测的原因,有一台服务器停止服务了,损失的也只是那一台服务器的session数据,而不是整个系统。损失的数据可以迅速在其它的服务器上重新建立。
? 安全性: Session clustering’s 内在的数据完整性和加锁机制可以实现强大的Session应用。并允许高用户负载下的商业应用。
? 错误矫正: session clustering可以选择把session数据存储在硬盘当中。从而可以从系统或者内存的出错中恢复过来。
? Session clustering试你的资金投入均匀分布在服务器机群中:session clustering可以与任何的负载均衡技术环境运行(包括DNS轮询)。
? 强大的兼容性: Zend的 session clustering 解决方案提供了强大的集成特性,可以兼容现有的代码和PHP应用。现有的PHP项目可以直接移植到session clustering 解决方案当中应用。
Zend Platform的PHP/Java桥是一个链接PHP对象系统和Java对象系统的PHP模块。它用于访问基于运行Java应用服务器的Java应用。Platform的Java桥提供了重要的性能和扩展优势。特别是无论PHP会话的数量有多少,Zend Platform的PHP/Java桥中的内存消耗是不变的,例如在PHP5中,这与同类的解决方案不同。
有三种类型的企业应该对PHP/Java桥感兴趣:
那些投资于J2EE应用服务器的公司可以利用PHP的Web性能,同时保留他们已经投入的Java应用程序。
那些以PHP为中心的公司想利用没有PHP脚本语言的J2EE服务。
那些还没有过多J2EE投入和遗留系统的公司可以利用PHP/Java桥来与普通的Java对象相配合。
那些使用或想使用Actuate报告的公司
关于Zend公司的Java桥技术
Zend的Java Middleware module(JavaMW)提供了PHP和Java的连接。它的API类似于标准的PHP Java API,但是执行方式不同。JavaMW使用了一个独立的Java服务器处理,这允许它有效的处理Java请求。它增强了PHP/Java连接的稳定性和可靠性。不像标准的PHP/Java的连接器,它使用了对所有的请求使用了一个单独的Java虚拟机,这在改善扩展性的同时极为重要的使内存和处理器请求更适度。
以下的图表说明了Zend Platform的Java桥技术:

图 Java桥的处理级别
上图说明了以下内容:
Zend Platform节点
Zend Platform的节点包括了两个桥接部分:PHP端的桥和Java端的桥。Zend Platform节点
操作如下:
1.一个JVM(Java虚拟机)在安装Platform的节点之前首先被安装在机器,被提供给ZendPlatform。
对于Java桥的功能,你必须安装一个JVM的兼容版本。Platform将自动寻找兼容的版本。支持的版本有SUN J2SE或SUN J2SE1.5(J2SE5)。
2. Zend Platform然后安装需要的两部分——PHP端的桥和Java端的桥来建立Java桥。
3. 一个PHP应用可以从任何存在于节点的Java库里调用一个Java对象。
当一个PHP应用通过Java桥调用一个Java对象,一个针对这个对象的代理在PHP中被建立。在图中,Java对象被描绘为一个深色的方块;这个对象在PHP中的代理被显示为一个亮的方块。
J2EE应用服务器
J2EE应用服务器及它的更高级的配置,允许你在一个Zend Platform节点和一个外部J2EE应用服务器之间建立一个PHP/Java桥。这个配置的类型是基于现有Java架构的公司的典型。J2EE应用服务器的操作如下:
一个PHP应用可以从一个外部的Java库调用一个Java对象到Zend Platform。
1. Java端桥的部分和和J2EE服务器端通信。它在J2EE上寻找对象,例如一个EJB。全部的操作是基于Java的。
2. 然后PHP应用通过在两个Platform的桥接部分创建的Java桥调用Java对象。
3. 一个针对这个对象的代理在PHP中建立。在图中,Java对象描绘成一个深色的方块;这个对象的代理显示为一个亮方块。
Java和PHP的完全的结合描述在下图中:

图 Java桥系统等级
Java桥系统等级图说明了以下的网络结构:
Zend Platform节点——为了让Zend Platform具有作为Java桥的功能,它必须有一个适当的Java安装机能。Java一被安装,Platform安装程序安装Java桥所需要的组件,其中一些是由Java实现的。
J2EE服务器——添加了Platform的基于Java的企业有它们自己的应用服务器。一个J2EE服务器在图中作为Front Office的一部分被显示。它可以和任何安装了Java并且作为合法帐户在Java中定义的Platform节点之间通信。
使用方案
有两个使用方案描述了Zend Platform的PHP/Java桥最常见的应用:
和已有的Java架构的结合——PHP是一种被设计为几乎涵盖了一个企业的所有需求的非常重要的脚本语言。同时,许多企业有长时间用Java开发应用的历史。Platform的Java桥使得企业可以继续使用他们的Java基础——应用,数据库,业务逻辑和不同的Java服务器(WebLogic,JBoss,Oracle应用服务器等)。
访问Java语言和架构——一些企业需要整套PHP的性能,更有选择基于Java的应用的特殊需求。SIP在通信产业中发信号,或者JDBC为SQL数据库建立连通,是给人印象深刻的特殊产业的产品例子。Platform的Java桥使得企业采用了PHP标准并且使用了他们首选的基于Java的应用。
案例研究
一个名为FlowerPwr.com的公司,在通过互联网销售鲜花。他们是一个位于东海岸的成功企业,有一个积极的管理理念。他们现在正在收购西海岸的竞争对手——我们称之为Yourflowers.com——提供相同的服务。
FlowerPwr.com有他们自己的网站,并且它的各种企业级应用是用PHP语言写的。Yourflowers.com也有它自己的站点, 并且它的所有应用基于Java并且用J2EE开发。他们有自己的J2EE服务器。FlowerPwr.com作为一个综合的商业实体需要一种隐藏公司合并事实的方式尽快操作。
Platform的Java桥提供了一个解决方案。使用Zend Platform,FlowerPwr.com可以在PHP中建立一个通用接口。公司可以保留Java运行并且利用他们收购的已有Java服务。FlowerPwr.com可以通过使用现有的PHP的接口来做这样的事情。
以下代码实例说明了Platform的Java桥怎样应用到商业案例和其它类似情况:
<?
// EJB configuration for JBoss. Other servers may need other settings.
// Note that CLASSPATH should contain these classes
$envt = array(
"java.naming.factory.initial" => "org.jnp.interfaces.NamingContextFactory",
"java.naming.factory.url.pkgs" => "org.jboss.naming:org.jnp.interfaces",
"java.naming.provider.url" => " jnp://yourflowers.com:1099");
$ctx = new Java("javax.naming.InitialContext", $envt);
// Try to find the object
$obj = $ctx->lookup("YourflowersBean");
// here we find an object - no error handling in this example
$rmi = new Java("javax.rmi.PortableRemoteObject");
$home = $rmi->narrow($obj, new Java("com.yourflowers.StoreHome"));
// $hw is our bean object
$store = $home->create();
// add an order to the bean
$store->place_order($_GET['client_id'], $_GET['item_id']);
print "Order placed.<br>Current shopping cart: <br>";
// get shopping cart data from the bean
$cart = $store->get_cart($_GET['client_id']);
foreach($cart as $item) {
print "$item['name']: $item['count'] at $item['price']<br>n";
}
// release the object
$store->remove();
?>
这段示例代码可以理解如下:
这段代码示例是用PHP写的,并且构成了PHP Web应用的一部分。
1. PHP应用首先初始化一个EJB操作,位于本地的特定URL名为:jnp://yourflowers.com:1099。
2. 这段代码然后指定了bean——YourfiowerBean,应用将会寻找。
3. 接下来,bean对象返回给EJB服务器。
4. 接着应用程序调用方法——在这个例子中,Java应用包括两个函数:
place_order接受两个值——客户ID 和商品ID用来添加到购物车
get_cart接受一个值——客户ID和返回到目前为止购物车里的物品列表。
脚本执行后引用的类被消除。
附加的价值
Zend Platform的Java桥支持PHP和Java的结合,这样给企业带来了商业和技术级的利益。
商业级的利益:
拥有J2EE应用服务器的公司开始认识到PHP提供的优势超过其它Web实现语言,包括:很短的开发周期,很短的投入市场,很少的TCO等等。
以PHP为主的公司可以利用没有脚本语言的J2EE服务。
技术级的收益:
Platform的PHP/Java桥提供了与普通的Java对象互相作用的能力。
Platform的Java桥对于每个Apache进程在操作中没有JVM的开销。
Platform的Java桥消耗极有限数量的内存,几乎与实现它的活动的数量不相称。
