You are not logged in Log in Join
You are here: Home » Members » tazzzzz » Comparison of ACS and Zope

Log in
Name

Password

 

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.