unamfi/sistop-2021-2

Exposición «Arquitectura de servidores»: Preguntas y respuestas

Closed this issue · 7 comments

gwolf commented

Abro este foro como un espacio de discusión para la exposición que preparó el alumno Luis Mario Pérez, «Arquitecturas de servidores». El video está disponible en:

https://youtu.be/VFr9L5a4Hg8

Pueden consultar también el documento de texto en que el alumno presenta este mismo tema.

Además de participar aquí, les pido que llenen la pequeña encuesta que está disponible en:

https://www.questionpro.com/t/ARiwuZnv9E

Hola! Creo que el nombre y el tema de este issue son de otra exposición!

gwolf commented

Ufffff... ¡Disculpa por mi falla reiterada en este tema! Eso me gano por hacer las cosas ya-ya-rapidito de último momento ☹ Espero que ahora no haya errores...

Que tal Luis muy buena exposición y es un tema muy interesante, solo me generó una duda, ¿Un ejemplo a la arquitectura basada en hilos puede ser los MicroServicios?, en caso de que no me puedes mencionar alguno

Buenas noches compañero, muy buena exposición!
...
No me quedo muy claro lo que es un socket de red, me lo puedes explicar con otro ejemplo. Por favor :(

Hola @Franperceb. Gracias por el comentario :)

Sobre tu pregunta, en realidad los microservicios y la arquitectura de servidor basada en hilos son dos cosas muy diferentes. Lo que es cierto que ambas son arquitecturas; los microservicios son una arquitectura de aplicación, mientras que para servidores software, tenemos la arquitectura basada en hilos. Tal vez alguna confusión también podría darse porque de lo que se encargan los microservicios es, de cierta manera, “balancear” las tareas que llegan a un servidor, aunque normalmente la razón para hacerlo así en los microservicios es para separar responsabilidades, y no para manejar la concurrencia. Lo que traté en mi exposición está enfocado en servidores corriendo en una única computadora, y normalmente cada uno de los microservicios que ofrecen un API en una aplicación estarían distribuidos en muchas computadoras.

Sobre el ejemplo, tal vez conozcas Apache. La configuración por defecto que utiliza un servidor montado con Apache está basado en la arquitectura multihilo. O si alguna vez has programado en Python con frameworks populares como Django, el servidor común que haces (si no cambias la configuración), también es multihilo.

Claro, @HannCM

Un socket es una representación de cualquiera de los 2 extremos de una comunicación cliente-servidor.

Voy a intentar explicarlo con una analogía lo mejor posible:
Imagina que tú quieres comunicarte con alguna oficina, al área de servicio al cliente por correo postal, osea con cartas. La oficina tiene un buzón principal a donde mandas las cartas. Ese buzón está asociado a la dirección de la oficina. Además cada departamento de la oficina tiene su propio buzón. Alguien en la oficina se encarga de poner las cartas del buzón principal en los buzones de los departamentos correctos. Entonces cuando tu quieres escribir a la oficina, abres tu buzón, pones tu carta en tu buzón y le dices al cartero que la transporte a la oficina. Luego la carta viaja hasta que llega al buzón principal de la oficina. Supón que luego ya está en el buzón del área de atención a cliente. Entonces ahí ellos abren su buzón. Luego hacen lo mismo: ponen una carta en su buzón y le avisan al cartero. Luego te mandan su respuesta y termina su comunicación.

Ahora, en el ejemplo:
tu eres el cliente, la oficina es el servidor, la dirección servidor son la dirección IP y puerto del servidor, tu buzón es el socket de comunicación del cliente, los buzones de cada departamento son como los sockets de comunicación del servidor que se crean cada vez que llega una solicitud, y el buzón principal de la oficina es el socket del servidor. Decirle al cartero que se lleve tu carta es como usar una librería de red del sistema operativo para mandar información por la red. Abrir el buzón sería parecido a crear el socket, y terminar su comunicación sería desechar los sockets. Poner una carta en el buzón es como escribir en el socket de red y agarrar la carta, leer del socket.

Perdón por el ejemplo tan largo jaja. Yo me ayudé de esta liga para mi expo, por si la quieres revisar: https://docs.python.org/3/howto/sockets.html

gwolf commented

Agregando "pedacitos" a lo que bien respondió @LuisMPS:

  1. Muy cierto, los "microservicios" son completamente otra cosa -- o tal vez sea correcto decir, es una decisión tomada en otra capa de tu diseño de aplicaciones. Los microservicios son pequeños servidores con una lógica limitadita a responder dentro de un ámbito específico de aplicación; por ejemplo (y mal ejemplo, ¿eh? no muy realista), yo podría construir un sistema Web que consulte –mediante un microservicio– la hora actual y los datos del usuario actual, cada uno de ellos provistos por otra computadora. Dicha computadora podría implementar estos microservicios usando alguno de los modelos descritos en la presentación de @LuisMPS.
    Ojo, corrección menor a lo que mencionas en tu respuesta: Apache es típicamente visto como el ejemplo más conocido de arquitectura multiprocesos, no multihilos. Existe un modo de operación (un worker) de Apache multihilos, pero no es muy popular.
  2. Respecto a los sockets, me encantó el símil que hiciste. Tal vez no sea el más riguroso o detallado, pero está muy bueno. Y siempre se pueden explicar los puntitos de duda 😉