Application Server

What features does an Application Server provide, that one would use it instead of a generic Web Server (e.g. Apache) and a CGI-development language?

  • service which keeps the language runtime running In-Memory at all times (key for Scripting Language)

    • and maybe the semi-compiled custom code as well
  • stub to maintain and pool connections to a database server, typically a relational database, but not necessarily. (Even if the app server has some sort of persistence support, it's inevitable that many developers will want to connect to an external SQL-based engine.)

  • authentication management and control. Groups and roles, db of user assignments (the latter in particular may be stored in an external store and accessed via LDAP, SQL, or something else).

  • some form out output-page template authoring (Template System), so that you don't end up with lines of code to push out HTML to a stdout.

  • maybe some sort of HttpCaching mechanism to improve delivery performance for dynamic pages

  • if you combine the requirements of clustering (running multiple servers in parallel to handle large load) and server-side data-caching (for user state data that you don't want to have to go back to the database for), then you end up with a cache-replication requirement which raises the bar significantly. In most cases, I would recommend (a) a redirection router that does sticky assignments (so that a given user keeps getting directed to the same individual server during a session), and (b) saying it's OK for some data loss if a given server crashes in the middle of a user session.

An Application Server is typically tied to a single programming language. So, while you would like to stick to a single AS, that means you have to do all your development in a single language. That can be a tough call. (Hmm, I should say you have to use a single higher-level language: you can probably write any performance-intensive stuff in C or C++, and call it from a Scripting Language.

  • OK, I take it back (5 minutes later). Microsoft's stuff is multi-language: you just have to follow a single (badly-designed, COM, ptui) object model.

  • Also, Zope has made some efforts to support Perl Language in addition to Python, though I don't know how active that work is.

Application Servers have become giant pieces of infrastructure. For smaller operations, many of them are too expensive and complex to justify themselves.

Purchase price can of course be handled via Open Source/LAMP packages: Zope, PHP, JBoss, chunks of Java Apache, etc. Complexity (and lock-in) is still a problem.

Some complex applications seem to beg to be written on top of an Application Server.

But (a) some of these have been grown on top of proprietary app servers (because the widely-used servers haven't been around that long), or (b) you have to worry about buying an application that sits on top of an app server different from the one you've already bought and built your custom stuff around. Or, conversely, if you haven't bet on an app server yet, you may want to consider the choice of underlying app server when picking which higher-level app to buy. In other words, you might prefer Vignette as a CMS, but decide that you want to do all your in-house development via Microsoft tools, thus be pushed toward a different CMS.

With big nasty applications, a big question is always Buy Build Avoid.

Edited:    |       |    Search Twitter for discussion