Header Ads Widget

Ticker

6/recent/ticker-posts

¿Cuál es la diferencia entre contenedores y microservicios?

 

Con demasiada frecuencia, las opciones técnicas se enmarcan como una propuesta de “una u otra”. Parece existir la sensación de que si utiliza la tecnología A, la tecnología B no se puede implementar; la realidad, sin embargo, es que la relación entre tecnologías es a menudo tan compleja que desafían tales comparaciones.

Muy pocas cosas en el mundo del software caen en este paradigma con tanta fuerza como los contenedores y los microservicios. A menudo discutidas como estrategias en competencia, las dos representan diferentes formas de pensar que se pueden aprovechar para proporcionar un mejor producto en general.

A continuación, compararemos contenedores y microservicios. Veremos qué los hace adecuados para el desarrollador promedio, cuáles son algunas fortalezas y debilidades, y algunos casos de uso para los que son apropiados. También discutiremos algunas tecnologías estándar detrás de ambos y miraremos hacia el futuro para ver hacia dónde se dirigen.

¿Qué es un contenedor?
En su forma más básica, un contenedor es simplemente un proceso aislado. Es una colección de recursos segmentados y funciones de aplicación para hacer una cosa específica: es, literalmente, un "contenedor" lleno de todo el código, las dependencias y un entorno de ejecución necesarios para realizar un proceso.

Un contenedor es esencialmente como un automóvil. Los automóviles contienen todo lo que una persona podría necesitar para ir de un lugar a otro con relativa comodidad y seguridad. Desde el motor, el aire acondicionado y el carburador, todo está diseñado para la función de forma específica y hay muy pocas funciones extrañas. Nunca encontrará un sedán estándar construido con un horno adentro, porque eso no está dentro del dominio de lo que se supone que debe lograr.

Este límite en la funcionalidad y el factor de forma preempaquetado ofrece varios beneficios. El principal de ellos es el hecho de que permite la portabilidad entre pilas y plataformas. Cuando un contenedor contiene todo lo necesario para funcionar, es independiente de la plataforma: el contenedor puede hacer el trabajo que necesita, independientemente de dónde viva. Además, esto hace que los contenedores sean livianos y eficientes, ya que hay una dependencia externa mínima o requisitos inesperados que hacen que las operaciones sean pesadas.

¿Qué es un microservicio?
Un microservicio es una microfunción distinta que forma parte singular de una colección más grande de funciones. Los microservicios se definen mejor por cómo encajan en esta colección que como una entidad singular. Por ejemplo, imagine un flujo de nivel superior en el que un usuario realiza una solicitud y se le entrega una página. En un sistema monolítico , todos los procesos y sistemas se construirían en un solo recurso monolítico. Esto puede funcionar bien al principio, pero ¿qué sucede a medida que ampliamos los requisitos de ese proceso de servicio de datos? A medida que crecemos en complejidad, crecemos en los gastos generales para administrar.

Una solución a este problema es dividir el proceso monolítico más grande en muchas operaciones más pequeñas. Estos procesos más pequeños forman "microservicios": pequeños fragmentos que manejan una forma o función específica. Los microservicios son buenos para traducir estos datos a otro servicio para su posterior procesamiento (o al usuario final ).

Cuando un usuario solicita una página, un controlador de solicitudes puede ser el primer microservicio que toca. Este servicio puede enviar la solicitud a un grupo de microservicios que manejan publicidad, heurística de usuarios, perfiles, datos, etc. Cada uno de estos microservicios puede funcionar en esta solicitud inicial, pero también se pueden expandir para proporcionar la misma funcionalidad para otras solicitudes. permitiendo así a los microservicios manejar de manera más eficiente estas primeras solicitudes y posibles futuras.

¿En qué se diferencian los contenedores y los microservicios?
Estos dos temas pueden parecer bastante similares, pero hay algunas diferencias muy específicas entre los dos que deben entenderse.

En primer lugar, los contenedores y los microservicios se pueden utilizar de forma colaborativa o aislada. Es posible que una aplicación exista como una solución de servicio monolito en la que todo lo necesario se incluye en la función ejecutable única; También es posible que este gran servicio sea en realidad una colección de microservicios sin un contenedor a la vista. Los contenedores pueden contener microservicios, y un microservicio puede contener un contenedor para facilitar una función central que no se puede reducir más.

En segundo lugar, existen ventajas e inconvenientes para cada implementación en particular. Los microservicios brindan soluciones más extensibles y escalables, ya que cada servicio puede moverse ágilmente a través de diferentes segmentos y plataformas. Esto también significa que los microservicios pueden ser muy livianos en comparación con otras soluciones, ya que cada nuevo microservicio es simplemente una parte de un volumen mayor en lugar de requerir la creación de una entidad completamente nueva con sus propios recursos.

Sin embargo, los microservicios tienen algunos inconvenientes. En particular, las redes de microservicios pueden volverse muy complejas. Dado que cada microservicio es esencialmente parte de un ecosistema de servicios más amplio, cada microservicio individual debe construirse y planificarse dentro de un complicado sistema contextual.

Los contenedores, por otro lado, tienen el beneficio principal de que la estructura es diferente. Como todo está integrado en su propio contenedor y todos los recursos necesarios están incluidos en la función, todo se puede construir con su propia forma y flujo distintos. Este es un gran beneficio en términos de simplicidad de desarrollo, ya que solo debe preocuparse por el contenedor en sí.

Desafortunadamente, esto también significa que existe un alto nivel de ineficiencia. Múltiples sistemas en contenedores significan recursos duplicados, funciones duplicadas y, en algunos casos, servicios completamente duplicados. Esto significa que se otorga una extensibilidad y flexibilidad significativamente menor en términos de recursos, incluso si obtiene cierta extensibilidad y flexibilidad en términos de patrones de desarrollo.

Tecnologías Comunes
Este tema conlleva una discusión sobre las tecnologías estándar para contenedores y microservicios. En la naturaleza, ¿Cómo se ven realmente estas dos tecnologías?

Tecnologías de contenedores
Las herramientas de contenedor más comunes con las que se encontrará el desarrollador promedio son Docker y Kubernetes . La principal diferencia entre Docker y Kubernetes se reduce al hecho de que Kubernetes está centrado en el clúster, mientras que Docker está centrado en los nodos. En otras palabras, Docker ejecuta contenedores en un solo nodo de recursos y Kubernetes ayuda a administrar un clúster de servidores y recursos. A veces, Docker y Kubernetes se discuten como estándares en desacuerdo, pero Microsoft lo afirma mejor así :

“La conversación en torno a Kubernetes vs. Docker a menudo se enmarca como: ¿debería usar Kubernetes o Docker? Esto es como comparar manzanas con tarta de manzana, y es un error común pensar que debe elegir una u otra.

La diferencia entre Kubernetes y Docker se comprende más fácilmente cuando se enmarca como una pregunta de "ambos y". El hecho es que no tiene que elegir: Kubernetes y Docker son tecnologías fundamentalmente diferentes que funcionan bien juntas para crear, entregar y escalar aplicaciones en contenedores ".

Si bien indudablemente hay otras ofertas en este espacio (en particular Apache Mesos, Nomad ), estas dos son las más comunes y extendidas.

Tecnologías de microservicio
Debido a que un microservicio es un paradigma, las tecnologías que los respaldan varían enormemente desde una simple habilitación hasta un soporte y marcos más complejos. El núcleo del método de microservicio es la idea de desarrollo RESTful, un tema del que hemos hablado en profundidad antes . El diseño RESTful habilita y amplía las posibilidades de microservicios y se puede aprovechar para proporcionar funcionalidades cada vez más complejas.

Para ser más específicos, veamos un ejemplo de una tecnología que permite el futuro del paradigma conceptual de microservicios. GraphQL es quizás una de las tecnologías más impactantes y prometedoras del moderno sistema de comunicación de microservicios.

GraphQL, en esencia, permite que la salida de un microservicio sea dictada en gran medida por la entidad que solicita la función. Al controlar esa salida y permitir la manipulación y conversión, GraphQL facilita un entorno de microservicio en el que el cliente forma y utiliza los datos de la manera que dicta sea apropiada. Mirando hacia el futuro de los microservicios, podemos ver que las implementaciones cada vez más complejas requerirán una conversión, transformación y extensión más avanzadas. En consecuencia, GraphQL es una tecnología prometedora que hace posible que el microservicio haga mucho más de lo que podría en su forma más básica.

Por supuesto, una interacción más compleja también significa sistemas más complejos y que se envían más datos a través de la tubería. Podemos buscar otro desarrollo sólido en forma de Node.js para encontrar nuestra solución. Node.js es increíblemente rápido cuando maneja tareas de Entrada-Salida porque para eso fue construido principalmente. En un entorno lleno de microservicios, la adopción de Node.js puede reducir significativamente la sobrecarga y puede mejorar la velocidad de procesamiento y los requisitos de recursos.

Stephen Commisso, ingeniero de software sénior de GoDaddy, resume mejor esta mejora. Commisso afirma que "la utilización adecuada de microservicios y Node.js puede ayudar a manejar la misma carga con solo el 10% del hardware". En un mundo donde los microservicios se expanden constantemente para cubrir más terreno mientras se agregan más usuarios cada día, este proceso de ahorro de recursos es de vital importancia. Los microservicios no solo tendrán que descubrir cómo habilitar funciones más eficaces en el futuro; Tendrán que descubrir cómo optimizar el flujo de datos para respaldar eso.

Conclusión
Los contenedores y microservicios no son una situación de una u otra. Algunas situaciones pueden requerir una opción específica según la aplicación, e incluso hay algunos casos en los que ambos son apropiados como motor colaborativo y de apoyo. Dicho esto, hay algunos casos sólidos que podrían hacerse para cada uno. Los contenedores son mejores para funciones discretas que tienen requisitos previos establecidos, ya que empaquetan la función con los recursos. Los microservicios, por otro lado, son mejores cuando muchas funciones comparten los mismos recursos, a pesar de que cada una de las funciones hace cosas muy específicamente diferentes.

¿Qué opinas de este resumen? ¿Prefieres contenedores o microservicios? Háganos saber en los comentarios a continuación.

Publicar un comentario

0 Comentarios