Comparison of ACS and Zope
By Kevin Dangoor. Initial Draft: April 18, 
2000. Current revision: May 1, 2000
�
This document is a comparison between Zope and the arsDigita 
Community System (ACS). It should be considered a work-in-progress, and feedback 
on it can be sent to [email protected] . Change history can 
be found at the end of this document.
�
It is also worth noting that I did not actually install ACS, which looks to 
be a fairly big job if you're not already running Oracle. This information is 
based upon my first hand experience with Zope, and what I have read in the ACS 
documentation and discussion groups.
�
Finally, this comparison is based upon things that matter to me. Some of 
these things might not matter to you.
Introduction
Zope and ACS are quite different in how they approach the 
problem of making dynamic websites. Zope includes an object oriented database, 
and makes every object available for direct access through the web via a URL. 
ACS uses a more traditional relational database platform. Both are Open Source, 
though ACS requires the commercial Oracle DB. There is a group called OpenACS 
(http://www.openacs.org) that is porting 
ACS to PostgreSQL. ArsDigita is providing some support to this group, but 
OpenACS will generally lag behind the main ACS code.
Scalability
ACS: ACS is built on top of AOLServer and Oracle. According to 
Ars Digita people, AOLServer is used in about 3% of the heaviest trafficked 
websites. AOL itself uses AOLServer, Sybase and IRIX as its platform, which 
serves up 28,000 hits per second. AOLServer can be extended using a built in TCL 
interpreter, and this is how much of ACS is built. The TCL interpreter is thread 
safe, so a long, computationally intensive job can run while requests continue 
to get processed. Oracle is reportedly used in many of the busiest websites 
(Amazon, etc). ACS has a server clustering module which will transparently 
maintain state between multiple servers http://www.arsdigita.com/doc/server-cluster.html. 
As I understand it, the TCL interpreter is considerably (possibly an order of 
magnitude) slower than the Python interpreter. ACS has a fairly complicated 
table structure. I'm sure Oracle has some fine-tuned code for handling 
complicated queries, but those will doubtless slow dynamic page 
generation.
�
Zope: Zope is typically run behind Apache, these days using 
FastCGI. Zope is written in Python. Zope and Python are designed for 
multithreaded operation, so running requests should not prevent other requests 
from getting through. Zope is used in some medium-traffic environments, but no 
one has stepped forward as having a truly high traffic site. Benchmarks that 
people have run seem to show that an inexpensive server machine with a 
moderately dynamic page can probably churn out 1M hits per day, and bigger 
hardware should certainly handle more. In May, Zope Enterprise Objects (ZEO) 
goes Open Source. ZEO allows you to replicate the Zope Object Database (ZODB) 
onto multiple machines, providing a relatively straightforward mechanism for 
handling higher volumes of trafffic. Additionally, some maintenance or reporting 
tasks could be farmed out to other machines that are not taking production 
traffic. Zope's object caching (and SQL query caching for database applications) 
can do a lot to improve performance. Additionally, it is my feeling that the 
FileSystem Storage probably has a lot less overhead than pulling in data from an 
RDBMS over a socket. I do believe that Zope provides many ways to get creative 
to handle the load as needed... these ways are just not pre-established and 
well-tested.
Other considerations: If we're doing lots of writes to the 
ZODB, we will run into issues with the current ZODB implementation.
- Data.fs file will grow dramatically
 - Too many simultaneous writes to a single object could lead to ConflictErrors.
 - Too many objects in a single ObjectManager will lead to performance degradation
 
Good application design can get around any of these 
issues.
�
Advantage: Tie. AOLServer and Oracle have 
proven themselves as scalable systems, whereas Zope is a bit greener. Zope, on 
the other hand, provides many not difficult ways to tackle load issues, and ZEO 
will provide replication capability to handle major load. I'll call it a tie, 
because while the ACS architecture has proven it can handle really large traffic 
volumes, I believe Zope provides ways to scale that are less expensive (even 
including development time). A part of a Zope site with heavy concurrent write 
volume could be problematic for the ZODB, but one could always bring in Oracle 
to tackle that then.
Platform
ACS: As previously mentioned, ACS is built on top of Oracle. 
Applications are built as a combination of TCL scripts with SQL calls, web pages 
with embedded TCL, and a new template system which helps build pages. You store 
HTML and image files in your filesystem as you would in a traditional web 
setting. The database uses many relational tables to store the "dynamic" 
information such as product info, customer records, etc.
�
Zope: In Zope, everything can be stored in the object 
database. Zope has the ability to talk to different relational databases, but I 
have never used this capability. New developments (Philip Eby's RIPP model and 
using ZClasses as Pluggable Brains) allow you to use SQL databases as needed 
without the Zope applications being aware that they are not pulling their data 
from the ZODB. Everything on the site (web pages, image files, animation files) 
can be stored in the object database. Zope's OO model is very pleasant to work 
with and overall quite consistent.
�
Advantage: Zope. I could be biased because 
I'm more familiar with Zope. I don't think so, however. Once you understand 
Zope's workings, it has a very clean model... everything is an object. You don't 
have to deal with the conceptual divide caused by having some information in the 
database, and some in files on the disk. In fact, you can use RDBMSes as 
appropriate and not have to deal with that divide in your apps.
Development Tools
ACS: Because ACS stores its files in a traditional, file 
system-based manner, it is easy to use any of the standard programming tools. 
You can "grep" through your code to find a specific routine. You can use CVS for 
version control. You can use whatever editor you like.
�
Zope: You can develop code for Zope via standard Python 
classes in the file system, or through the web. I prefer the through the web 
model, because the Python Product model requires you to restart Zope to test 
changes to your product. Additionally, when you develop through the web, all of 
your programming is the ZODB. That means that your *entire site* is in the 
Data.fs file. This is convenient for backup and moving the site from one 
installation to another. You can access Zope objects via FTP, though this is 
imperfect. FTP access allows people to use Emacs and other FTP capable 
editors.
�
Advantage: ACS. I'll give a slight edge to 
ACS in this category. Through the web development in Zope is very convenient, 
but the standard web browser text editor is not very good. If you're working on 
a fairly big project with multiple developers, something like CVS is a big win. 
Perhaps if we use Python Products more, we'll be in better shape. With a few 
small scripts, we could probably create a decent environment for managing 
through-the-web projects using CVS as well. The Zope Mozilla initiative should 
also help provide a better environment for developers of through the web 
products. I think Zope would have the edge here if you didn't have to restart 
Zope to play with your code changes in Python Products. 
E-Commerce
ACS: ArsDigita has developed an e-commerce module that does 
many of the things that Amazon.com does! Professional and customer reviews, gift 
certificates, discounts for certain groups of users, discounts for users with a 
coupon code and more. Plus, they have customer service management (an email 
handler that makes it easy to track email), and order management. The e-commerce 
module does not handle payment by check, but this should be relatively 
straightforward to code.
�
Zope: There is a product called EMarket, but it is not fully 
featured. We have our own home grown code. This code does, IMHO, a good job of 
product display. Zope doesn't (yet) have good, standardized support for 
members/users. This is coming very soon, though.
�
Advantage: ACS. There's no comparison in this 
category. ACS has great commerce features out of the box.
Personalization
ACS: ACS provides data models and code for keeping track of 
things that interest a user, and recognizes the need to be able to correlate 
people's browsing and shopping habits. It has a module for tracking customer 
relationships over time, allowing you to reward regular customers, or try to get 
past customers back.
�
Zope: Zope has a new membership system, called LoginManager. 
The current version does not come with the ability to store information about 
the user, however. This code is expected within the next week or 
two.
�
Advantage: ACS. Again, ACS is the clear 
winner because of its prepackaged ability to tackle much of the personalization 
problem.
Cost
ACS: A group has been porting ACS to PostgreSQL, a free, Open 
Source database. However, this port is not complete, and ArsDigita is not 
actively supporting anything but the Oracle ACS. We might be able to 
get a system up and running on PostgreSQL, but we would probably want to go with 
Oracle longer term. Oracle 8i requires at least 128MB of RAM (I'm sure we would 
want more than the minimum) and costs $6,800 as part of an internet development 
suite. There may be a cheaper way to get it standalone. As our needs increase, 
the Oracle add-ons to handle those needs become quite pricey. Additionally, we 
would have to use a dedicated server from the get-go. We can probably expect to 
pay about $400/month for a beefy enough dedicated server to handle our 
needs.
�
Zope: Everything we need for Zope is free. Zope does not 
require as beefy a server, and (until our traffic is high enough) we can 
continue to use a shared server.
�
Advantage: Zope. ACS is really tied to Oracle 
at this point, and that is a bit of added cost that we wouldn't want right now. 
Oracle installations get more and more pricey as you scale up, whereas we can 
probably continue to scale Zope with free software. There's really not much of a 
comparison in this category.
Localization
ACS: ACS' template system has standardized hooks for using 
localized content. I can't find a reference to it at the moment, but I believe 
the servers are fine with unicode, as well. A lot of ACS' messages are embedded 
in the individual TCL scripts... that is not quite so local language 
friendly.
�
Zope: There is a Zope Internationalization Project. I'm not 
sure how far along they are, but there appears to be quite a bit of work to do. 
I believe the current version of Python does not support strings with two byte 
characters.
�
Advantage ACS. Relevancy for us now: None. 
ACS is farther along, but people have come up with creative ways to 
serve up local content with Zope. It will be a while before we start 
aggressively looking to serve up content for other countries, and I think the 
solutions will be in place by the time we get there. (I think I've read about 
Python 1.6 supporting unicode).
Content Management
ACS: There is a lot of work going on at ArsDigita on the 
content management/separation of power in ACS. http://www.arsdigita.com/doc/templating-etc.html 
gives an idea of some of the work. Specific info about the templating is here: 
http://karl.arsdigita.com/projects/template/doc/
Karl's template system looks to be a decent abstraction and 
appears to be available in beta code. All of this work is in addition to the 
time-tested templating system http://www.arsdigita.com/doc/style.html 
that is very similar to the one in use at AOL today.
�
Zope: Zope has excellent content management tools. Acquisition 
allows for easy inclusion of other objects in a page, and DTML is a powerful 
template language, especially with its construct. It is very easy to 
create new types of documents using ZClasses, and numerous, not very difficult 
ways to implement templates such that designers can work on a full-page view 
have been suggested. DC desires to make Zope very, very strong in this 
area. 
�
Advantage: Zope. I think Zope already has a 
lead here, and that lead will grow. One thing worth mentioning: by storing 
content in individual files on the disk, ACS makes it possible to use tools like 
CVS on your content. Currently, Zope provides no built in mechanism to do 
something similar.
Ad Management
ACS: ACS includes tools to display, rotate and count banner 
ads and click throughs. It supports "ad groups", so that certain ads will be 
shown while the user browses certain pages.
�
Zope: Bill has a released a Banner System that provides for 
local and remote banners as well as banner weighting and random selection. It 
keeps track of its info in the ZODB, so the Data.fs file will grow with each 
hit.
�
Advantage: ACS. ACS' ad tools are more 
advanced, and the Oracle database will handle the writes better.
Site Search
ACS: Obviously, Oracle will handle basic search tasks just 
fine. ACS has created interfaces for serving up "new stuff" regardless of where 
in the database it sits. It appears that full-text search is handled through 
some Oracle thing called "Intermedia", and that Intermedia is a real beast to 
set up (an opinion expressed by people who have already gotten over the learning 
curves associated with bringing up Oracle).
�
Zope: ZCatalog is a breeze to use and is quite flexible and 
speedy.
�
Advantage: Zope. I love 
ZCatalog.
Other Tools
ACS: AOLServer has a built in scheduler to run tasks. ACS has 
a "Spam" module for sending out email (even large amounts). Web-based system 
monitoring tool http://arsdigita.com/free-tools/cassandrix.html
�
Zope: PTK has been coming along been has recently run into a 
personnel issue. I think PTK has too much momentum behind it to really slow 
down, however. ZClasses are a way to develop reusable components easily. 
Numerous contributed products, but not many that can stand up to the ACS 
modules.
�
Advantage: ACS. Lots of modules for doing all 
sorts of things... and plenty of extra tools and docs that show that these guys 
have definitely put together some big sites.
Replication of Components
ACS: By setting up a separate web root, you can get multiple 
sites running on one box, each with its own AOLServer instance. ACS also allows 
subdomaining through its user group system, allowing you to use one database for 
data from multiple sites.
�
Zope: Zope's object oriented nature is very good for breaking 
out components, both in terms of the data and the code. Zope also has existing 
capabilities for handling multiple sites gracefully.
�
Advantage: Zope. Zope has only a slight edge 
in this area. ACS does provide an easy way to run multiple sites on a single 
box. However, Zope applications are built�with objects, so you can subclass 
components to add additional features, or build instance customization features 
into the components. This provides an easy, consistent interface for 
customization from site to site, while allowing you to drop in updates to the 
base code as needed.
Conclusion
Zope is the better choice of the two for me. I had good reason for 
choosing Zope in the beginning. Though ACS offers many components that Zope does 
not (yet) have, Zope's object model provides a platform for much faster 
development. Since no canned app will fully do what we need to do, this is a 
very important consideration.
�
We do need to be concerned about the scalability of our 
application. We have to design it to work well in the Zope environment. Our 
particular application may be perfect for taking advantage of Zope's strengths 
and playing down its weaknesses.
�
As of this writing, I believe that additional research into 
ACS along the way will be useful. ArsDigita's system incorporates many elements 
that were clearly gained through hard-won experience. For someone who
is looking for quite a bit of out of the box functionality,
ACS is a clear choice.
Combining the Two?
Someone is working on embedding Python in AOLServer. If it 
were possible to embed Zope in AOLServer, then you would have access to Zope 
services and TCL-based services like ACS. Is this desirable? I'm not sure. While 
it's nice to think of plugging in modules from different systems to get more 
functionality, the reality is that ACS and Zope are so very different in 
architecture that it might just be painful. We'd probably just end up with the 
pain and limitations of both systems, instead of the power of 
both.
Changes
5/1/2000 - Updated the "Replication of Components" and "Content Management"  sections 
based on feedback from Tracy Adams at aD.
8/28/2000 - Updated the conclusion a bit to reflect that Zope is the right choice based upon *my* needs. ACS is the winner for out of the box functionality.