You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by fi...@apache.org on 2007/04/13 04:45:57 UTC
svn commit: r528329 - in /httpd/sandbox/amsterdam/architecture: ./
README.txt owner_config.txt parent_run.txt parent_startup.txt
worker_run_backend.txt worker_run_frontend.txt worker_run_middle.txt
worker_startup.txt
Author: fielding
Date: Thu Apr 12 19:45:56 2007
New Revision: 528329
URL: http://svn.apache.org/viewvc?view=rev&rev=528329
Log:
Initial try at splitting up the roadmap into digestible
chunks that can be worked on (mostly) independently.
Hopefully it will remind folks of other bits worth changing.
Added:
httpd/sandbox/amsterdam/architecture/
httpd/sandbox/amsterdam/architecture/README.txt (with props)
httpd/sandbox/amsterdam/architecture/owner_config.txt (with props)
httpd/sandbox/amsterdam/architecture/parent_run.txt (with props)
httpd/sandbox/amsterdam/architecture/parent_startup.txt (with props)
httpd/sandbox/amsterdam/architecture/worker_run_backend.txt (with props)
httpd/sandbox/amsterdam/architecture/worker_run_frontend.txt (with props)
httpd/sandbox/amsterdam/architecture/worker_run_middle.txt (with props)
httpd/sandbox/amsterdam/architecture/worker_startup.txt (with props)
Added: httpd/sandbox/amsterdam/architecture/README.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/README.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/README.txt (added)
+++ httpd/sandbox/amsterdam/architecture/README.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,66 @@
+Architecture Overview
+=====================
+
+A software architecture is an abstraction of the run-time elements of
+a software system during some phase of its operation. A system may be
+composed of many levels of abstraction and many phases of operation,
+each with its own software architecture. Each abstraction is,
+essentially, an artificial view of system behavior in which the
+within-element behavior is hidden from view in order to concentrate
+on the interaction among the elements at the chosen level of abstraction.
+
+In other words, splitting up the design in terms of independent
+software architectures makes it easier to reduce the scope of what
+we are talking about for the whole system to only those things that
+we need to talk about for each independent architecture, which in
+turn helps us divide and conquer the work.
+
+The existing Apache httpd architectures are pretty well described by
+the Apache Modeling Project at
+
+ http://www.fmc-modeling.org/projects/apache/index.php
+
+and I would use their stencils if I had access to Visio 2003.
+Plain text will have to do for now.
+
+Server software has a fairly well-understood set of operative phases
+(startup, run, restart, shutdown) each with its own set of sequential
+tasks that can be considered sub-phases:
+
+ OWNER | PARENT | WORKER
+ | |
+ edit config | |
+ | |
+ start server | startup |
+ | main invocation |
+ | read system config |
+ | set shared data |
+ | init workers | startup
+ | enter run phase | read worker config
+ | | check for shutdown
+ | run | listen/wait
+ | loop |
+ | set shared data | run
+ | monitor workers | accept connection
+ | until signal | loop
+ | | read request
+ check status | | send response
+ | | while keepalive
+ | | close connection
+ graceful | restart |
+ restart | set worker shutdown | shutdown
+ | pipe of death? | run cleanups?
+ | | exit
+ stop server | shutdown |
+ | set worker shutdown |
+ | pipe of death? |
+ | wait for workers |
+ | kill remaining workers |
+ | run cleanups |
+
+
+That's just a broad overview -- if you can think of other phases,
+feel free to add them. The rest of the files in this directory
+attempt to address each of these architectures, and whatever others
+we think of along the way.
+
Propchange: httpd/sandbox/amsterdam/architecture/README.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/owner_config.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/owner_config.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/owner_config.txt (added)
+++ httpd/sandbox/amsterdam/architecture/owner_config.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,31 @@
+Owner Configuration
+===================
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Build a cleaner configuration system based on an Object Model,
+ rather than a file/specific directives.
+
+ * Investigate using small scripting languages for complicated user
+ configurable things, including Caching Rules, Rewrite Rules, and
+ AAA/Require Rules. Look at Varnish's VCL or lighttpd's mod_magnet
+ for interesting examples:
+ <http://phk.freebsd.dk/pubs/varnish_tech.pdf>
+ <http://trac.lighttpd.net/trac/wiki/Docs:ModMagnet>
+
+ * Stick with NCSA syntax, or change to a
+ - properties style of syntax?
+ - XML syntax?
+ - something else?
+
+ * How about a simple configuration template mechanism, like:
+
+ T.generic: {
+ host.name: $host
+ host.admin: webmaster@$host
+ host.root: /home/customers/$host/www/
+ ...
+ }
+
+ myhost = T.generic[$host = "myhost.com"]
Propchange: httpd/sandbox/amsterdam/architecture/owner_config.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/parent_run.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/parent_run.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/parent_run.txt (added)
+++ httpd/sandbox/amsterdam/architecture/parent_run.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,13 @@
+Parent Runtime
+==============
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Promote and include a external-process communication method in the
+ core. This could be used to communicate with PHP, a JVM, Ruby or many
+ other things that do not wish to be run inside a highly-threaded and
+ async core. We should optionally include a process management framework,
+ to spawn these as needed, to make configuration for server administrators
+ easier.
+
Propchange: httpd/sandbox/amsterdam/architecture/parent_run.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/parent_startup.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/parent_startup.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/parent_startup.txt (added)
+++ httpd/sandbox/amsterdam/architecture/parent_startup.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,13 @@
+Parent Startup
+==============
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Refactor MPMs to split platform specific needs from the process
+ and thread models. A reasonable goal is to have one thread model
+ that runs on both unix and winnt.
+
+ * Provide a generic IPC or Scoreboard mechanism with an easy to use API
+ for modules and the core.
+
Propchange: httpd/sandbox/amsterdam/architecture/parent_startup.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/worker_run_backend.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/worker_run_backend.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/worker_run_backend.txt (added)
+++ httpd/sandbox/amsterdam/architecture/worker_run_backend.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,18 @@
+Worker Runtime Backend (representation providers)
+======================
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Investigate using Syslets for functions like stat():
+ <http://lkml.org/lkml/2007/2/13/142>
+
+ * Promote and include a external-process communication method in the
+ core. This could be used to communicate with PHP, a JVM, Ruby or many
+ other things that do not wish to be run inside a highly-threaded and
+ async core. We should optionally include a process management framework,
+ to spawn these as needed, to make configuration for server administrators
+ easier.
+
+ * VFS-like layer so things like Subversion/mod_dav don't have to fake
+ out the core handlers.
Propchange: httpd/sandbox/amsterdam/architecture/worker_run_backend.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/worker_run_frontend.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/worker_run_frontend.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/worker_run_frontend.txt (added)
+++ httpd/sandbox/amsterdam/architecture/worker_run_frontend.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,10 @@
+Worker Runtime Frontend (protocols, caching)
+=======================
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Include support for Waka, once an RFC/more details are available.
+
+ * Make the http protocol a module, decoupled from the core.
+
Propchange: httpd/sandbox/amsterdam/architecture/worker_run_frontend.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/worker_run_middle.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/worker_run_middle.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/worker_run_middle.txt (added)
+++ httpd/sandbox/amsterdam/architecture/worker_run_middle.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,26 @@
+Worker Runtime Middle-end (request/response mapping, brigades)
+=========================
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Async IO Core, including a generic Event Loop, allowing modules and
+ protocols to register new events and when to be notified.
+
+
+ * Break the 1:1 mapping of a worker to a single request.
+
+
+ * Use Serf (and its Bucket system) as the starting point for making
+ filters, buckets and brigades work with the Async Core.
+ <http://code.google.com/p/serf/>
+
+
+ * Investigate providing a higher level module API, which hides the
+ complexity of an async core. Basically, a 'simple world view' for those
+ that want to write a simple generator.
+
+
+ * Provide a generic IPC or Scoreboard mechanism with an easy to use API
+ for modules and the core.
+
Propchange: httpd/sandbox/amsterdam/architecture/worker_run_middle.txt
------------------------------------------------------------------------------
svn:eol-style = native
Added: httpd/sandbox/amsterdam/architecture/worker_startup.txt
URL: http://svn.apache.org/viewvc/httpd/sandbox/amsterdam/architecture/worker_startup.txt?view=auto&rev=528329
==============================================================================
--- httpd/sandbox/amsterdam/architecture/worker_startup.txt (added)
+++ httpd/sandbox/amsterdam/architecture/worker_startup.txt Thu Apr 12 19:45:56 2007
@@ -0,0 +1,12 @@
+Worker Startup
+==============
+
+ROADMAP DISCUSSION POINTS:
+ (Please place new entries at the bottom)
+
+ * Refactor MPMs to split platform specific needs from the process
+ and thread models. A reasonable goal is to have one thread model
+ that runs on both unix and winnt.
+
+ * Provide a generic IPC or Scoreboard mechanism with an easy to use API
+ for modules and the core.
Propchange: httpd/sandbox/amsterdam/architecture/worker_startup.txt
------------------------------------------------------------------------------
svn:eol-style = native