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 conNodeJS
.
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 :)