Wednesday, December 1, 2010

Re: Django in production on Windows

It's a shame you are not using a *nix os, because you could have then used uWSGI (http://projects.unbit.it/uwsgi/).

Feature list:

Current core features are

  • written totally in C
  • very fast (and simple) communication protocol for webservers integration (apache2, nginx, cherokee and lighttpd modules available)
  • low memory footprint (thanks to the evil premature optimizations)
  • support for multiple application in the same process/domain
  • a master process manager that will allows you to automatically respawn processes and monitor the stack status
  • preforking mode to improve concurrency
  • address space and rss usage reports
  • advanced logging (even networked, see UdpLogging)
  • static file serving via sendfile() (where available)
  • portability (tested on Linux 2.6, Solaris/OpenSolaris, OpenBSD, NetBSD, DragonflyBSD, FreeBSD, MacOSX and Haiku)
  • support for funny architectures like SPARC64 or ARM
  • support for threads (configurable, available from 0.9.7-dev)
  • cgi mode for lazy users or ugly webservers (example cgi included here and here)
  • harakiri mode for self-healing
  • vector based I/O to minimize syscall usage
  • hot-add of applications. See DynamicApps
  • on the-fly configuration parameters. See ManagementFlag
  • big (professional) user-base (hundreds of production ready wsgi apps) thanks to its main development managed by the Italian ISP Unbit
  • commercial support available (contact Unbit for informations)
  • all code is under GPL2 (but you can buy a commercial license if you want to modify it without releasing source code)
  • configurable buffer size for low-memory system or to manage big requests
  • customizable builds (you can remove unneeded functionality)
  • intelligent worker respawner wih no-fork-bombing policy
  • limit requests per worker
  • process reaper for external process managers (as daemontools). Avoids zombie workers.
  • Per-request modifier for advanced users (See RunOnNginx for an example usage, and uwsgiProtocol for the modifiers list)
  • UNIX and TCP socket support
  • Graceful restart of worker processes and hot-plug substitution/upgrade of the uWSGI server using Signals. See uWSGIReload
  • A shared memory area to share data between workers/processes. See SharedArea
  • An integrated Spooler for managing long running task.
  • Message exchanging (via uwsgi protocol) for easy-implementation of distributed applications (look at ClusteredExamples)
  • Get statistics of all the workers using the EmbeddedModule
  • Integrated Async/Evented Proxy for load-balancing and healtchecking of big clusters (from version 0.9.5)
  • Address space usage limiting (from version 0.9.5)
  • integrated SNMP agent and nagios-friendly output (from version 0.9.5) See UseSnmp
  • VirtualHosting mode (from version 0.9.6)
  • Embedded threaded HTTP server for easy development and testing (from version 0.9.6)

TODO/Working on

  • integrated support for wsgi middleware (is it really useful ?)
  • put some more code comments to gather external developers ;)
  • better anti-fork bombing policy (lesser dumb)
  • advanced conditional logging (already available in 0.9.6.5, more to come in 0.9.7)
  • Linux cgroups integration (work already started in 0.9.7-dev) see UseCgroups
  • SSL support (with certificate client authentication) to allow remote management of the uWSGI stack
  • support for multiple listening sockets (already available in mercurial repository, simply add more --socket options)
  • Web3 (PEP-444) (already available in mercurial repository)
  • IPv6 support (targeted at 0.9.7 release)
  • SCTP support (experimental support is in 0.9.5 trunk, but no performance gain, still hard work needed)
  • Event Dispatcher (execute callable on external events like file changes, bonjour/avahi/dnssd message, timers...) (work started in 0.9.6-dev, targeted at 0.9.7)
  • hash table over SharedArea (for ultra-fast integrated caching)
  • AIX, Hurd, MorphOS support (targeted at 0.9.7)
  • Better Rack/RubyOnRails plugin
  • Async Mode optimizations (work already started in 0.9.7-dev)
  • Threading mode support (already available in mercurial repository, simply add --threads <N> to spawn N thread cores)
  • fully pluginize python support to make a total language agnostic server (main feature of 0.9.7 release)
  • Move embedded http server from threads to evented
  • Add Message Queuing system (with publish/subscribe) on top of the Spooler (and export it via STOMP protocol to third party software)



On 01/12/2010 15:26, Javier Guerra Giraldez wrote:
On Wed, Dec 1, 2010 at 6:43 AM, ashdesigner <antony.shashkin@gmail.com> wrote: 
The only undiscovered issue to us is whether we can launch a heavy loaded website in Django under Windows (IIS) + MSSQL. Would appreciate any comment please. 
 a WSGI plugin for IIS would be the best answer; but there's nothing wrong with FastCGI.  properly managed can sustain as high load as anybody else.  unfortunately, the most common FastCGI->WSGI adapter (flup) is quite good and performant; but limited in terms of dynamic process/thread lifetime managing.  a more 'modern' approach could be gunicorn or Tornado.  since both of them handle HTTP->WSGI, your IIS frontend would have to proxy those requests, but i guess that's a standard feature of any webserver  

No comments:

Post a Comment