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