This blog is powerd by a system base on an architecture I've built over the last few years with Geode, a company I partner with. It is based on a number of specialized servers communicating via TCP/IP (based on Indy). These servers are written in the Delphi language and can be compiled (with the same source code) both on Linux and Windows. This flexible architecture has been designed to make it easy to build any type of web site.
But how does it work and how to you customize a web site? Let me start from the foundations of the architecture...
At the core there is a document management server. This is capable of managing documents (saved as XML files), arranging them by type and by status (for workflow management) and versioning them. Every time you modify a document the old version is safely stored. XML documents are saved in the file system, which means there is no SQL database to power this site (and even much bigger ones). Document changes are automatically forwarded to all interested servers, using the observer pattern implemented in a brokering server. This server is also capable of starting the other servers that make up a web site when they are needed.
To process these documents we use one (or more, in complex sites) servers capable of aggregating information and querying it. The data structures are defined with XML schemas and the (relevant) data is kept in memory, making even complex queries extremely fast. The schemas determine the data structures in memory, which are populated by the data of XML documents of many different types: the data is extracted by those (possibly etherogeneus) documents using XSLT. The XSLT layer to process the inpuot data provides also a filter for documents. Of course, the document status key to its processing. These servers can create a snapshot of their data which speeds up rebooting.
Once you have the data in memory, you have two ways to access to it via SOAP commands, by executing queries defined in a set of commands (again, XML documents) and you can access the data via Web. In both cases, a very simple Apache module forwards the HTTP request to the proper server (again, via sockets).
The web request
server uses a Cocoon-like sitemap for invoking XML-based scripts and applying to their resulting XML the proper XSL transformation (mostly XSLT, but also XSL-FO to produce PDF documents on the fly). The sitemap is extremely powerful in allowing you to configure the URLs at will, for example mapping path portions and fake HTML file names to internal parameters, like I've done on this site.
The XML script generally issues one or more commands to other servers, with following commands possibly based on the outcome of the previous one. The script can also access to session-information (sessions are based on temporary cookies).
Using the system to create this site, I simply had to define a set of XML schemas (for the blog itself, the blog entries, the talkback entries), write about 15 XML scripts and corresponding XSLT documents, including the data display, the data entry forms, and the RSS and ATOM outputs. You don't see all of the pages because some are reserved to the administrator. I had no need to touch the Kylix code and recompile the servers! And this is the first blog ever done with this architecture.
As you can see I like what we have developed. We've mainly used this architecture for business sites (thanks to its extensive scalability: you can split the various servers that make up a site on multiple computers), including a complete accounting and management system on the web, Other sites include musicians sites, newsgroups front ends, and blogs.
The architecture is really nice and we are planning to make it avaialble to other developers. We may even end up open sourcing at least portions of it. For now, we are considering partnerships on the development of medium/large projects and also partnerships to take this technology to the market! Sorry if this last bit sounds like an ad (it is really), but this is generally the next question I get ("can I have it?") so I decided to reply up-front.
With an added AJAX layer to the already existing XForms-based data entry system and the powerful OLAP data navigation, it can become even nicer. Stay tuned...