[afnog] Scalable, Performance-Critical Web Application Architecture

Begumisa Gerald M beg_g at eahd.or.ug
Thu Sep 2 15:06:04 EAT 2004


    > If your daemon has any chance of blocking for a long period when
    > handling an individual request, then it will need to be either
    > forking or multithreaded, both of which add significant complexity,
    > especially if you want to have a 'pool' of available connections to
    > the Mysql database.

Yeah, locks and stuff I presume.

    > Option C: use 'fastcgi': see http://www.fastcgi.com/, and Apache
    > mod_fastcgi.

Not sure why I didn't take a closer look at this.

    > This gives you the best of both worlds. mod_fastcgi starts one or
    > more copies of your application (it can be dynamic or fixed). Each
    > CGI request is passed down a socket to one instance of your
    > application, which handles it and sends back the response. But
    > unlike CGI, your application is persistent; it has a central main
    > loop which handles one request, sends one reply, then goes back to
    > wait for another request. (A CGI would terminate after handling one
    > request). So, before the main loop, it can open one database
    > connection, and use it to handle each request.

Bingo.

    > #!/usr/local/bin/ruby require 'fcgi'
    >
    > FCGI.each_cgi do |cgi|
    >   # Now we have a cgi object which we handle just like a normal CGI
    >   name = cgi.params['whoami'][0]
    >   if name
    >     puts cgi.header
    >     puts "<html>Hello, #{CGI.escapeHTML(name)}!</html>"
    >   else
    >     puts cgi.header
    >     puts "<html>Enter your name: <form method='POST'><input type='text' name='whoami'></form></html>"
    >   end
    > end
    >
    > You can run this from the command-line for testing, as a standalone
    > CGI, or under mod_fastcgi, with no changes.

Thanks for the extensive help on this, as well as the installation
guidelines & examples.  Will keep you posted if I follow through an open
source framework for writing apps (in C/C++) with option B (multithreaded
daemon + connection pooling), not sure if any already exists though apart
from the one already integrated with SqWebmail...


Gerald.


More information about the afnog mailing list