Diferencia entre un web server y un application server

Si eres como yo y tu manera de crear una API era simplemente levantar una aplicación de express con NodeJS y empezar a consumirla, probablemente estes confundido en lo que es un web server y en lo que es tu API de express. Aquí tratare de darte una idea de lo que dice el título de este post!

Quizas conozcas ya algunos web servers de uso general como Apache, Nginx o Microsoft IIS. Estos webservers son conocidos como de uso general, porque pueden "servir" una amplia gama de contenido. A ellos no les interesa de que tipo es tu website o API (puro HTML, puras imágenes, javascript, etc.), ni si cambió su contenido, ni nada, a ellos solamente les interesa contestar peticiones o pasar peticiónes a algún otro handler o aplicación (como NodeJS) para contestar algo a la petición.

Esta algo confuso su explicación. Yo lo veo como un middleware ó filtro que maneja mis peticiones antes de llegar a mi servidor de NodeJS. Esto solamente si es que existe, ya que algunos webservers como nginx, no les interesa si existe código o un handler/aplicación para las peticiones, ellos solitos pueden contestar algo sin la necesidad de un handler/apliación, ya que son independientes a la aplicación que esten sirviendo.

Al servidor que se inicia con NodeJS (o con Java tomcat, python, etc) se le llama application server, a estos servidores si les importa el código, es decir, si el código cambia, lo mas correcto seria reiniciar el servidor para asegurar que los cambios se muestren correctamente.

En otras palabras podemos decir que un web server es un pedazo de software que escucha y contesta peticiones (requests) de información, usualmente las peticiones se realizan a traves de un web browser. De igual manera un webserver se puede comunicar con otro tipo de clientes (aplicaciones, cURL, etc.).

Por otro lado, un application server es un pedazo de software que igualmente escucha y contesta peticiones, pero que se dedica principalmente a realizar procesos pesados y a hablar con la base de datos.

Ambas tecnologías se pueden utilizar en conjunto. En donde en el momento que se realice una petición al web server, este la manejara dependiendo de como este configurado y la "mandará" a un application server en caso de que exista, Después de que el application server maneje la petición, se enviara la respuesta al cliente. (A esto se le llama reverse proxy)

Es normal utilizar Nginx como un reverse proxy para un application server creado con NodeJS.

Espero que se haya logrado entender algunas de las diferencias básicas entre estos dos. Pronto estaré subiendo un post sobre la manera de configurar un webserver con nginx :)