【转帖】Zope: 一个开源的web应用服务器

作者:[url="http://czug.org/author/panjy"]潘俊勇[/url] ― 上次修改时间: 2006-10-31 16:43

[url="http://czug.org/zope/zopetuiguangduanwen/what-is-zope"]http://czug.org/zope/zopetuiguangduanwen/what-is-zope[/url]

如果你是一个Python语言的爱好者,那你应该知道Zope这个Python上的杀手级软件;如果你阅读过Eric Raymond的著名的开源启蒙文章《魔法大熔炉》,那你应该知道Zope这个经典的开源商业化案例;如果已经厌倦了J2EE的繁琐,或者Ruby On Rails的过于简单,那么,Zope应该是值得你关注的另外一个选择了。

Zope( [url="http://zope.org/"]http://zope.org[/url] )是一个开放源代码的web应用服务器。2002年,Zope被Linux Journal评为最佳的web应用服务器;2004年,Zope成为冠群CA公司宣布其开放源代码战略后的首批资助项目;Zope拥有美国海军、北约组织、美洲银行、波士顿在线、法国10多个****部门、摩托罗拉、SGI等众多的重量级用户。

使用Zope,可快速构建功能强大、可扩展的web应用。典型的,比如内容管理、内部网、电子商务、门户,甚至ERP应用。其中,世界级的内容管理系统Plone便是基于Zope构建。Zope上有丰富的第三方产品插件供选用。

脚本开发快速构建应用

1996年,当时是Zope公司CTO和 Python领袖的Jim Fulton,为教授CGI程序起草讲稿。Jim针对这门课程,以他自己的方式研究了所有关于CGI方面的现存文档。在讲课返回的途中,Jim开始思考传统的CGI的编程环境中他不喜欢的方面,包括:脆弱、缺乏面向对象和暴露Web服务器细节等。从这些最初的沉思开始,在返回的飞机中Jim写出了Zope 的核心内容。

一般企业IT部门的技术人员,通常很难完全掌握复杂的可重用组件开发技术,比如J2EE/.NET。而Zope最初的目标,就是针对这些懂得基本编程技能的开发人员,也就是Web脚本开发人员。Zope服务器提供了一个Web开发界面,开发人员可简单地创建各种脚本对象,便可构建出所需要的web应用。这个过程,避免了耗时的编译过程,也没有复杂的配置文件,更不需要用户掌握类、重载、继承之类的任何概念。完成脚本后,马上就可以测试看到结果。对脚本开发人员的支持,是Zope最重要的特性之一。


Zope脚本开发技术和原理

Zope 上主要的脚本开发对象包括Script (Python)、ZPT(Zope Page Template)、DTML、Z SQL Method,他们分别负责逻辑代码、HTML/XML页面展现、非HTML的内容生成、关系数据库SQL操作。其中,ZPT类似JSP/PHP/ASP 语言。

Zope 所有的脚本对象,以及其他的内容、工具对象,都保存在一个叫做ZODB的对象数据库中。ZODB实现了对象的透明存取,开发人员不必关心对象的存取细节,避免传统关系数据库中的O/R映射这一环节,大大简化了开发过程;ZODB支持事务处理,能够用于企业关键应用;ZODB支持自动的对象缓存管理,能够调节和优化性能;最重要的,ZODB支持ZEO(Z Enterprise Object),可将对象分布在多个Zope实例上并行运行并保持同步,这使得Zope能够支持多机负载均衡,可平滑扩展,用于大型的应用。同时, Zope也提供了一组关系数据库适配器工具和SQL脚本对象,脚本开发人员使用他们,也能够轻松构建传统的关系数据库应用。

所有的对象都保存在ZODB中,Zope负责对这些对象的发布。事实上,ZOPE就是“Z对象发布环境”的简写(Z Object Publishing Environment)。用户可通过http、ftp、xml-rpc或webdav等途径访问ZODB中的对象。Zope首先将各种请求统一封装为一个 REQUEST对象,然后根据请求的URL路径在树状结构的ZODB中逐个访问各个对象,最终定位到目标对象。这个过程叫做对象的漫游(Traverse)。找到目标对象后,Zope将请求中的参数解析、预处理、传递到对象的默认方法中并执行,最后将执行结果返回到最终用户。这个过程中,Zope可负责从 URL到对象方法执行的整个过程,而脚本开发人员仅仅需要构建和拼装各个脚本对象。

整个对象发布过程,都是受Zope内置的权限控制保护的,未经授权的用户不能访问到对象,或者不能执行发布方法。Zope的管理界面中,管理人员能够成组管理用户和分配权限,控制对象的访问和方法的执行,或者委托他人进行网站局部区域的管理。脚本开发人员基本不必在代码中编写的权限控制逻辑,只需由管理和集成人员使用Zope配置管理界面设置完成。

如何和现有系统的用户帐号进行集成登录认证,是企业部署常见的问题。Zope有可插拔的用户认证和管理机制(acl_users),安装相关插件产品并设置完成后,可通过LDAP接口和Windows的活动目录实现集成(LDAPUserFolder),也可直接利用现有关系数据库中的用户帐号信息进行登录认证。


扩展开发和Zope3

脚本开发适合针对具体应用的开发;如果需要构建Zope上可重用、可再发布的软件,可在文件系统上开发插件产品(Products)。插件产品的开发,需要掌握更多的开发技能,面向的是组件化的扩展开发人员,可满足十分复杂开发需要。

Zope 目前包括Zope2和Zope3两个分支版本. Zope2基于传统的对象继承技术,目前已经十分稳定,特性丰富,Plone等大型应用均基于Zope2开发完成。Zope 2对脚本开放人员非常友好,但是对于扩展插件产品开发人员,却并不友好。Zope 2使用了大量的类继承,对象的耦合性非常高,接口文档也不全。这使得Zope 2形如巨兽,难以驾驭,Zope 2的扩展开发学习曲线相对比较陡。

针对了Zope2的开发经验和教训,Zope3则是采用最新的设计模式和组件架构技术,对Zope2的一个重写。在Zope3中,组件之间通过配置文件(ZCML),按照接口适配拼装,组装成应用。Zope3采用类似J2EE的对象松耦合架构,同时具备 Python的简洁性和优美性。Zope 3上已经发展了很多项目,最典型的一个是ubuntu Linux的发行管理平台lauchpad(launchpad.ubuntu.com). Zope 3对扩展开发人员更加友好,对传统的Zope 2脚本开发支持也正在逐步加强和完善。

从Zope 2.8开始,Zope 2引入了一个叫做Five的插件产品,可在Zope2中可以使用Zope3的大部分技术。从Zope 2.9开始,Zope的很多内部核心组件,已经替换为Zope3的新代码。Zope 2逐步成为Zope 3的一个特殊定制版本,Zope2到Zope3正走向一条平滑过渡的路线。

Zope主要使用Python语言编写,在关系系统性能方面的模块则使用C语言编写,可在Windows、Linux、Unix、Mac OS等多种平台上安装运行。特别是在Windows平台上拥有傻瓜化的安装包,用户上手试用非常方便。
Zope的中文化目前已经有完整的解决方案,中文Zope用户组(www.czug.org)是国内最专业的Zope技术社区。