Zope: 一个开源的web应用服务器

又一个开源Web应用服务器

如果你是一个Python语言的爱好者,那你应该知道 Zope这个Python上的杀手级软件;如果你阅读过Eric Raymond的著名的开源启蒙文章《魔法大熔炉》,那你应该知道 Zope这个经典的开源商业化案例;如果已经厌倦了J2EE的繁琐,或者Ruby On Rails的过于简单,那么, Zope应该是值得你关注的另外一个选择了。
Zope( http://zope.org )是一个开放源代码的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用户组([url]www.czug.org[/url])是国内最专业的 Zope技术社区。